脚本处理
步骤一:设置协议
Vuser - Run-time Settings - Toolkit Options,在Emulation type中选择MS SOAP(不选的话执行脚本的时候会报错)
步骤二:脚本的参数化
大多数脚本都是需要进行参数化的,参数化是为了保证数据的多样性,或者出于实际中业务的特点考点。
首先选中要参数化的常量,右击选择Replace with a parameter,Parameter name栏中换成有意义参数名称便于维护,点击OK。脚本中原常量的位置已由带括号的变量名替换。
点击菜单Parameter List,可以看到常量下只有一个值,点击Edit with Notepad。打开一个文本文件,在第一个值下输入其他数据保存。这样,常量字段参数化完成,常量有多个被选值组成,具体执行那个参数,根据设置决定,默认为顺序执行。
参数化详细设置说明
参数的类型Parameter type:在参数化一个常量的时候有很多参数类型可供选择;一般有File,Unique Number,Date/Time
File:通过文件的形式参数化常量,这种方式可以将参数化数据存储在一个.dat文件中,是一种最常用的方式。
编辑dat文件有两种方式:
1.Parameter list弹出框,点击Edit with Notepad打开.dat文件编辑
2.找到给文件在硬盘里的绝对位置进行编辑。方法:将光标房子啊脚本任意位置,右键点选Open script. directory可以打开该脚本所在目录,找到该dat文件双击打开编辑即可。
参数在场景中的运行方式:通过select next row 和 update value on不同的组合来决定参数在场景中不同的取值方式。
Select next now:不同Vuser之间的取值方式。Sequential:每个Vuser均是顺序取值,Random:每个Vuser均是随机取值;Unique:每个Vuser取值不能相同。
Update value on:取值更新方式。Each occurrence:每次出现更新;Each iteration:每次迭代更新;Once:在所有迭代中只取一个值保持不变。如果在一个脚本中该参数只出现一次,则Each occurrence和Each iteration是相同的。
Allocate Vuser values in the Controller:该选项为select next row选择Unique(每个Vuser取值不能相同)时所特有的。
选项1Automatically allocate block size,LR为每个vuser自动分配参数值。如果采用这种方式,假设在场景运行时设置迭代次数为2,则第一个Vuser使用参数中的前1、2个,第二个Vuser使用参数中的前3、4个,第三个Vuser使用参数中的前5、6个……以此类推;
选项2Allocate XX values for each Vuser,手工设定分配参数值。假设分配n个值给每个Vuser,则第一个Vuser使用参数中的前1-n个,第二个Vuser使用参数中的n+1-2n个,第三个Vuser使用参数中的前2n+1-3n个……以此类推。
Select next now 和Update value on这个两个选项是两个描述不同维度的设置,select next row是描述不同Vuser第一次取值时彼此之间的作用关系。Update value on是描述在一个Vuser里不同迭代里面的取值关系。两者结合可以组合多种参数取值方式,用来满足不同的业务需求。
假设参数有1、2、3、4、5、6、7、8、9、10这10个备选值,场景设置为运行3个Vuser,迭代次数为2,不同搭配比较如下:
Sequential+Each iteration这种方式最常用,表示每个Vuser 都是顺序取值,每次迭代更新。运行后取值如下:
Vuser1:1,2
Vuser2:1,2
Vuser3:1,2
Sequential+Once:表示每个Vuser都是顺序取值,每次迭代取值不变,运行后取值如下:
Vuser1:1,1
Vuser2:1,1
Vuser3:1,1
Unique+Once表示每个Vuser彼此之间不相同,但是每个Vuser在每次迭代中值保持不变。在测试存款性能的时候,由于在实际业务中不不存在两个人同时向同一账户存钱的可能,所以对存款账号的参数化就可以采取这种方式,保证不同的用户操作不同的账号,不会再账号上有并发产生(个人觉得这种情况还是有的呀~待后续理解),运行后取值如下:
Vuser1:1,1
Vuser2:2,2
Vuser3:3,3
Unique Number:取得一个唯一值,一般对有特殊业务要求的值进行参数化时使用。比如前台流水号必须唯一,便可以选择这种方式参数化。
Numer:代表一个Vuser里可选值得取值范围,如图1-100。如果该脚本创建好后,在执行场景的时候希望有五个Vuser并发,则这五个Vuser里前台流水号参数的取值以此是:1-100,101-200,201-300,301-400,401-500。
Sample和Number:这两个字段用来规定取值的输出样式,如上图选择%03d则1的输出样式为001,如果选择%04d,则1的输出样式为0001。
Update value:取值更新方式。Each occurrence:每次出现更新;Each iteration:每次迭代更新;Once:在所有迭代中只取一个值保持不变。如果在一个脚本中该参数只出现一次,则Each occurrence和Each iteration是相同的。
When out of values当范围内可选值都已取过后的取值方式。比如Number中设置为1-100,则在运行脚本的迭代次数达到100次时,则取值范围内的值都已取过一遍,此时如果迭代还没结束则有三种取值方式。
Abort Vuser:如果超出范围则LR报错。报错信息样式如下:Parameter’前台流水号’:All values in unique block already used.Block size is 5.The Vuser is aborted according to“When Out of Values” policy
Continue in a cyclic manner:继续循环取值;
Continue with last value:继续取最后一个值;
Date/Time:取得当前日期或时间
Date/Time:选择时间显示方式
Update Value:时间更新方式(参见其他参数方式该字段设置)
步骤三:定义事务
定义事务是为了在性能测试时,更准确的统计服务的响应时间,通常蒋一个服务定义成一个事务。这样事务响应时间就是服务的响应时间。
[lr_start_transaction("常量"); lr_end_transaction("常量"),LR_PASS);
步骤四:根据服务时间结果和预期结果是否相同来决定事务的成功或失败;
性能测试时首先要保证服务功能执行成功的前提下统计服务的响应时间,否则统计出现逻辑错误的服务的响应时间没有任何意义。
下图中开始事务没有变化,只是将结束事务放在if-else分支中。该代码块的意思是如果服务实际返回码Param_code和预期结果success不一致,则事务按失败处理并在日志中显示错误码,否则事务按成功处理.
以上四步,一个测试脚本就做好了,在测试前,首先要确保单脚本中的事务成功再进行并发测试。一般单脚本事务失败是由于数据问题或者是服务逻辑错误导致的。