使用 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 做得很好!
我目前正在使用 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 做得很好!