JMeter 中有个元件叫做断言(Assertion),它的作用和 LoadRunner 中的检查点类似。用于检查测试中得到的响应数据是否符合预期,用以保证性能测试过程中的数据交互与预期一致。
JMeter 常用几种断言
- Response Assertion(响应断言)
- Size Assertion(数据包字节大小断言)
- Duration Assertion(持续时间断言)
- Beanshell 断言(自由断言)
- JSON 断言
Response Assertion(响应断言)
添加响应断言
对 Web 请求的响应结果进行验证。

输入需要匹配的字符串
此处对于访问 Baidu 首页,需要设置匹配的字符串为"百度一下,你就知道",表示返回的文本内容若包含有"百度一下,你就知道",则就算 Pass。

Response Assertion 配置参数
| 模块类型 | 选项名称 | 配置说明 |
|---|---|---|
| Name | Response Assertion 名称 | |
| Comments | 注释 | |
| Apply to | 断言应用的范围 | |
| Main sample and sub-samples | 作用于父节点取样器及其子节点取样器 | |
| Main sample only | 仅作用于父节点取样器 | |
| Sub-samples only | 仅作用于子节点取样器 | |
| Jmeter Variable Name to use | 作用于 JMeter 变量(输入框中可输入 JMeter 的变量名称) | |
| Field to Test | 测试的字段 | |
| Text Response | 匹配从服务器返回的响应文本(不包括 Response Headers) | |
| Response Code | 匹配响应状态码 | |
| Response Message | 匹配响应信息。如:OK | |
| Response Headers | 匹配响应头 | |
| Request Headers | 匹配请求头 | |
| URL Sampled | 匹配 URL 链接 | |
| Document(text) | 匹配文档内容 | |
| Ignore Status | 一个请求多项响应断言时,忽略某一项断言的响应结果,而继续下一项断言 | |
| Request Data | 匹配请求数据 | |
| Pattern Mactching Rules | 匹配的规则 | |
| Contains | 返回的结果包括所指定的内容,支持正则匹配 | |
| Matches | 根据指定内容进行匹配 | |
| Equals | 返回结果与所指定的内容一致 | |
| Substring | 返回结果包括所指定结果的字符串,不支持正则匹配 | |
| Not | 不进行匹配就算是 Pass | |
| Or | 几个条件处于或者关系 | |
| Patterns to Test | ||
| Patterns to Test | 需要匹配的正则表达式、字符串。可以添加多项,每一项会分开进行验证,若某一项验证失败,则其后的不会再进行验证。 |
添加:断言结果(Assertion Results)、查看结果树(View Results Tree)

运行 Test Plan 中的线程组,进行断言检查
以下可观察到响应数据中是包含所指定的验证字符串,Pass。

Size Assertion(数据包字节大小断言)
判断响应结果是否包含正确数量的 byte。可定义(=, !=, >, <, >=, <=)。

Duration Assertion(持续时间断言)
判断是否在给定的时间内返回响应结果。

Beanshell 断言
Bean Shell 常用内置变量
JMeter 在它的 BeanShell 中内置了变量,用户可以通过这些变量与 JMeter 进行交互,其中主要的变量及其使用方法如下:
log:写入信息到 jmeter.log 文件,使用方法:log.info("This is log info!");
ctx:该变量引用了当前线程的上下文,使用方法可参考:org.apache.jmeter.threads.JMeterContext。
vars - (JMeterVariables):操作 JMeter 变量,这个变量实际引用了 JMeter 线程中的局部变量容器(本质上是 Map),它是测试用例与 BeanShell 交互的桥梁,常用方法:
vars.get(String key):从 JMeter 中获得变量值vars.put(String key,String value):数据存到 JMeter 变量中- 更多方法可参考:
org.apache.jmeter.threads.JMeterVariables
props - (JMeterProperties - class java.util.Properties):操作 JMeter 属性,该变量引用了 JMeter 的配置信息,可以获取 JMeter 的属性,它的使用方法与 vars 类似,但是只能 put 进去 String 类型的值,而不能是一个对象。对应于 java.util.Properties。
props.get("START.HMS");注:START.HMS为属性名,在文件jmeter.properties中定义props.put("PROP1","1234");
prev - (SampleResult):获取前面的 sample 返回的信息,常用方法:
- getResponseDataAsString():获取响应信息
- getResponseCode():获取响应 code
- 更多方法可参考:
org.apache.jmeter.samplers.SampleResult
sampler - (Sampler):gives access to the current sampler
在这里除了可以使用 Beanshell 的内置变量外,主要通过 Failure 和 FailureMessage 来设置断言结果。

其中脚本内容如下:
1 | if ("200".equals(""+ResponseCode) == false ) |
JSON 断言
JSON 断言也是测试工作中经常用到的一种断言方法,它一般用于断言某个字段值是否等于我们指定的值。所以 JSON 断言只能针对响应结果为 application/json 格式的进行断言操作。如果是其他类型(如:Text、HTML),则无法使用这种方式。
案例
发送请求:http://47.115.15.198:7001/smarthome/user/login -- 登录接口
断言检查:检查响应的数据中,user_name 节点对应的内容是否为 "lemonn"
操作步骤
第 1 步:添加线程组
第 2 步:添加 HTTP 请求

第 3 步:在 HTTP 请求下添加响应断言

第 4 步:添加断言结果和添加查看结果树
第 5 步:运行接口后,查看断言结果和查看结果树

JSON 与 JSON Path 的简单说明
JSON
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。
JSON 数据容易理解,便于阅读和编写,同时计算机也易于解析和生成,所以 JSON 有广泛的应用。
JSON 常用数据结构:
对象(object)格式:
1 | { |
数组(Array)格式:
1 | { |
JSONPath
我们经常使用 XPath 来分析、转换以及有选择地从 XML 文档中提取数据。
与 XPath 类似,JSONPath 可以方便的从 JSON 结构中发现和提取数据。
JSONPath 中的"根成员对象"总是被称为 $,无论它是对象还是数组。
JSONPath 表达式有 dot–notation(. 号)和 bracket–notation([] 号)两种不同的表示风格。
例如:
$.store.book[0].title$['store']['book'][0]['title']
JSONPath 语法
JSONPath 语法如下表:

JSON 数据如下:
1 | { "store": { |
具体示例如下表:
