JMeter-后置处理器

后置处理器

在Sampler运行后执行。
JMeter-后置处理器

建议都添加后置处理器作为一个sampler的子组件(确保是作用于你需要的那个sampler,不然,他会作用与他同级的所有sampler),比如.
JMeter-后置处理器

1. BeanShell PostProcessor

语法与BeanShell Sampler一样,但注意可用的变量有不同的
JMeter-后置处理器
结果:
JMeter-后置处理器

  1. vars:操作Jmeter变量
        a) vars.get(“name”):从jmeter中获得变量值
        b) vars.put(“key”,”value”):保存数据到jmeter变量中,如果变量不存在会自动创建
  2. props: 操作Jmeter属性
        a) props.get(“START.HMS”);  注:START.HMS为属性名
        b) props.put(“PROP1”,”1234”); 保存数据到Jmeter属性中,如果属性不存在会自动创建
  3. log: 记录日志
    比如log.info(“日志信息”); 具体查看: https://www.slf4j.org/api/org/slf4j/Logger.html
  4. ctx: 操作上下文,具体查看:
    http://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterContext.html
  5. prev: 操作前一个请求。具体查看:
    http://jmeter.apache.org/api/org/apache/jmeter/samplers/SampleResult.html
  6. data: (byte [])- 用户访问当前请求的数据 (byte数组,不知道什么场景下有用呢。。)

2. JDBC PostProcessor

在请求运行之后进行数据库操作。
使用方法与JDBC Request 是一样的。
应用场景,比如在创建用户,需要知道保存在数据库中的用户信息,可以使用JDBC PreProcessor进行查询
JMeter-后置处理器

3. JSON Extractor

json 提取器,使用JSON-PATH语法,具体察看:
http://goessner.net/articles/JsonPath/
注意只有响应数据为json时适用
JMeter-后置处理器

属性 描述 备注
Variable Names 变量名
JSON Path Expressions Json提取表达式
Match No. (0 for Random) 当提取有多个结果值时,选择需要的值保存到变量中,默认值为0
0:随机一个
-1:全部值,使用_N 方式保存(N从1开始),比如status_1,status_2…
X: 自然数,比如1,返回第X个值(如果X大于返回值的数量,结果会不能获取,最终返回设置的默认值)
Compute concatenation var 如果有匹配到多个值,选择此项,会将全部值保存到_ALL,并使用逗号分割每个值 注意Match No. (0 for Random)需要为-1才有效,不然只能匹配到一个值了

比如一个获取用户信息请求,请求失败返回为json,需要提取status值
JMeter-后置处理器
JSON Extractor:
JMeter-后置处理器
结果:
JMeter-后置处理器

4. 正则表达式提取器

使用正则表达式提取请求中的内容。
JMeter-后置处理器

属性 描述 备注
Apply to Sampler可能会产生子Sampler,这里需要选择从哪个Sampler中进行提取
要检查的响应字段 指要从请求的哪部分内容中进行提取
主体:请求的响应数据
Body (unescaped):请求的响应数据,html代码不会被转义
Body as a Document:
信息头:指响应头
Request Headers:请求头
URL: 请求地址
响应代码:e.g 200
响应信息:e.g OK 感觉这些中文翻译有点绕。。可以从下面的注解截图中了解下
引用名称 用来保存提取结果的。同时还会生成一组变量,[引用名称]_g#:
[引用名称]_g:表达式提取的次数(指表达式中”()”的数量)
[引用名称]_g0:表达式匹配到的完整字符串
[引用名称]_g1:表达式中第1个“()”提取到的值
[引用名称]_g2:表达式中第2个“()”提取到的值
。。。
如果表达式匹配到多个字符串,最终引用名称生成的变量会变成
[引用名称]_N_g#, N表示匹配的字符串顺序
正则表达式 正则表达式,最少要包括一个“()”, 括号里面的表示要提取的内容 比如:aaa(.+?)ccc, 可以提取到aaabbbcc中的 “bbb”.
(.+?)是一个很常用的表达式,
.表示任意一个字符
+表示重复一次或多次
?表示匹配0次或一次
更多的的介绍可以看下:正则表达式
模板 说明要获取哪个提取式的内容,比如
$1$’: 获取第1组的内容(指第一个“()”中提取到的值)
$2$’: 获取第2组的内容
。。。
$0$ :表示获取整个表达式匹配的内容(就是[引用名称]_g0 的值)
匹数数字 表达式可能会匹配多个字符串,匹数数字说明要获取第几个匹配值
0:表示随机一个
N:表示第N个
-1:表示全部(负数都是一样的)
如果填写了负数,最终引用名称必然会加上序号,比如[引用名称]_1, 使用的时候要注意
缺省值 表达式匹配不到字符串时,保存到引用名称中的值 默认值,可以为空的


注:
要检查的响应字段:
JMeter-后置处理器
JMeter-后置处理器
JMeter-后置处理器

最终提取结果:
使用HTTP请求访问百度,正则表达式提取器 如本节开头截图
JMeter-后置处理器