Vuser如何在并发时每次获取不同的参数值
场景
在压力测试的时候,我希望每次都获取不一样的值。lr参数化的时候有一个iteration number可以取迭代的值。那我设一个参数值类型为iteration number,那我能每次都取到不一样的值吗?
实验
Action()
{
lr_output_message(">>>>>>>>>>>user:%s",lr_eval_string("{user_iter}"));
return 0;
}
- Runtime setting 修改单用户迭代多次:打印出来每次取到递增值,似乎对了。
- 建一个场景,并发执行该脚本:将Enable log打开,通过查看场景执行的记录日志,发现log下每个文件(对应每个并发用户)都会从该迭代数中从第1个值开始取,且每次迭代往上递增。发现与我的目标并不一致。
解决
参数类型中有一个Unique number类型,最终用该类型来解决。设置unique类型时,会划出一个上下限。
假设我要取一个8位数字符串,我预计执行场景时会迭代600次左右。于是我设置参数如下:
当我并发数100时,第1个用户就会从00000001开始取值,迭代时每次加1,而第2个用户会从00001001开始取值,迭代时每次加1。因为我预计迭代次在600左右,因此不会出现1个用户在迭代中间值不够用然后重复取值的情况。
结论
iteration number只针对一个并发用户来说,每次迭代取值会不同。如果想所有并发用户都取不同的值,iteration number就不适用。就可以从unique number中作文章。
当然还有其它方式,可以定义file类型或者table类型,甚至数据库中去取值,那样就要提前构造足够多可用的数据了。