函数是Jmeter中封装的最小单元,是一些功能实现。
参数使用的操作步骤还是1、打开函数助手;2、选择函数;3、修改参数;4、生成并拷贝结果去使用。
下面是常用的函数以及用法:
__counter():计数器
__time():获取时间的函数
__random():生成随机数的函数
__CSVRead():读取CSV文件的数据,和CSV DATA Set Config类似。
__setProperty():设置属性
__property():获取属性
__time()函数
${__time(yyyy/MM/dd HH/mm/ss,)}:取当前的年月日 时分秒
__time()的第一个参数可以:yyyy/MM/dd HH:mm:ss(年/月/日 时/分/秒)
也可以只有年月日,yyyy/MM/dd
或者只有时分秒,HH/mm/ss
格式也可以变化,比如yyyy.MM.dd,注意大小写敏感。
第二个参数就是将当前的时间值存到哪个变量名中。
例子:时间戳
__Random()函数
Random()函数是取一个随机数的意思,有三个参数,前两个参数是随机数的取值范围,第三个参数是变量名,将取到的随机数放到哪个变量中。
__CSVRead()函数
从CSV文件读取一些数据,进行批量操作
上面讲参数化的时候,说过多用户同时登录的操作,用__CSVRead()函数如果实现呢?
接口链接:https://api.apiopen.top/developerLogin
1、添加一个HTTP请求,线程数设置为3,新建一个文件保存接口需要的参数:
2、然后使用函数生成工具,找到__CSVRead()函数,
两个参数,第一个参数是参数文本文件的路径(必须是绝对路径),第二个参数是列号,从0开始。
3、HTTP请求的Body Data改为:name=${__CSVRead(F:\jmeter\练习\参数\dataLogin.txt,0)}&passwd=${__CSVRead(F:\jmeter\练习\参数\dataLogin.txt,1)}
即可。
__CSVRead()函数和CSV DATA Set Config的区别:
一个是设置的线程组的属性有区别,CSV DATA Set Config要设置循环次数,才会依次去找参数。__CSVRead()设置的是线程数
另外路径,__CSVRead()可以写相对路径,CSV DATA Set Config只能写绝对路径。
__setProperty() 、__property() 属性相关函数
__setProperty() :设置属性
__property():属性获取
前面讲到关联的地方,讲了同一个线程组中,两个HTTP请求有关联的情况,比如第一个请求是请求百度首页,第二个请求是在搜狗首页,搜索第一个请求返回的title。
之前讲的关联的步骤大致是这样的:
1、新建一个线程组,在该线程组新建HTTP请求,请求百度首页,然后在该请求添加一个后置处理器,xpath提取器或者正则表达式提取器,提取出title。赋值给变量myTitle
2、在线程组内再新建一个HTTP请求,请求搜狗首页,参数设置query=${myTitle}
这样运行就可以了,不会报错,但是如果这两个HTTP请求是在不同的线程组内,这样就不行了。会报如下错误:
myTitle参数没有找到。如何改一下就可以了呢。
可以使用__setProperty()和__property()
步骤:
接着上面的步骤,第三步:
3、点击函数助手,找到__setProperty(),第一个参数是属性名称,起个名字,第二个参数是你要把哪个参数设置为全局参数
4、右键“线程组_setProperty”,添加->Sampler->BeanShell Sampler,将上面生成的__setProperty()函数粘贴到这里。
5、点击函数助手,找到__property()函数,填写属性名称,和setProperty()方法中的一致。
6、修改“线程组_setProperty2”中的“HTTP请求_搜狗”,将原来的${myTitle}修改为:${__property(out,,)},运行就不会报错了。
共享数据(全局变量):
用上面的BeanShell的方式可以设置共享数据,运行完以后可以到工作台中去看到,右键工作台->添加->非测试元件->Property Display
运行完毕后,就可以看到这个值了。
虽然可以这样设置全局变量,但是尽量少用,毕竟它是在你整个运行期间一直占用内存的,即使这个线程组不用了,也不会释放。