JSON 验证器
当取样器\处理器响应数据为JSON时,可通过 JSON验证器 验证响应数据是否符合预期
testclass: json_assertion # json 验证器,用于验证json内容
field: '$.status' # json path
expected: 200 # 期望值,支持多个 200,201,202
rule: ==
或
{ testclass: json_assertion, field: '$.status', expected: 200, rule: == }
testclass:定义验证器类型,可选值:JSONAssertion 、json_assertion
field:定义 验证值的 JSON PATH
expected:期望值,可以多个值
rule:验证规则,默认 ==
HTML 验证器
HTTP取样器专属验证器,通常用于验证 http状态码、http response header
testclass: http_assertion # http 验证器,用于验证http响应(状态码、header、响应消息内容)
field: status # http响应的哪个部位 status、header[0].xxx、body
expected: 200 # 期望值,支持多个 200,201,202
rule: ==
或
{ testclass: http_assertion, field: status, expected: 2000, rule: == }
testclass:定义取样器类型,可选值:RegexAssertion 、regex_assertion
field:定义 验证值,HTTP状态码:status,响应Body:body,响应头:header[0].Content-Type
expected:期望值,可以多个值
rule:验证规则,默认 ==
Result 验证器
验证取样器响应结果是否符合预期
testclass: result_assertion # result 验证器类型
expected: 200 # 变量名称
rule: ==
或
{ testclass: result_assertion, expected: 200, rule: == }
testclass:定义取样器类型,可选值:RegexAssertion 、regex_assertion
expected:期望值,可以多个值(仅部分验证规则生效)
rule:验证规则,默认 ==
验证规则 rule
验证规则默认为 ==,验证 实际值是否与期望值一致,详细规则如下:
引用 | 描述 |
---|---|
==、===、eq、equal、equals、is | 验证实际值是否与期望值一致,数字 1.0 等同于 1 |
EqualsAny、any、eqa、equalAny、eq_any | 验证实际值是否与期望值中的任意一个值一致,数字 1.0 等同于 1 |
equalsIgnoreCase、ignoreCase | 验证实际值是否与期望值一致(忽略大小写) |
equalsAnyIgnoreCase、AnyIgnoreCase | 验证实际值是否与期望值中的任意一个值一致(忽略大小写) |
contains、contain、ct、⊆ | 验证实际值是否包含期望值 |
ContainsAny、containAny、ct_any、cta | 验证实际值是否包含期望值中的任意一个值 |
notContain、notContains、nc、doesNotContains、doesNotContain、⊈ | 验证实际值是否不包含期望值 |
!=、!==、 not 、<> | 验证实际值是否与期望值不一致 |
>、 greater、 greaterThan、 gt | 验证实际值是否大于期望值(用于比较数字) |
>=、 GreaterThanOrEquals | 验证实际值是否大于等于期望值(用于比较数字) |
isEmpty、 isNull 、empty 、blank | 验证实际值是否为空 |
isNotEmpty、 isNotNull 、isNotBlank 、notEmpty 、notNull、notBlank | 验证实际值是否非空 |
< 、less 、lessThan 、lt | 验证实际值是否小于期望值 (用于比较数字) |
<= 、LessThanOrEquals | 验证实际值是否小于等于期望值 (用于比较数字) |
regex、rx | 验证实际值是否与正则表达式相匹配 |
二次开发
验证器
当内置的提取器无法满足使用要求时,可以自行开发提取器组件
示例:
- 当期望值需要通过比较负责的业务处理才能获取时,可通过自定义验证器实现需求
// Alias 定义组件的别名,以便在 testclass 中引用,默认为类名
// 为防止类名重复,建议使用 Alias
@Alias({"CustomAssertion", "custom_assertion"})
public class CustomAssertion extends AbstractAssertion {
@Override
public SampleResult process(SampleResult result) {
var data = result.getResponseDataAsString(); // 获取 取样器 或 处理器的响应数据
var actual = null;
// todo 自定义 实际值的获取规则
setActual(actual); // 设置实际值
}
}
通过以上代码完成自定义验证器开发后,还需要通过 SPI进行注册
- 在工程的 resources 目录中创建目录 META-INF
- 在 META-INF 目录中创建目录 services
- 在 services 目录中创建文件
- 创建 core.xyz.migoo.testelement.TestElement
- 在 core.xyz.migoo.testelement.TestElement 文件中填写 自定义验证器的完整类名(含包路径)
参考示例
- 当测试结果需要复杂的业务规则才能进行验证时,可通过自定义规则实现需求
// Alias 定义组件的别名,以便在 testclass 中引用,默认为类名
// 为防止类名重复,建议使用 Alias
@Alias({"custom"})
public class Custom extends BaseRule implements Rule {
@Override
public boolean assertThat(Object actual, Object expected) {
var bool = false;
// todo 自定义验证规则,以验证 actual 是否符合 expected
return bool;
}
}
通过以上代码完成自定义验证规则开发后,还需要通过 SPI进行注册
- 在工程的 resources 目录中创建目录 META-INF
- 在 META-INF 目录中创建目录 services
- 在 services 目录中创建文件
- 创建 core.xyz.migoo.assertion.Rule
- 在 core.xyz.migoo.assertion.Rule 文件中填写 自定义验证规则的完整类名(含包路径)
参考示例