【问题标题】:REST Assured JSON validation for response without a JSON scheme没有 JSON 方案的响应的 REST 有保证的 JSON 验证
【发布时间】:2018-07-23 20:29:37
【问题描述】:

我想检查 JSON 响应是否至少有效,并且找不到正确的方法来使用 REST Assured。

我在REST Assured examples 中阅读了很多关于matchesJsonSchemaInClasspath 的内容,但我还不想编写整个 JSON 架构。

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

如果不检查任何格式错误的 JSON 的检查是否已通过 - 所以即使 JSON 无效,我也可以检查字段值,或者,例如数组大小。

import org.junit.jupiter.api.Test;

import static io.restassured.RestAssured.get;
import static org.hamcrest.core.Is.is;


public class RestEndpointTest{
    @Test
    public void basic_rest_check() {
        get("/my_endpoint").
            then().
            assertThat().
            body("size()", is(2)).
            statusCode(200);
    }
}

即使响应也通过了测试:

[{},{}]MALFORMED

【问题讨论】:

    标签: java json rest rest-assured


    【解决方案1】:

    现在这很简单,但我发现只有在卡住了几天之后,我才提出我的问题。所以解决方案是使用matchesJsonSchema 而不是matchesJsonSchemaInClasspath

    import org.junit.jupiter.api.Test;
    
    import static io.restassured.RestAssured.get;
    import static io.restassured.module.jsv.JsonSchemaValidator.matchesJsonSchema;
    
    public class RestEndpointTest{
        @Test
        public void basic_rest_check() {
            get("/my_endpoint").
                then().
                assertThat().
                body(matchesJsonSchema("{}")).
                statusCode(200);
        }
    }
    

    解释:关于http://json-schema.org/

    最基本的模式是一个空白的 JSON 对象,它约束 什么都没有,什么都允许,什么也不描述:

    {}

    还有一个选项可以使用{} 的内容创建文件并通过matchesJsonSchemaInClasspath 加载它

    【讨论】:

      猜你喜欢
      • 2015-03-19
      • 2018-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-01
      相关资源
      最近更新 更多