JMETER(七) - Post Processors(后置处理器)

后置处理器
Sampler 用来模拟用户请求,有时候服务器的响应数据在下一个请求中需要用到,所以必须要对这些响应数据进行处理,后置处理器即是用来完成这项工作的。比如系统登录成功后我们要获取SessionID,在后面的业务操作中服务器会验证这个SessionID,获取SessionID这个过程可以用后置处理器中的正则表达式提取器来完成。

1、Regular Expression Extractor(正则表达式提取器)

例如,如果我们需要模拟网站上的用户活动,那么为此,我们需要获取与正在测试的站点相关的链接。只需排除通向其他资源的所有链接。最简单的方法是使用正则表达式从页面中提取所有链接。


参数说明

apply to(应用范围)

  • Main sample and sub-samples: 匹配范围包括当前父取样器并覆盖至子取样器
  • Main sample only: 匹配范围是当前父取样器
  • Sub-samples only: 仅匹配子取样器
  • JMeter Variable Name to use: 支持对Jmeter变量值进行匹配

Field to check:要检查的字段,针对响应数据的不同部分进行匹配,共七个选项

  • Body: 响应数据的主体部分
  • Body (unescaped) : 针对替换了转义码的Body部分,响应正文,替换了所有 Html 转义代码。请注意,处理 Html 转义时不考虑上下文,因此可能会进行一些不正确的替换(请注意,此选项对性能影响很大,因此仅在绝对必要时才使用它并注意其影响)
  • Body as a Document: 返回内容作为一个文档匹配(请注意, Body as a Document 选项会影响性能,因此请确保它适合您的测试)
  • Request Headers: 请求头部信息
  • Response Headers: 响应头部信息
  • URL: 只匹配URL链接
  • Response Code: 匹配响应代码,比如返回200代表成功
  • Response Message: 匹配响应信息,比如返回成功字样。

  • Name of created variable: 创建变量的名称,匹配出来的信息通过次名称进行访问
  • Regular Expression: 正则表达式,用于解析响应数据的正则表达式
  • Template: 正则表达式可以设置多个模板,语法是:' $1$ ' 表示第一个模板,' $2$ ' 表示第二个模板,等等。$0$表示全文匹配
  • Match No. (0 for Random): 匹配数字,在匹配时往往会出现多个值匹配的情况,如果匹配数为0则代表随机匹配值。正数表示匹配哪一个;负数取所有值,可以与For EachController一起使用来遍历
  • Default Value: 如果正则表达式不匹配,则引用变量将设置为默认值。这对于调试测试特别有用
  • Use empty default value: 使用空默认值

示例:https://www.cnblogs.com/liho/p/14201784.html

2、JSON Extractor

JSON Extractor提取接口返回的JSON数据

添加 JSON 提取器:Right click on HTTP Request->Add->Post Processors->JSON extractor

参数说明

  • Main sample only: 仅主样本
  • Sub-samples only: 仅子样本
  • Main sample and sub-samples : 主样本和子样本
  • JMeter Variable: 支持对Jmeter变量值进行匹配

  • Names of created variables: 变量名称,有多个变量时逗号分隔
  • JSON Path Expressions: 提取JSON表达式
  • Match No. (0 for Random): 匹配数字(0代表随机匹配,1代表匹配第一个,-1代表匹配所有数据)
  • Compute concatenation var(suffix _ALL): 是否统计所有数据,即将匹配到的所有值保存,名为“变量名_ALL”,使用场景需要获取的值有多个,后面需要对这一组数据进行操作**
  • Default Values: 找不到时默认值,一般设置为NOT FOUND,当json提取器要提取两个值(或两个以上)的时候,一定要填写默认值

示例

测试接口:例如一个查询的接口
接口返回的数据:JSON类型如

使用JSON提取器提取orgId、studentName、msg,JSON提取数据表达式的方式

  • $.data.msg
  • $.data[0].id
  • $.data[*].id,获取所有id

提取orgId:orgId在records数组里,JSON表达式为$.data.records[0].orgId,如果提取所有 $.data.records[*].orgId,Match No填写-1;

提取studentName同上:提取数组里面所有数据 $.data.records[*].studentName,Match No填写-1;

提取msg:msg可直接使用表达式,$.data.msg

通过添加后置处理器调试器,运行结果可以在监听器View Results Tree中查看提取的结果

如何使用提取的参数:
如果下一个接口需要使用orgId作为参数查询,可以使用${orgId}获取提取的参数,如果参数是多个如studentName,就要考虑到实际应用,可通过循环控制器获取每一个参数

3、BeanShell PostProcessor

添加:Right click on HTTP Request->Add->Post Processors->BeanShell PostProcessor


参数说明


Reset bsh.Interpreter before each call: 如果选择此选项,则将为每个样本重新创建解释器。这对于一些长时间运行的脚本可能是必要的
Parameters: 传递给 BeanShell 脚本的参数
Script file: 包含要运行的 BeanShell 脚本的文件。文件名存储在脚本变量FileName中
Script: BeanShell 脚本


BeanShell常用变量


log - ( https://www.slf4j.org/api/org/slf4j/Logger.html) - 可用于写入日志文件
ctx - ( https://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterContext.html ) - 提供对上下文的访问
vars - ( https://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterVariables.html) - 提供对变量的读/写访问权限
prev - ( https://jmeter.apache.org/api/org/apache/jmeter/samplers/SampleResult.html) - 可以访问上一个 SampleResult


示例


1、测试接口: 例如一个查询的接口
2、接口返回的数据:JSON类型

3、编写测试脚本,获取接口返回的数据


import org.json.*;  //需要解析JSON数据,必须导入JSON的包
String  response = prev.getResponseDataAsString(); // 以字符串形式获取 SampleResult 对象的 responseData
JSONObject json = new JSONObject(response );// 将获取的字符串转换为JSON形式,方便后续取值
log.info("转换后的响应结果json:"+ json );
String studentName = json.getJSONObject("data").getString("studentName") //获取studentName
log.info("学生姓名:"+ studentName); //打印日志,在控制台可以查看
vars.put("studentName",studentName); //将变量放在vars中,以供下一个接口调用,必须添加到vars 才能被调用


4、提取的变量如何使用:在下一个接口中,使用${studentName}可直接获取参数


5、相关参考文档

java开发文档:https://tool.oschina.net/apidocs/apidoc?api=jdk-zh
JSONObject开发文档:https://tool.oschina.net/apidocs/apidoc?api=json-lib2.4

posted @ 2021-12-26 13:24  萧兮易  阅读(495)  评论(0编辑  收藏  举报