参数化详解
Jmeter中可以实现变量参数化的方法可以使用:
用户定义变量;
用户参数;
这两个的区别
用户定义变量 | 用户参数 | ||
---|---|---|---|
作用域 | 全局的,可以作用于整个测试计划(可以跨线程组) | 局部的,只能作用于当前线程组或当前取样器。 | |
元件 | 配置元件 | 前置处理器 | |
执行顺序 | 因为是配置元件,所以执行顺序是最高的 | 比配置元件要低 | |
获取值 | 启动运行时,获取一次值,在运行过程中不会再动态获取值,值不会再发生变化。 | 在启动运行时,会获取一次值,在运行过程中,还可以动态获取值。 |
用户定义变量
添加配置元件->用户自定义变量
在脚本中调用变量,可以使用:${变量名}
函数式也能作为值放进变量内
用户参数
添加前置处理器->用户参数
在脚本中调用变量,可以使用:${变量名}
注意,里面有个每次迭代更新一次的选项。当勾选之后,每次迭代当前线程组时才会更新一次数据。
如果线程组内有多个请求都是用了这里的参数,那在一次迭代中,所有的参数的值都是固定的,只有到了下一次迭代才会更新。
反之,如果没勾,那每次只要遇到需要用到这里面的参数时,都会获取一次新的参数值。
函数
Jmeter自带了一些函数,可以通过tools->函数助手对话框查看函数。
找到想要的函数,如下面的Random是个随机函数,设定随机函数的参数,最下值为1, 最大值为99,点生成就会自动生成函数式,只需要复制这个函数式放在脚本中使用即可。
常用函数
所有的函数式除了可以直接使用以外,还可以放进用户定义变量或者参数变量之中,使用方式都是一样的。
拼接函数(__V)
这个函数可以将变量名和
现在有一个场景:有3个参数,参数名分别是var_1、var_2、var_3,我想要引用这3个参数。
如果像让它按顺序取值,如第一次迭代取var_1,第二次迭代取var_2…,这种场景就用得上__V函数了。
使用函数助手,找到V函数,第一个参数里输入var_${__counter(,) ,点生成得到一个函数,把它放到脚本里就可以使用了
重新运行,迭代3次,取到3个值
跨线程组取值
jmeter的 “属性”,跨线程组取值与属性有很大的关联。
在jmeter目录下,以.properties结尾的文件都是Jmeter的属性配置文件。
这些属性都是Jmeter工具自带带有的标签。
分为:
静态属性:写在properties文件中的属性信息,都是静态属性;
动态属性:在运行过程中,动态定义的属性;
由于属性在Jmeter本身所具有的标签,因此在jmeter内部不管是哪个线程组都可以使用,跨线程组取值也是基于这个特性。
回归正传,要实现跨线程组取值,有2个必备函数:
__P: 获取属性(也可以用__property代替);
__setProperty:设置动态属性;
例子:
在属性中添加一个age,值是1~99随机
在测试计划右键->非测试元件->属性显示,可以查看属性
可以看到,属性里已经添加了一个age,值是56
然后另建一个线程组,并且添加一个调试取样器一个监听器
使用_P从属性中取值
运行,然后就发现可以取到值了,值是72,值会变是因为又重新运行了。
注意:
如果有多个线程组同时启用,这些线程组之间并不一定是按上下顺序来执行的,默认是并行的,所以有可能出现下面的线程执行比前面的线程组提前完成。
也因此,使用这种办法跨线程组,偶尔会出现取到的值是同一个,或者取到的是空值。
不过在性能测试场景下,这种并不是问题,毕竟就像登录时,也不是每个人都会百分百输入正确的密码,偶尔几个人输错密码,然后服务端提示密码错误,这种对于性能测试是属于正常场景。
用户定义变量虽然是全局的,虽然也是可以跨线程组,但要记住,用户定义变量只有在运行时会取一次值!!运行过程中就不会再改变了!
改变线程组执行顺序(不推荐改变)
默认情况下,Jmeter的线程组是并行的。
但既然是默认,那就代表可以改了,改的方法也很简单,在测试计划中,勾选“独立运行每个线程组”即可。这样,只有上一个线程组运行完成了,才会执行下面的线程组。
在性能测试下,不需要勾选!
勾选了之后是第一个线程组运行完之后才开始运行第二个线程组,如果第一个线程组要运行10次,那得等着10次运行完成,第二个线程组才会启动,这样就算取值也只是去到第一个线程组最后一次运行产生的结果而已。
这个会极大的影响性能测试的混合场景测试,在性能测试中,不会去勾选这个。
下面是我整理的2023年最全的软件测试工程师学习知识架构体系图 |
勇敢追求自己的梦想,不断挑战自我。失败并不可怕,它是成功之母。只要坚持,每个人都有机会成为自己想成为的那个人。
生命不息,奋斗不止;路漫漫其修远兮,吾将上下而求索;只有疯狂才能有真正的进步;要想改变生活,先改变自己;做一个积极向上的人,收获自然乐无穷。
不是因为事情难我们就不去做,而是因为我们不去做才让事情变得更难。迎着挑战,勇往直前,永不言败,最终的胜利属于那些坚持不懈的人们。