Jmeter学习深入
一、jmeter接口关联
提取器:
。 CS5:给网页使用
。JSON:给JSON数据使用
。 边界:给字符串使用
。正则:更加高级的字符使用
。XPath:给网页使用
必须掌握:
JSON+边界
JSON + 正则
1.边界提取器
给定两边取中间
2.正则提取器
正则:强大并且复杂
通过指定正则表达式,把数据提取出来N个,保存到变量中
使用变量时,通过 变量名+ gN 选择第几个变量
3.json提取器
JSON Extractor 是 JMeter 中的一个后处理器,用于从 HTTP 响应中的 JSON 内容提取值。它基于 JSONPath 表达式来查询 JSON 数据。JSONPath 是到 JSON 文档中的特定部分的路径表达式(类似于 XPath 用于 XML),用于简化和加速数据访问。
常用 JSONPath 语法
- $:根元素
- . 或 [] :子元素操作符,可以用来访问子字段或者属性。例如,
$.store.book
或$['store']['book']
- ...:递归下降。无论位置如何,都会查找某个名称的字段。
- [*]:通配符,匹配所有元素项。
- [0,1]:数组索引,可以直接访问数组中的元素。
- [:2]:数组切片操作,提取到第二个元素为止但不包括它(索引基于0)。
- [?(@.age>18)]:过滤表达式。可用于查找数组中满足条件的元素。
- @:当前节点的符号。
如何使用 JSON Extractor
-
添加 JSON Extractor :
在您的测试计划中,首先进行一个 HTTP 请求,然后作为该请求的子元素添加 JSON Extractor。在 JMeter 中,右击请求 -> 添加 -> 后处理器 -> JSON 提取器。
-
配置 JSON Extractor:
- 变量名称:提取出的数据将存储在这个变量名中,供后续使用。
- JSONPath 表达式:用于定位和提取 JSON 数据的表达式。
- 默认值:如果 JSONPath 没有找到数据,将使用这个值。
-
使用提取的数据 :
提取的数据将存储在变量中,可以在后续的请求或断言中使用这些变量。
示例
假设您有以下 JSON 响应:
json
{
"store": {
"book": [
{ "category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{ "category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
}
}
如果您想提取第二本书的作者名,JSONPath 表达式将是 $.store.book[1].author
。在 JSON Extractor 中,您将此表达式输入到 JSONPath 表达式字段,并为输出定义一个变量名称,例如 secondAuthor
。
这种方式使 JMeter 能够在性能测试中非常灵活地处理和校验 JSON 格式的响应数据,从而更好地模拟复杂的用户交互和数据驱动的场景。
二、Jmeter接口断言
1.默认断言
默认情况下,预期状态码小于400
状态码:
。1xx:继续请求
。2xx:请求成功
。3xx:重新请求
。4xx:客户端错误(你错了)
。5xx:眼务端错误(我错了)
2.普通断言
对提取结果进行断言
3.自定义断言
在 JMeter 中,除了使用内置的断言组件外,还可以通过自定义断言来实现更复杂和特定的验证逻辑。
使用 JSR223 断言
JSR223 断言提供了一个灵活的环境,您可以在其中使用支持的脚本语言(如 Groovy, JavaScript, Python 等)来编写自定义逻辑。Groovy 是最常推荐的,因为它与 Java 高度集成,并且性能优异。
步骤:
-
添加 JSR223 断言 :
在您的测试计划中,选择需要添加断言的采样器(如 HTTP 请求)。右击采样器 -> 添加 -> 断言 -> JSR223 断言。
-
编写断言脚本 :
在断言组件的脚本部分,您可以编写自定义的脚本来验证响应是否符合预期。可以访问 JMeter API 和 Java 类库,以及通过前面处理器或采样器定义的变量。
示例脚本:
假设从前面的 JSON 提取器中获取了一个变量 secondAuthor
,现在需要验证这个作者是否是 "Evelyn Waugh"。
groovy
// Groovy 断言脚本
String expectedAuthor = "Evelyn Waugh"
String actualAuthor = vars.get("secondAuthor")
if (actualAuthor == null || !actualAuthor.equals(expectedAuthor)) {
AssertionResult.setFailure(true)
AssertionResult.setFailureMessage("Author does not match expected. Expected: " + expectedAuthor + ", but was: " + actualAuthor)
}
脚本解释:
- vars:这是一个 JMeter 内置对象,用于访问所有定义的变量。
- AssertionResult:用于设置断言结果。如果条件不满足,需要手动设置失败状态和失败消息。
注意事项:
- 性能影响:自定义脚本可能会比内置的断言组件执行更慢,因为脚本需要在运行时编译和执行。在高负载测试中,这可能会影响整体性能测试的结果。
- 脚本错误处理:确保脚本中有适当的错误处理逻辑,避免因脚本错误而导致测试计划意外中断。
- 调试:调试自定义脚本可能比使用内置组件更复杂。建议在开发过程中添加适当的日志记录,帮助跟踪问题。