后置处理器
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
有许多工具和方法可以测试和自动化 API 测试。但是,虽然不同的工具适合不同的需求,但Apache JMeter™对于负载测试的用户来说具有很大的优势。使用JMeter,您可以通过向线程组添加更多用户和循环来轻松地将功能 API 测试转换为性能测试。
添加一个 HTTP Request 并填写请求的数据,返回json数据
现在我们需要解析 JSON 响应,所以我们可以验证我们得到的值。为此,让我们添加 JSON 提取器
Right click on HTTP Request->Add->Post Processors->JSON extractor
参数说明:
Apply to
-
Main sample only: 仅主样本
-
Sub-samples only: 仅子样本
-
Main sample and sub-samples : 主样本和子样本
-
JMeter Variable: 支持对Jmeter变量值进行匹配
-
Names of created variables:变量名称,有多个变量时逗号分隔
-
JSON Path Expressions:用法
- $.data.msg,
- $.data[0].id
- $.data[*].id,获取所有id
-
Match No. (0 for Random): 匹配数字(0代表随机,1代表第一个,-1代表所有)**
-
Compute concatenation var(suffix _ALL): 是否统计所有数据,即将匹配到的所有值保存,名为“变量名_ALL”,使用场景需要获取的值有多个,后面需要对这一组数据进行操作**
-
Default Values:找不到时默认值,一般设置为NOT FOUND,当json提取器要提取两个值(或两个以上)的时候,一定要填写默认值
添加侦听器获取值json值