Skip to the content.

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 验证实际值是否与正则表达式相匹配

二次开发

验证器

当内置的提取器无法满足使用要求时,可以自行开发提取器组件

示例:

  1. 当期望值需要通过比较负责的业务处理才能获取时,可通过自定义验证器实现需求
// 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进行注册

  1. 在工程的 resources 目录中创建目录 META-INF
  2. 在 META-INF 目录中创建目录 services
  3. 在 services 目录中创建文件
  4. 创建 core.xyz.migoo.testelement.TestElement
  5. 在 core.xyz.migoo.testelement.TestElement 文件中填写 自定义验证器的完整类名(含包路径)

参考示例

  1. 当测试结果需要复杂的业务规则才能进行验证时,可通过自定义规则实现需求
// 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进行注册

  1. 在工程的 resources 目录中创建目录 META-INF
  2. 在 META-INF 目录中创建目录 services
  3. 在 services 目录中创建文件
  4. 创建 core.xyz.migoo.assertion.Rule
  5. 在 core.xyz.migoo.assertion.Rule 文件中填写 自定义验证规则的完整类名(含包路径)

参考示例