写点什么

技术分享 | 接口自动化测试之 JSON Schema 模式该如何使用?

  • 2022-10-12
    北京
  • 本文字数:1579 字

    阅读完需:约 5 分钟

JSON Schema 模式是一个词汇表,可用于注释和验证 JSON 文档。在实际工作中,对接口返回值进行断言校验,除了常用字段的断言检测以外,还要对其他字段的类型进行检测。对返回的字段一个个写断言显然是非常耗时的,这个时候就需要一个模板,可以定义好数据类型和匹配条件,除了关键参数外,其余可直接通过此模板来断言,JSON Schema 可以完美实现这样的需求。


JSON Schema 官网:


http://json-schema.org/implementations.html


环境准备


安装 JSON Schema 包 Python 版本 pip install jsonschema


Java 版本<dependency><groupId>io.rest-assured</groupId><artifactId>json-schema-validator</artifactId><version>3.0.1</version></dependency>


JSON Schema 的使用


JSON Schema 模板生成首先要借助于 JSON Schema tool 的网站 https://www.jsonschema.net/,将返回 json 字符串复制到页面左边,然后点击 INFER SHCEMA,就会自动转换为 schema json 文件类型,会将每个地段的返回值类型都设置一个默认类型,在 pattern 中也可以写正则进行匹配。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xES351yK-1665538762145)(upload://rWFXH62wcBJrNH0xcCf6O7w1UJA.png)]


点击“设置”按钮会出现各个类型返回值更详细的断言设置,这个就是 schema 最常用也是最实用的功能。也可以对每种类型的字段最更细化的区间值校验或者断言,例如长度、取值范围等。


点击复制按钮,可以将生成的 schema 模板保存下来。


实战练习


接下来会发起一个 post 请求,验证响应值中的 url 字段与 origin 字段是否都为 string 类型。


Python 版本 import requestsfrom jsonschema import validatedef test_schema():schema = {"type": "object","properties": {"url": {"type": "string"},"origin": {"type":"string"}}}r = requests.post("https://httpbin.ceshiren.com/post")validate(instance=r.json(), schema=schema)


如果将 origin 的 type 写成 number ,则会出现报错:


import requestsfrom jsonschema import validatedef test_schema():schema = {"type": "object","properties": {"url": {"type": "string"},"origin": {"type":"number"}}}r = requests.post("https://httpbin.ceshiren.com/post")validate(instance=r.json(), schema=schema)


返回报错信息


raise errorE jsonschema.exceptions.ValidationError: 'xxx.xxx.xxx.xxx' is not of type 'number'E Failed validating 'type' in schema['properties']['origin']:E {'type': 'number'}


同理,若将 url 的 type 改为 number,也会有报错提示。


raise errorE jsonschema.exceptions.ValidationError: 'https://httpbin.ceshiren.com/post' is not of type 'number'

E Failed validating 'type' in schema['properties']['url']:E {'type': 'number'}


Java 版本 JsonValidator.json 文件中存放校验文件,校验响应值中的 url 字段与 origin 字段是否都为 string 类型,文件内容为:


"type": "object","properties": {"url": {"type": "string"},"origin": {"type":"string"}}}


同 Python 版本一致,以下代码校验响应值是否符合 JsonValidator.json 文件中规定的格式要求。


import static io.restassured.module.jsv.JsonSchemaValidator.matchesJsonSchemaInClasspath;import static io.restassured.RestAssured.*;


public class Requests {public static void main(String[] args) {//定义请求头信息的 contentType 为 application/jsongiven().when().post("https://httpbin.ceshiren.com/post").then().assertThat().body(matchesJsonSchemaInClasspath("JsonValidator.json"));


}
复制代码


}


点击下方链接免费领取:性能测试+接口测试+自动化测试+测试开发+测试用例+简历模板+测试文档

http://qrcode.testing-studio.com/f?from=infoQ&url=https://ceshiren.com/t/topic/22265

用户头像

社区:ceshiren.com 微信:ceshiren2021 2019-10-23 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料,实时更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬。

评论

发布
暂无评论
技术分享 | 接口自动化测试之JSON Schema模式该如何使用?_霍格沃兹测试开发学社_InfoQ写作社区