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

一、用户参数
【用户参数】与前面介绍过的【用户定义的变量】有相似之处,先来介绍下用户参数的使用方法再去区分两者的异同。
1、注意作用域的问题,(1)如果是放在测试计划下,则整个测试计划都可以引用该处定义的变量
(2)如果是放在线程组下,则只能在所放的线程组下引用
(3)如果是在请求下,则只能在具体请求下引用

2、用户参数有名称,用户_N的定义,下面进行实例讲解。

实例1:只定义一个用户,则在引用变量的时候,永远都是这个用户的值。如图:

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_自定义

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_预处理_02

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_数据_03

执行结果:

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_预处理_04

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

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_预处理_05

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_数据_06

执行结果:

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_自定义_07

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_自定义_08

3、【用户参数】与【用户自定义的变量】的区别:

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

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_自定义_09

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_数据_10

此处引发了一个思考,如果【用户参数】与【用户定义的变量】的变量名称重复的时候,会引用哪个值呢?答案是会引用到【用户参数】的值,此处是就近原则,离取样器执行前最近的一次赋值为准。如此案例中,【用户参数】与【用户定义的变量】都含有name变量,则在执行的时候,会引用了【用户参数】的值。

执行结果:

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_预处理_11

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

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_自定义_12

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_自定义_13

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_自定义_14

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_数据_15

执行结果:

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_数据_16

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_自定义_17

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_预处理_18

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

二:Beanshell前置处理器

该元件功能十分强大,可以编写Java代码进行一些数据准备等操作。

1、先介绍下Jmeter里Beanshell的内置变量操作

(1)vars变量:用来操作Jmeter的变量值得,常用的方法有:

(1.1)vars.get("key"):从Jmeter变量中获取指定键的值

(1.2)vars.put("key","value"):向Jmeter变量设置变量键值对

例子:

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_自定义_19


附上代码:

String name=vars.get("name"); //此处获取Jmeter的变量值转换成Java的变量

log.info("获取到的变量值为:="+name);//打印一下获取的变量值vars.put("phone","13211111111"); //向Jmeter变量中设置一个phone变量

log.info("设置phone的变量值为:="+vars.get("phone")); //打印一下设置的phone值

通过此变量可以对Jmeter变量进行设置或者获取操作。点击下右上角的三角形即可查看日志。

日志信息为:

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_预处理_20

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_自定义_21

(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():获取当前线程组编号

例子:

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_预处理_22

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

日志展示:

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_数据_23

(3)log变量:用来记录日志,会写进jmeter.log文件中,常用方法:

(3.1)log.info():打印普通日志

(3.2)log.warn():打印警告日志

(3.3)log.error():打印错误日志

例子:

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_自定义_24

(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的属性

例子:

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_数据_25


附上代码:

log.info("通过props变量获取下Jmeter的编码属性:"+props.get("sampleresult.default.encoding"));

log.info("通过props变量判断下Jmeter的编码属性是否存在:"+props.containsKey("sampleresult.default.encoding"));2、再来介绍下Beanshell的自带数组传参的使用

先看图:

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_自定义_26


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

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_数据_27

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

4、下面进行实际使用

(1)、在取样器执行前,准备一些必要的参数,如时间参数

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_自定义_28

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

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_预处理_29

执行结果:

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_自定义_30

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

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

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_数据_31

(2)编写JDBC预处理器

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_自定义_32

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

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_自定义_33

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

jmeter添加前置处理器 javascripts 获取 post 的参数 jmeter前置处理器有哪些_自定义_34