写点什么

软件测试 | JSON Schema 断言

  • 2023-02-22
    北京
  • 本文字数:1591 字

    阅读完需:约 5 分钟

1.JSON Schema 简介

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

2.环境准备

安装 JSON Schema 包

Python 版本

pip install jsonschema
复制代码


Java 版本

<dependency>     <groupId>io.rest-assured</groupId>     <artifactId>json-schema-validator</artifactId>     <version>3.0.1</version></dependency>
复制代码

3.JSON Schema 的使用

JSON Schema模板生成
复制代码


(1)我们借助与 JSON Schema 生成网站使用 JSON Schema。打开 JSON Schema 生成网站,将要返回的 json 字符串复制到网页的左边,并把页面上的“Source type” 项选择为 json。然后点击右边的“JSON Schema”项,此时会生成该 json 对应的 JSON Schema 结构,如图 7-1 所示。此结构中的每个字段的返回值类型都会被解析出来,同时还会将必须返回的字段标注在 required 列表中展示。



(2)在新的界面中点击“Copy"按钮,可以将生成的 JSON Schema 模板保存下来。

4.实战演示

向服务端发起一个 POST 请求,验证响应值中的 url 字段与 origin 字段是否都为 string 类型,演示代码如下(Python 版和 Java 版)。


(1)Python 演示代码


import requestsfrom jsonschema import validatedef test_schem():   schema = {     "type":"object",     "properties":{     "url":{       "type":"string"     },     "origin":{      "type":"string"     }     }   }r = requests.post("https://httpbin.ceshiren.com/post")validate(instance.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.json(), schema=schema)
复制代码


返回报错信息:


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


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


> rasie errorE jsonschema.exceptions.ValidationError:'https://httpin.ceshiren.com/post' isnot of type 'number'E Failed validating 'type' in schema['properties']['url']:E {'type':'number'}
复制代码


(2)Java 演示代码


选中上面操作中解析出来的 JSON Schema 格式数据,然后打开一个文本编辑器,新建一个 JsonValidator.json 文件,将刚刚复制出来的数据保存到这个文本文件中。文件内容如下:


{  "type":"object",  "properties":{   "url":{     "type":"string"   },   "origin":{   "type":"string"   }  }}
复制代码


以下代码校验响应值是否符合 JsonValidator.json 文件中规定的格式要求。


import staticio.restassured.module.jsv.JsonSchemaValidator.matchesJsonSchemaInClasspath;import static io.restassured.RestAssured.*;
public class Requests{ public static void main(String[] args){ //定义请求头信息的contentType为application/json given().when(). post("https://httpbin.ceshiren.com/post"). then().assertThat(). body(matchesJsonSchemaInClasspath("JsonValidator.json")); }}
复制代码

更多软件测试行业资讯可关注主页了解详情哦~

用户头像

社区:ceshiren.com 微信:ceshiren2023 2022-08-29 加入

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

评论

发布
暂无评论
软件测试 | JSON Schema断言_测吧(北京)科技有限公司_InfoQ写作社区