JMeter-后置处理器

后置处理器 

在Sampler运行后执行。  
 

这里写图片描述

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

这里写图片描述

1. BeanShell PostProcessor 

语法与BeanShell Sampler一样,但注意可用的变量有不同的  
 

这里写图片描述

 
结果:  
 

这里写图片描述
  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进行查询  
 

这里写图片描述

3. JSON Extractor 

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

这里写图片描述
 

属性 

描述 

备注 

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值  
 

这里写图片描述

  
JSON Extractor:  
 

这里写图片描述

 
结果:  
 

这里写图片描述

4. 正则表达式提取器 

使用正则表达式提取请求中的内容。  
 

这里写图片描述
 

属性 

描述 

备注 

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, 使用的时候要注意 

缺省值 

表达式匹配不到字符串时,保存到引用名称中的值 

默认值,可以为空的 

 
注:  
要检查的响应字段:  
 

这里写图片描述

  
 

这里写图片描述

  
 

这里写图片描述

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

这里写图片描述

 

posted @ 2017-11-28 13:07  春田花花同学会  阅读(161)  评论(0编辑  收藏  举报