Skip to content

JSON 验证器

JSON 验证器用于验证 JSON 格式响应体中的特定字段值,通过 JSONPath 表达式定位字段。

配置项

yaml
testclass: json # json 验证器,用于验证json内容
field: '$.status'  # json path
expected: 200  # 期望值
rule: ==   # 验证规则
strict: false # 是否严格验证,默认否:忽略大小写验证

参数说明

参数必填说明
testclass验证器类型,固定值为 json
fieldJSONPath 表达式,用于定位要验证的字段
expected期望值
rule验证规则,支持多种比较操作
strict是否严格验证,默认为 false(忽略大小写)

使用示例

验证基本字段

yaml
testclass: http
title: 用户登录
config:
  method: POST
  protocol: http
  host: api.example.com
  path: /login
  body:
    username: testuser
    password: testpass
validators:
  - testclass: json
    field: $.status
    expected: 200
    rule: '=='
  - testclass: json
    field: $.data.user.name
    expected: testuser
    rule: '=='
  - testclass: json
    field: $.data.token
    expected: ''
    rule: isNotEmpty

验证数组元素

yaml
testclass: http
title: 获取用户列表
config:
  method: GET
  protocol: http
  host: api.example.com
  path: /users
validators:
  - testclass: json
    field: $.data.length()
    expected: 10
    rule: '>='
  - testclass: json
    field: $.data[0].id
    expected: 0
    rule: '>'
  - testclass: json
    field: $.data[0].name
    expected: ''
    rule: isNotEmpty

复杂验证场景

yaml
testclass: http
title: 创建订单
config:
  method: POST
  protocol: http
  host: api.example.com
  url: /orders
  body:
    product_id: 123
    quantity: 2
validators:
  - testclass: json
    field: $.status
    expected: 201
    rule: '=='
  - testclass: json
    field: $.data.order_id
    expected: ''
    rule: isNotEmpty
  - testclass: json
    field: $.data.total_amount
    expected: 100.0
    rule: '>='
  - testclass: json
    field: $.data.items.length()
    expected: 1
    rule: '>='

支持的验证规则

JSON 验证器支持以下验证规则:

规则说明示例
==相等field: $.status, expected: 200, rule: "=="
eq_any任意一个相等field: $.status, expected: [200, 300], rule: "eq_any"
!=不相等field: $.status, expected: 404, rule: "!="
>大于field: $.status, expected: 0, rule: ">"
<小于field: $.status, expected: 10000, rule: "<"
>=大于等于field: $.status, expected: 0, rule: ">="
<=小于等于field: $.status, expected: 100, rule: "<="
contains包含field: $.data, expected: "success", rule: "contains"
any_contains包含任意一个field: $.data, expected: [success, false], rule: "any_contains"
not_contains不包含field: $.data, expected: "error", rule: "not_contains"
regex正则匹配field: $.data, expected: "^\\d{4}-\\d{2}-\\d{2}$", rule: "regex"
is_not_empty非空field: header.Content-Type, rule: "is_not_empty"
is_empty为空field: header.Content-Type, rule: "is_empty"
same_object对象匹配field: $.data, expected: {}, rule: "same_object"

JSONPath 语法说明

常用 JSONPath 表达式:

表达式说明示例
$根节点$.status
.子节点$.data.user
..递归下降$..name
*通配符$.data.*
[]数组索引$.data[0]
[start:end]数组切片$.data[1:3]
[?(expression)]过滤表达式$.data[?(@.price > 100)]
()脚本表达式$.data[(@.length-1)]
@当前节点$.data[?(@.name == 'test')]

Released under the MIT License.