五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

接口自動(dòng)化測試之JSON Schema模式改如何使用?

2023-06-12 16:21 作者:愛測軟件測試  | 我要投稿

JSON Schema 模式是一個(gè)詞匯表,可用于注釋和驗(yàn)證 JSON 文檔。在實(shí)際工作中,對接口返回值進(jìn)行斷言校驗(yàn),除了常用字段的斷言檢測以外,還要對其他字段的類型進(jìn)行檢測。對返回的字段一個(gè)個(gè)寫斷言顯然是非常耗時(shí)的,這個(gè)時(shí)候就需要一個(gè)模板,可以定義好數(shù)據(jù)類型和匹配條件,除了關(guān)鍵參數(shù)外,其余可直接通過此模板來斷言,JSON Schema 可以完美實(shí)現(xiàn)這樣的需求。

JSON Schema 官網(wǎng):

Implementations | JSON Schema

環(huán)境準(zhǔn)備

安裝 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 的網(wǎng)站?JSON Schema Tool?json 字符串復(fù)制到頁面左邊,然后點(diǎn)擊 INFER SHCEMA,就會(huì)自動(dòng)轉(zhuǎn)換為 schema json 文件類型,會(huì)將每個(gè)地段的返回值類型都設(shè)置一個(gè)默認(rèn)類型,在 pattern 中也可以寫正則進(jìn)行匹配。

點(diǎn)擊“設(shè)置”按鈕會(huì)出現(xiàn)各個(gè)類型返回值更詳細(xì)的斷言設(shè)置,這個(gè)就是 schema 最常用也是最實(shí)用的功能。也可以對每種類型的字段最更細(xì)化的區(qū)間值校驗(yàn)或者斷言,例如長度、取值范圍等。

點(diǎn)擊復(fù)制按鈕,可以將生成的 schema 模板保存下來。

實(shí)戰(zhàn)練習(xí)

接下來會(huì)發(fā)起一個(gè) post 請求,驗(yàn)證響應(yīng)值中的 url 字段與 origin 字段是否都為 string 類型。

Python版本

import requests from jsonschema import validate def 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 ,則會(huì)出現(xiàn)報(bào)錯(cuò):

import requests from jsonschema import validate def 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)

返回報(bào)錯(cuò)信息

> raise error E 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,也會(huì)有報(bào)錯(cuò)提示。

> raise error E 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 文件中存放校驗(yàn)文件,校驗(yàn)響應(yīng)值中的 url 字段與 origin 字段是否都為 string 類型,文件內(nèi)容為:

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

同 Python 版本一致,以下代碼校驗(yàn)響應(yīng)值是否符合 JsonValidator.json 文件中規(guī)定的格式要求。

import static io.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")); ? ?} }


接口自動(dòng)化測試之JSON Schema模式改如何使用?的評論 (共 條)

分享到微博請遵守國家法律
甘南县| 泗阳县| 常州市| 永清县| 清新县| 东明县| 武夷山市| 千阳县| 错那县| 大竹县| 白玉县| 河源市| 烟台市| 荣昌县| 桓台县| 灵山县| 临安市| 博罗县| 台中市| 独山县| 东阿县| 兴文县| 石城县| 万载县| 青岛市| 会理县| 贵溪市| 祁阳县| 娱乐| 新乡市| 沽源县| 德保县| 视频| 湖南省| 海宁市| 临潭县| 河南省| 武陟县| 樟树市| 象山县| 凌海市|