3.Unique取值
Unique取值是一种更加高级的顺序取值,Unique强调的是取值的唯一性,但是违反了该规则也能继续运行,VuGen提供了When out of values选项来处理非唯一的情况。When out of values包含3个选项,如图A.88所示。
图A.88 Unique取值下的When out of values选项
1)Abort Vuser
当参数取值超出参数表记录的条数时,忽略当前虚拟用户。
2)Continue in a cyclic manner
当参数取值超出参数表记录时,使用循环的方式取值。
3)Continue with last value
当参数取值超出参数表记录时,使用参数表中的最后一个值。
我们来测试一下,设置脚本的迭代次数为6,设置When out of values为Abort Vuser,运行脚本结果如下所示:
Starting iteration 6.
Error: Parameter 'paramzhongwen': No more unique values for this parameter in table 'paramzhongwen.dat' [unique range is 1-5]. The Vuser is aborted according to "When Out Of Values" policy.
Action was aborted.
Ending Vuser...
Starting action vuser_end.
Ending action vuser_end.
Vuser Terminated.
可以看到,当第6次迭代开始的时候,VuGen发现参数表中的记录不够用了,根据When out of values策略,选择了停止当前虚拟用户的方式,脚本停止运行。
从参数化使用Unique的目的来说,脚本需要的是唯一记录,那么运行时对参数的取值次数超出了参数记录的条数自然违反了这个策略,所以需要停止脚本。Abort Vuser是经常用的选项。
那么使用另外两个选项有什么好处呢?如果选择Continue in a cyclic manner,则当记录取完之后,回到参数列表的头部重新取值。运行脚本可以得到以下的结果:
Starting iteration 6.
Warning: Parameter 'paramzhongwen': No more unique values for this parameter in table 'paramzhongwen.dat' [unique range is 1-5]. The parameter continue to beginning of range in a cyclic manner according to "When Out Of Values" policy.
Notify: Getting new value for parameter 'paramzhongwen': table = 'paramzhongwen.dat' column = '0' row = '1'.
Starting action Action.
Action.c(3): Notify: Parameter Substitution: parameter "paramzhongwen" = "甲"
Ending action Action.
Ending iteration 6.
第6次取值时会发现没有足够的参数使用了,但是根据策略记录回到开始,所以取值得到了[甲]。
如果选择Continue with last value,则当记录取完后,重复取最后一行记录。运行结果如下所示:
Starting iteration 6.
Error: Parameter 'paramzhongwen': No more unique values for this parameter in table 'paramzhongwen.dat' [unique range is 1-5].The parameter continues with last value of the range according to "When Out Of Values" policy.
Notify: Getting new value for parameter 'paramzhongwen': table = 'paramzhongwen.dat' column = '0' row = '5'.
Starting action Action.
Action.c(3): Notify: Parameter Substitution: parameter "paramzhongwen" = "戊"
Ending action Action.
Ending iteration 6.
第6次取值根据策略得到了[戊]这个参数值。
下面总结一下选择Select next row 下的Unique选项时,参数化的取值情况,如表A.6所示。
表A.6 唯一性取值下的各种情况
有时需要手工将参数的值下移一位,怎么办呢?这里可以使用lr_advance_param()函数来解决这个问题。比如前面脚本的参数param1是Sequential+Each iteration,使用脚本:
lr_eval_string("{param1}");
lr_eval_string("{param1}");
运行的结果就是[甲|甲]。如果把脚本修改成:
lr_eval_string("{param1}");
lr_advance_param("param1");
lr_eval_string("{param1}");
运行出来的值就是[甲|乙]了。
也可以使用函数lr_next_row()来实现,脚本为:
lr_eval_string("{param1}");
lr_next_row("param1.dat");
lr_eval_string("{param1}");
lr_advance_param()和lr_next_row()的主要区别是在于前者在函数内写参数名,而后者在函数外写参数文件名。
至此我们介绍了在VuGen下一个虚拟用户脚本运行的情况,那么在Controller场景下模拟多个虚拟用户运行脚本时,虚拟用户和虚拟用户之间的取值又是怎么样的呢?
版权声明:51Testing软件测试网获作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。
相关文章: