Jmeter的元件使用介绍:前置处理器详解

Jmeter的前置处理器可以用来在取样器执行前做一些数据准备操作,也需要注意使用的作用域问题。常用的前置处理器有:用户参数、BeanShell预处理器、JDBC预处理器

一、用户参数


【用户参数】与前面介绍过的【用户定义的变量】有相似之处,先来介绍下用户参数的使用方法再去区分两者的异同。
1、注意作用域的问题:

(1)如果是放在测试计划下,则整个测试计划都可以引用该处定义的变量
(2)如果是放在线程组下,则只能在所放的线程组下引用
(3)如果是在请求下,则只能在具体请求下引用

2、用户参数有名称,用户_N的定义,下面进行实例讲解。
实例1:只定义一个用户,则在引用变量的时候,永远都是这个用户的值。如图:

执行结果:

实例2:定义多个用户,则在引用变量的时候,会进行顺序循环取对应用户的值。

注:每次迭代更新一次:如果有多个用户/使用变量时勾选,如果不勾选,所有线程用的是同一个值,需要不同的线程用不同的值,需要勾选此选项

如图:

执行结果:

3、【用户参数】与【用户自定义的变量】的区别:
(1)【用户参数】可以给每个参数赋多个值,而【用户自定义的变量】只能赋一个值。

此处引发了一个思考,如果【用户参数】与【用户定义的变量】的变量名称重复的时候,会引用哪个值呢?答案是会引用到【用户参数】的值。

原因:

1、线程组下的用户参数优先级高于测试计划里的用户自定义变量;

2、HTTP 请求下的用户参数优先级高于线程组下的用户参数;

3、HTTP请求下的用户参数和用户自定义变量重名,则优先取用户参数的值;因为配置元件执行完再到前置处理器,所以前置处理器的值会覆盖配置元件的值;


执行结果:

(2)【用户参数】会在每次取样器执行之前都运行一次,而【用户自定义的变量】只会运行一次,这里使用在两个元件中都使用time函数举例

执行结果:

可以观察到,用户参数time1的变量值每次执行请求前都会变化一次,而用户定义的变量time2的变量值都不会变。

二:Beanshell前置处理器
该元件功能十分强大,可以编写Java代码进行一些数据准备等操作。
1、先介绍下Jmeter里Beanshell的内置变量操作
(1)vars变量:用来操作Jmeter的变量值得,常用的方法有:
(1.1)vars.get("key"):从Jmeter变量中获取指定键的值
(1.2)vars.put("key","value"):向Jmeter变量设置变量键值对
例子:


附上代码:
String name=vars.get("name"); //此处获取Jmeter的变量值转换成Java的变量
log.info("获取到的变量值为:="+name);//打印一下获取的变量值

vars.put("phone","13211111111"); //向Jmeter变量中设置一个phone变量
log.info("设置phone的变量值为:="+vars.get("phone")); //打印一下设置的phone值
通过此变量可以对Jmeter变量进行设置或者获取操作。点击下右上角的三角形即可查看日志。
日志信息为:

(2)ctx变量:用来获取当前线程的上下文信息,常用方法:
(2.1)ctx.getVariables().get("key"):等价于vars.get("key"),从Jmeter变量中获取指定键的值
(2.2)ctx.getProperties().getProperty("key"):获取Jmeter的属性,这里可以获取Jmeter.properties配置文件下的属性。
(2.3)ctx.getThreadNum():获取当前线程组编号
例子:

附上代码:
log.info("=通过ctx形式获取一下Jmeter存储的变量:="+ctx.getVariables().get("name"));
log.info("=通过ctx形式获取一下Jmeter属性:="+ctx.getProperties().getProperty("sampleresult.default.encoding")); //此处验证下获取我们先前配置的编码属性
log.info("=====通过ctx形式获取一下当前线程编号:="+ctx.getThreadNum());

日志展示:

(3)log变量:用来记录日志,会写进jmeter.log文件中,常用方法:
(3.1)log.info():打印普通日志
(3.2)log.warn():打印警告日志
(3.3)log.error():打印错误日志
例子:

(4)props变量:用来操作jmeter的属性的,常用方法有:
(4.1)props.get("propName"):获取Jmeter的指定属性信息
(4.2)props.put("propName","propValue"):给Jmeter设置属性
(4.3)props.containsKey("key"):判断Jmeter是否存在指定key的属性
(4.4)props.contains("values"):判断Jmeter是否存在指定value的属性
例子:


附上代码:
log.info("通过props变量获取下Jmeter的编码属性:"+props.get("sampleresult.default.encoding"));
log.info("通过props变量判断下Jmeter的编码属性是否存在:"+props.containsKey("sampleresult.default.encoding"));

2、再来介绍下Beanshell的自带数组传参的使用
先看图:


Beanshell是支持将变量值传入到这里的数组的,多个值用“空格”隔开,下面举个例子:

3、还有更高级的功能,比如:通过导入外部Jar包,调用外部Jar包的方法,完成自定义的功能,后续介绍到高级部分再进行补充

4、下面进行实际使用
(1)、在取样器执行前,准备一些必要的参数,如时间参数

通过这个前置处理器提供了这个time变量参数,就可以在取样器中使用该变量了

执行结果:

三:JDBC预处理器
用于在执行JDBC请求前,进行一些数据准备等操作,比如脚本在执行前,需要在数据库新建一些记录等数据。
例子:通过JDBC预处理器向数据库中插入一些数据。

(1)执行JDBC预处理器前的表数据:

(2)编写JDBC预处理器

(3)执行后,查看数据库,数据新增成功了

(4)对上述例子可以改进下,有时候我们造数据的时候,可能是需要随机生成一些测试数据的,那么我们就可以通过随机变量传进去。

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值