如何完善Loadrunner录制后产生的脚本

当录制完一个基本的用户脚本后,在正式使用前我们还需要完善脚本,增强脚本的灵活性。一般情况下,我们通过以下几种方法来完善测试脚本。插入事务、检查点、插入集合点、参数化、思考时间。

插入事务:

事务:为了衡量服务器的性能,我们需要定义事务,比如我们在脚本中有一个数据库查询操作,为了衡量服务器执行查询操作的性能,我们把查询操作定义为一个事务,在运行脚本时,loadrunner运行到该点时,会开始计时,直到运行到该事务的结束点时,计时结束,

这个事务的运行时间在结果中会有反映。

插入事务操作可以在录制过程中进行,也可以在录制结束后进行。

插入检查点:

LoadRunner提供了在脚本中插入检查点的方法,就是检查Web服务器返回的网页是否正确。

Loadrunner中检查点有两种:图片和文本,可以用以下三个函数实现:

web_find(),web_reg_find(),web_image_check().

web_find()只能在html录制模式下查找html页面的文字,查找速度慢,需要在html请求结束后查找(要放在查找内容的后面)

实例:

web_find("web_find","RighOf=a","LeftOf=b","What=name",LAST);

RrightOf指在a的右边是所查找的内容name,LeftOf指b的左边是所查找的内容name,a name b

注意事项:使用该函数时,要在Vuser->Run-Tme Settings中勾选Enable Image and text check

系统默认是不勾选该选项的。

web_reg_find()

函数作用:在缓存中查找相应的内容,所以要放在查找内容之前

Web_reg_find是注册类型函数,它本身并不执行,不能通过它的返回值来作为事务的判断条件(因为web_reg_find()的返回值0和1表示web_reg_find()是否注册成功,并不代表查找的内容是否存在,也就是说无论查找的文本内容是否存在,都返回0。它是从返回的缓冲区扫描而不是在接收的页面中查找。这是比web_find更高效的一个函数。web_reg_save_param也是注册类函数,需要放到请求的页面之前,而且查找的内容是服务器返回的缓冲数据中查找,所以查找内容应该看html源代码的内容。

参数举例:web_reg_find("Search=Body","SaveCount=ddd","Test=aaa",LAST);

在使用web_reg_find时有一点需要注意,如果抓取的是中文,不要用utf8格式,否则抓到的都是乱码,运行总是不会成功。

注:在录制过程中添加的检查点,用到的函数是web_reg_find(),且参数只有“Text=”

web_image_check()

函数作用:在页面中查找一个具体的图片,写在对应的web_url后面

使用该函数时,要在Vuser->Run-Tme Settings中勾选Enable Image and text check

实例:web_image_check("web_image_check",“Alt=”,"src=/images/signoff.gif",LAST);

“Alt”和“Src”的值直接取该图片在网页源代码中相应参数的值;

这里说明一下对应的src可以在脚本执行后的日志里面找到,日志记录的是完整路径,src部分只要相对路径就可以了

参数化

首先:为什么要对脚本进行参数化

a)为了减少脚本的大小和脚本数量,借助参数化我们可以减少脚本的数量,如果不进行参数化,我们为了达到目标可能要拷贝并修改很多个脚本。

b)使业务更接近其实的客户的业务,每个虚拟用户使用不同参数值来模拟这样才接近客户的实际情况。

这里总结一下,参数化过程中要注意的问题:

1)参数化文件尽可能少,因为参数是放在内存中的,占用了内存的资源;

2)参数化文件与脚本分离;

3)参数文件的路径应该以相对路径来取;

4)一些时候为了使参数更具有真实性,参数应该从数据库中来获得;

5)参数类型的选择;

6)参数的数据一般要由业务决定;

注意: LoadRunner允许最大参数化用户数为100人,如需扩大参数量,可在安装路径下vugen.ini文件中修改:MaxVisibleLines=1000。(此为设置允许最大参数化用户数为1000人)

“Select next row”有几种选择:Sequential、Random、Unique。

“Update value on”有几种选择:Each iteration、Each occurrence、Once。

组合类型:

Sequential

·与Each iteration组合:将为每次跌倒从数据表中提取下一个值。

·与Each occurrence组合:将为每一次参数的出现从数据表格中提取下一个值,即使它在同一次迭代中。

·与Once组合:第一次迭代中分配的值就会在每个Vuse接下来所有的迭代中使用。

Random

·与Each iteration组合:将会为每一次迭代从数据表中提取一个新的随机值。

·与Each occurrence组合:将会为每一次参数的出现从数据表中提取一个新的随机值,即使它在同一次迭代中。

·与Once组合:第一次迭代中分配的随机值就会在改Vuser的所有迭代中使用。

Unique

·与Each iteration组合:将会为每一次迭代从数据表格中提取下一个唯一值。

·与Each occurrence组合:将会为每一次参数的出现从数据表格中提取一个新的一直,即使它在同一次迭代中。

·与Once组合:第一次迭代中分配的唯一值就会在每个Vuser的所有接下来的迭代中使用。

插入集合点

执行负载测试时,需要模拟系统上有较重的用户负载。要实现此操作,可以同步 Vuser 以便恰好在同一时刻执行任务。通过创建集合点,可以配置多个 Vuser 同时执行操作。当某个 Vuser 到达该集合点时,将进行等待,直到参与该集合的全部 Vuser 都到达。指定数量的 Vuser 均到达后,释放所有这些 Vuser。

可通过将集合点插入到 Vuser 脚本来指定会合位置。在 Vuser 执行脚本并遇到集合点时,脚本将暂停执行,Vuser 将等待 Controller 或控制台的允许以继续执行。Vuser 从集合释放后,将执行脚本中的下一个任务。

注意:只能向 Action 部分(而不是 init 或 end 部分)添加集合。

思考时间lr_think_time

就是一个事务要开始时思考的时间;比如,你要点击一个“登录按钮”,我们都要点击这个按钮要先思考下,就是人为脑袋思维的延迟,还有手指点击鼠标的这个动作的时间 一般是1-5秒,这就是思考时间,性能测试模拟思考时间就是模拟真实人为动作的方式来做压力测试。

一般在脚本中思考时间是这样写比较合理,在一个事务的结束点另一个事务的起始点,两者中间定义思考时间。事务之间没有思考时间

lr_end_transaction("登录", LR_AUTO);

lr_think_time(3);

lr_start_transaction("计算连接");

正常情况下思考时间越短,对服务器的压力会越大。

事务的响应时间就是指从客户端发起一个请求开始,到客户端接收到从服务器端返回的响应结束,这个过程所耗费的时间。

响应时间= 网络响应时间+ 应用程序响应时间

一般在测试结果分析时,要分析事务的响应时间,要过滤掉思考时间。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180125B0FB1B00?refer=cp_1026

同媒体快讯

相关快讯

扫码关注云+社区