使用 Json 单位断言 Rest Assured 响应

Asserting Rest Assured response with Json Unit

我目前正在使用 rest assured 和 Json-unit 来针对请求的 rest assured 响应声明本地 json 文件。

我目前有一个 class 方法与我的基本 uri。

我不知道如何做出这种断言。我正在努力处理 json-unit 文档。我需要先输入文件吗?

    @Test
    public void ApiaryTest1() throws Exception {

        when()

                .get("/test")
                .then()
                .statusCode(200);

        // compares two JSON documents
        assertJsonEquals("expected/test.json", "http://apiary/test");
        }

您需要:

  • 使用 JsonUnit 读入资源API
  • 将放心的响应提取到变量
  • 断言你已经在做

示例:

Response response = when().get("<url>");
        response
                .then()
                .statusCode(200);

        // compares two JSON documents
        assertJsonEquals(resource("resource-inside-resources-folder.json"), response.asString());

对于放心的 Kotlin DSL:

        When {
            get("http://nowjidev1vm01.ath.bskyb.com/calskyplussearch/health")
        } Then {
            statusCode(200)
        } Extract {
            assertJsonEquals(expectedBody, response().asString())
        }

这比你想象的要容易。如果指定了“主体匹配器”,Rest Assures 会将整个主体作为字符串传递。因此,您可以直接使用 json 单元的 jsonEquals 匹配器:

import static net.javacrumbs.jsonunit.JsonMatchers.jsonEquals;

public class RestAssuredWithJsonUnit {

    @Test
    public void test() throws Exception {
        
        given().when().get("/api/service/v1").
                then().
                statusCode(200).
                body(jsonEquals(resource("resource-on-classpath.json")));

    }

    public static String resource(String resourceName) throws IOException {
        Objects.requireNonNull(resourceName, "'null' passed instead of resource name");
        return IOUtils.resourceToString(resourceName, UTF_8);
    }

请注意“资源”方法的实现。 ResourceUtils 中提供的是使用系统类加载器,不幸的是没有找到我的资源。 commons-io 的 IOUtils 做得很好!