日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

rest-assured之Schema validation(包括JSON Schema validation及Xml Schema validation)

發布時間:2025/4/5 javascript 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rest-assured之Schema validation(包括JSON Schema validation及Xml Schema validation) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  rest-assured從2.1.0版本開始支持 ?Schema 驗證,包括JSON Schema validation及Xml Schema validation。我們之前斷言響應體都是一個一個字段來進行斷言,這樣如果斷言的字段比較多的話就非常的麻煩,為了解決這個問題,我們可以使用schema文件來進行響應體的斷言,schema文件可以斷言整個response 。

1.JSON Schema validation

例如:在classpath下面放置以下的schema文件,products-schema.json:

1 { 2 "$schema": "http://json-schema.org/draft-04/schema#", 3 "title": "Product set", 4 "type": "array", 5 "items": { 6 "title": "Product", 7 "type": "object", 8 "properties": { 9 "id": { 10 "description": "The unique identifier for a product", 11 "type": "number" 12 }, 13 "name": { 14 "type": "string" 15 }, 16 "price": { 17 "type": "number", 18 "minimum": 0, 19 "exclusiveMinimum": true 20 }, 21 "tags": { 22 "type": "array", 23 "items": { 24 "type": "string" 25 }, 26 "minItems": 1, 27 "uniqueItems": true 28 }, 29 "dimensions": { 30 "type": "object", 31 "properties": { 32 "length": {"type": "number"}, 33 "width": {"type": "number"}, 34 "height": {"type": "number"} 35 }, 36 "required": ["length", "width", "height"] 37 }, 38 "warehouseLocation": { 39 "description": "Coordinates of the warehouse with the product", 40 "$ref": "http://json-schema.org/geo" 41 } 42 }, 43 "required": ["id", "name", "price"] 44 } 45 }

我們可以通過上面的schema文件來驗證 "/products" 這個請求的響應數據是否符合規范:

1 get("/products").then().assertThat().body(matchesJsonSchemaInClasspath("products-schema.json"));

matchesJsonSchemaInClasspath 是從?io.restassured.module.jsv.JsonSchemaValidator 這個類中靜態導入的,并且推薦靜態導入這個類中的所有方法,然而為了能夠使用io.restassured.module.jsv.JsonSchemaValidator 這個類必須依賴?json-schema-validator?module ,我們可以從這個網頁下載它,或者是通過maven添加以下依賴來獲取:

<dependency><groupId>io.rest-assured</groupId><artifactId>json-schema-validator</artifactId><version>3.0.6</version> </dependency>

1.1 JSON Schema Validation 設置?

  rest-assured 的 json-schema-validator module 使用的是?Francis Galiegue's??json-schema-validator(fge) 庫來實現驗證(Validation)。如果想要配置基礎 fge 庫,我們可以這樣寫:

1 // Given 2 JsonSchemaFactory jsonSchemaFactory = JsonSchemaFactory.newBuilder().setValidationConfiguration(ValidationConfiguration.newBuilder().setDefaultVersion(DRAFTV4).freeze()).freeze(); 3 4 // When 5 get("/products").then().assertThat().body(matchesJsonSchemaInClasspath("products-schema.json").using(jsonSchemaFactory));

  這個 using 方法允許我們傳遞一個jsonSchemaFactory 實例,rest-assured在進行驗證的時候就會使用這個實例。這種配置就允許我們在驗證響應結果時進行更詳細的配置。

  fge 庫同時也允許設置validation為 checked或者unchecked,默認情況下rest-assured使用的是checked的validation,如果想要改變這個值,我們可以提供一個?JsonSchemaValidatorSettings?的實例給matcher。例如:

1 get("/products").then().assertThat().body(matchesJsonSchemaInClasspath("products-schema.json").using(settings().with().checkedValidation(false)));

上面的 setting 方法是從 JsonSchemaValidatorSettings?這個類中靜態導入的。

1.2??Json Schema Validation靜態配置

  讓我們來想象一下,假如我們想一直使用unchecked的validation并且想設置Json Schema的版本為3,與其將JsonSchemaValidatorSettings?的實例一個個提供給所有的matchers,我們不如將它定義為一個靜態的:

1 JsonSchemaValidator.settings = settings().with().jsonSchemaFactory( 2 JsonSchemaFactory.newBuilder().setValidationConfiguration(ValidationConfiguration.newBuilder().setDefaultVersion(DRAFTV3).freeze()).freeze()). 3 and().with().checkedValidation(false); 4 5 get("/products").then().assertThat().body(matchesJsonSchemaInClasspath("products-schema.json"));

通過上面的方式,現在任意一個導入了??JsonSchemaValidator?的matcher都會使用?DRAFTV3 作為默認的版本并且使用unchecked的validation。

  為了重置?JsonSchemaValidato 為默認的配置,我們可以簡單的調用一下 reset 方法來實現:

1 JsonSchemaValidato.reset();

1.3 不依賴rest-assured的JSON Schema Valition

  我們不依賴rest-assured也一樣可以使用 json-schema-valition ,只要我們把JSON文件表示為 String 類型,我們可以這么做:

1 import org.junit.Test; 2 import static io.restassured.module.jsv.JsonSchemaValidator.matchesJsonSchemaInClasspath; 3 import static org.hamcrest.MatcherAssert.assertThat; 4 5 public class JsonSchemaValidatorWithoutRestAssuredTest { 6 7 8 @Test public void 9 validates_schema_in_classpath() { 10 // Given 11 String json = ... // Greeting response 12 13 // Then 14 assertThat(json, matchesJsonSchemaInClasspath("greeting-schema.json")); 15 } 16 }

2.Xml的 Schema 和 DTD Validation(驗證)

  通過使用 Xml Schema(XSD)或者DTD我們同樣可以驗證Xml響應體。

XSD例子:

1 get("/carRecords").then().assertThat().body(matchesXsd(xsd));

DTD例子:

1 get("/videos").then().assertThat().body(matchesDtd(dtd));

matchesXsd?方法和?matchesDtd?方法屬于?Hamcrest matchers 包里,我們需要靜態導入?io.restassured.matcher.RestAssuredMatchers。

轉載于:https://www.cnblogs.com/lwjnicole/p/8297350.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的rest-assured之Schema validation(包括JSON Schema validation及Xml Schema validation)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。