二、Json Schema Validation—断言笔记

目录:
1、断言请求结果的某个字段值
2、匿名JSON根节点验证
3、Json Schema Validation断言json结构是否复合规范
4、不使用rest-assured的Json Schema Validation

一、断言请求结果

若有如下json串

{
"lotto":{
 "lottoId":5,
 "winning-numbers":[2,45,34,23,7,5,3],
 "winners":[{
   "winnerId":23,
   "numbers":[2,45,34,23,3,5]
 },{
   "winnerId":54,
   "numbers":[52,3,12,11,18,22]
 }]
}
}
如果想要判断lottoId的值是否等于5,可以这样做:
get("/lotto").then().body("lotto.lottoId", equalTo(5));

想要检查winnerId的取值包括23和54:
get("/lotto").then().body("lotto.winners.winnerId", hasItems(23, 54));

注意: equalTo 和 hasItems 是 Hamcrest matchers的方法,所以需要静态导入 org.hamcrest.Matchers。
二、匿名JSON根节点验证

若存在JSON文件中根节点名称不确定的情况下,可以使用$或者空格字符串作为路径来识别,例如有JSON如下:

[1,2,3]

验证方法如下:

when().
     get("/json").
then().
     body("$", hasItems(1, 2, 3));
三、断言json结构是否复合规范
step1:

生成schema.json文件,放置在classpath中(idea的话可以放在resources目录下)。

step2:

在pom.xml文件下添加maven依赖


   io.rest-assured
   json-schema-validator
   3.0.1

step3:

matchesJsonSchemaInClasspath 静态导入自 io.restassured.module.jsv.JsonSchemaValidator推荐从这个类中静态导入所有的方法

step4:
// Given
JsonSchemaFactory jsonSchemaFactory = JsonSchemaFactory.newBuilder().setValidationConfiguration(ValidationConfiguration.newBuilder().setDefaultVersion(DRAFTV4).freeze()).freeze();

// When
get("/products").then().assertThat().body(matchesJsonSchemaInClasspath("products-schema.json").using(jsonSchemaFactory));
四、不使用rest-assured的Json Schema Validation

您也可以在不依赖rest-assured的情况下使用json-schema-validator module。如想要把json文本表示为String类型的字符串,可以这样做:

import org.junit.Test;
import static io.restassured.module.jsv.JsonSchemaValidator.matchesJsonSchemaInClasspath;
import static org.hamcrest.MatcherAssert.assertThat;

public class JsonSchemaValidatorWithoutRestAssuredTest {


    @Test 
    public void validates_schema_in_classpath() {
        // Given
        String json = ... // Greeting response

        // Then
        assertThat(json, matchesJsonSchemaInClasspath("greeting-schema.json"));
    }
} ```

你可能感兴趣的:(二、Json Schema Validation—断言笔记)