这里是清安,上一章我们讲到了控制器,本章就来说道说道参数化,下一章,我们就直接跑一个实例,带你深入了解这些前面的基础。
接口还是前一章的接口,这里就不重复写了。
什么是参数化?
参数化就是将某一些请求中的一些参数值替换为动态的请求,比如第一次请求的值是a,下一次迭代请求想变成b,这就是典型的参数化场景。其目的在于模块真实的用户请求。
文件参数化
添加》》配置原件》》CSV DATA SET CONFIG,添加后如下图所示:
如你所见:
文件名:文件地址,最好不要中文
编码:UTF-8,也可不选
变量名:自己记好就行,如果两行数据就用英文字母隔开,如:user,pwd
是否忽略首行:如果你的首行写了username或者其他的,就可以忽略,否则循环第一次拿到的就是你第一行的数据,会造成误差
是否文件结束再次循环:如果选择TRUE则会一直循环,一半Flase
其他的默认即可
看看HTTP请求部分:
图中红色部分是重点部分,前面的csv提取就是用到了这里。csv文件种我写了北京,上海,深圳等五个地方。我们跑起来看看。
这里你需要知道的,循环控制器的好处:文件中写了五个地点,这里需要循环五次才行,否则只能输出一个地点的天气。
这里很多人应该会遇见一个问题,就是CSV文件创建不出来,也就是乱码的现象。这里告诉你一个技巧,创建好一个空的excel文件,不写数据,将后缀改成CSV,用notepad++打开进行编写,将里面的乱码数据删掉,即使刚开始没有数据打开后也会有一堆乱码数据,格式转为utf-8进行内容输入就好。
这里值得注意的是,文件读取如果数据量过于庞大,就不适合用于压测了,因为本身的读取就有一定的压力了,这样会导致压力分散,数据就不太符合了。
其次就是路径需要更改,这也是其中的一个弊端。
数值函数参数
工具》》函数助手对话框
随机数
随机函数:${__Rando(1000,9999,data)}
该函数有3个参数,第一个参数表示最小的数字,第二个表示范围内最大数字,第三个为变量名称。通常用来表示本次迭代的值是多少。
注意:
如果后期使用该值直接填写rando的话又会重新产生一个随机数,那么只能填写这个变量名。
我们先添加两个Java请求出来,以便于数值的输出:
这里有个小技巧,就是在函数助手里面选中函数,然后先生成一次随机数,再出来就可以在这个位置直接粘贴上。
这两者的产生的随机数是有可能重复的。这点是需要记住的。
如果你想使用这个随机数,我们就可以用第三个值用来做变量,就如上我第三个值写的da,我们可以直接在Java请求2中取到值:
结果图我就不摆出来了,这里告诉你用法,同样,这种方法适用于一些场景。
随机字符串
${__RandomString()}
该函数有3个参数,第一个参数表示生成的随机字符串位数,第二个表示在哪些字母下生成,第三个表示变量名称,也可以不要变量名称。
也是可以借助工具的:
跟随机数用法类似,没用太大的区别,这里介绍介绍,了解一下。
唯一值参数化
实际压测中经常会有用到唯一值的情况,特别是对系统新增接口时,因为一些编号,订单等是唯一的,所以在大量压测下,唯一值特别重要,唯一值没做好,很有可能影响到脚本的失败。
所以我们可以利用时间函数,时间永远是往前走的,取当前系统时间缀以达到我们的唯一值效果。
1、${__time(,)} 生成的是一个13位的时间缀,在毫秒级别,然后再加上__Random()配合
2、${__time(/1000,)}:该公式精确到秒级别, 10位数 1527822871,以秒的基础上可加上随机
3、${__time(yyyyMMddHHmmss,)} 按照一定格式进行展示,年月日时分秒
4、${__time(ddHHmmss,)} 按照一定格式进行展示,年月日时分秒
第二种情况,在高并发的情况下不适用,因为1秒内可以产生庞大的数据,就比如1S执行一百个甚至更多的线程。这样第一种时间戳的情况就会产生大量的误差。
达到唯一值有什么办法呢,精确到毫秒?精确到毫秒也是会产生一定的重复,因为计算机本身就是毫秒级别的。这里就可以用上毫秒+随机数。尽可能的减少误差的产生。
怎么样进行时间转换呢,把后三位的随机数去掉,以及将毫秒换成秒,再去掉三个0
另外的两种就不做具体的介绍了,自己尝试吧,本篇参数化介绍就到这了。