目录:
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依赖
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-schema-validator</artifactId>
<version>3.0.1</version>
</dependency>
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"));
}
} ```