目录
一、函数
1.jmeter工具属性
2.属性、参数、变量的区别
二、如何实现动态属性
1.设置属性
2.查看属性显示
3.跨线程组传递参数
4.为什么不直接定义全局变量
5.用setProperty设置属性,运行脚本后,从属性显示中可以看到,属性的值变化不及时,测试的时候会不会出错
三、扩展
1.动态属性:一直存在,还是朝生夕死
2.顺序
3.接受属性的线程请求tps比设置属性的线程请求tps大,会出现问题吗
一、函数
${__RandomDate(,,,,)}
随机日期。不包括结束日期。
${__P(,)}
获取属性。
${__property(,,)}
获取属性。
P只是property
这个函数的简写。
${__setProperty(,,)}
设置属性。设置jmeter的动态属性。
${__V(,)}
拼接函数
以.properties
结尾的文件,都是jmeter的属性配置文件。
属性是什么?是jmeter工具自身带有的标签。
1.jmeter工具属性:
jmeter属性:可能被改变。包括:
1.静态属性: 写在
properties
文件中的属性信息,都是静态属性。2.动态属性: 运行过程中,动态定义的属性。
系统属性:
os
、jdk
,这些是系统属性信息,不可改变的。
2.属性、参数、变量的区别:
属性是jmeter工具具有的。所有jmeter中的线程组要使用属性,都可以使用。 参数、变量,有局限访问。
用户定义变量:可以跨线程组,但是只限于线程组。
用户参数:只限于当前自己的线程组。
二、如何实现动态属性?
1.设置属性
${__setProperty(proper_par,${par},)}
![3a2c52af04430f8f2219f14b0cb6466a.png](https://i-blog.csdnimg.cn/blog_migrate/44ce66b6b8dd3ec10c432d5df97fb7da.png)
![40c4e57245487bdcba09e6c4d210626a.png](https://i-blog.csdnimg.cn/blog_migrate/8f24a3401a88a0a23418b14e7a0d2545.png)
随机生成的值给了用户参数par
,用这个${par}
的值给到这个proper_par
属性。
这个proper_par
属性的值就是par
的随机结果。
2.查看属性显示
![2ef5bf8e64fba7beb43b6ac5a8946ee0.png](https://i-blog.csdnimg.cn/blog_migrate/6467c802236b45eed332f6c9c2e4c8a8.png)
设置属性:
![a3b0bd6b61b1e1c50d9b78d72dd07efd.png](https://i-blog.csdnimg.cn/blog_migrate/6cd9d198f512dd30fa23458532d41651.png)
![16ae9222db8027cb064eb6fe39550a88.png](https://i-blog.csdnimg.cn/blog_migrate/6a6d9bbb8bdaeb43dfff3d3579a46f3c.png)
![b864fa8871824eb62ce5cd0f13470865.png](https://i-blog.csdnimg.cn/blog_migrate/5322cc475b152f37206cedefe3c636b6.png)
3.跨线程组传递参数
跨线程组使用的时候,可以使用获取属性的功能。用${__P(,)}
或${__property(,,)}
。
${__P(proper_par,)}
![e743f7925b8fee3ccd64663b6d9b98be.png](https://i-blog.csdnimg.cn/blog_migrate/1db67438f4d6de8f8439db1cf90bb4ea.png)
实现了跨线程组传递参数:
![af82bd099e14b20d4b7129f4a8981dd9.png](https://i-blog.csdnimg.cn/blog_migrate/33d60bc321caea12a9a843056bb5a444.png)
比如一个接口里面要用这个${__P(proper_par,)}
参数,线程组3的用户参数生成的动态值,实现了跨线程组传递参数。
![7da60eb074b5b94a342106ededbff4b3.png](https://i-blog.csdnimg.cn/blog_migrate/de26f46a5adb90a220ac06ba631cf15e.png)
![1cea2f3ecd5841b7a39c33deb078e7fd.png](https://i-blog.csdnimg.cn/blog_migrate/05745f927dfae75b1d019c50a42ef34a.png)
![b88e657ac55dc417753ad3ba3ed0d90d.png](https://i-blog.csdnimg.cn/blog_migrate/180b6917a03bf60cedf6b088c9111e0f.png)
4.为什么不直接定义全局变量?
全局变量: 整个运行过程中,值都不可能变,值只会固定一个。
5.用setProperty设置属性,运行脚本后,从属性显示中可以看到,属性的值变化不及时,测试的时候会不会出错?
功能测试: 作为功能测试、自动化测试,非性能测试时,把多个接口写在一个线程组下面。
就不会使用属性来实现跨线程组传参,所以他们不会遇到这个问题。
性能测试:
多个人要请求一段时间,会请求很多次。多个人在做这件事,万一有少量的人没有得到这个值,例如一万次请求有10次出错,对总体的性能结果的影响是可以忽略不计的。
三、扩展
1.动态属性:一直存在?还是朝生夕死?
动态属性是在运行过程中产生的,即使保存了脚本,关闭jmeter后,就自动释放了。
重启jmeter,打开该脚本,属性显示中就没有刚才设置的属性了。
2.顺序?
jmeter中,多个启用的线程组,在执行时,默认是并行执行。
如果执行线程3的时候,设置属性还未设置完成,线程4就要用这个属性,就取不到。
性能测试的时候,多用户并发,第一次就会取不到。最开始的时候出现那么几次取不到值。对于整体的性能测试结果是没有影响的,因为请求数量是比较多的。
![9951d1edd049bf3a45e209cc39d88e62.png](https://i-blog.csdnimg.cn/blog_migrate/ca73ff3fb4e8ce54b62ff013bdc3a2a5.png)
在性能测试中,不会勾选测试计划中的“独立运行每个线程组”。
混合场景设计:因为在实际的企业中,混合场景是不同数量的人对不同的接口同时得进行请求。
3.接受属性的线程请求tps比设置属性的线程请求tps大,会出现问题吗?
比如有一个部门是生产写字用的笔,你专门用这个笔写字。你写字的速度比它生产笔芯的速度快。
只要你的笔里有墨水,就可以一直写。写十个字的时候,它生产出一支笔。它生产出的一支笔可以写好多字呢。
只要接受属性的线程可以拿到值,设置属性的线程的tps是小是大,是没影响的。
只要有值就行,不管值的对错?
这个值的对与错,是功能测试人员关注的。对于性能测试人员,如果加了断言,就会去关注。
如果没加断言,关注的是服务器处理能力、处理的指标值。
出错的情况只是判断的依据。比如请求过去,没处理完毕,处理的里面有某个字段的值计算错误,并不关心这个。
处理的结果有没有问题,这个是功能测试人员所关注的。
在整个性能测试的过程中,错误率要在0.01%~0.1%
的这样一个标准下。
脚本链接:
链接:https://pan.baidu.com/s/1fWzMYelXMEYD2RRL8CWNYA?pwd=1234 提取码:1234
文章中除标明“图片来自网络”的图片,皆为小编本人所画所截图,计算机知识都一样,如有雷同,纯属巧合。
欢迎关注 “清菡软件测试”,进群加v:qhtester,备注:学校(公司名)+姓名(昵称),否则不予通过,感谢点赞与分享!