Rest保证允许编写RESTendpoint的测试。它具有的有用功能之一是能够在测试失败的情况下记录请求和响应,以便您可以检查发送到REST服务的内容。
记录请求和响应的失败测试示例
import io.restassured.RestAssured;
import org.junit.Before;
import org.junit.Test;
import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;
public class TestRestAssured {
@Before
public void setUp() {
RestAssured.enableLoggingOfRequestAndResponseIfValidationFails();
}
@Test
public void exampleFailingTest() {
String json = "{\n" +
" \"title\": \"foo\",\n" +
" \"body\": \"bar\",\n" +
" \"userId\": 1\n" +
"}";
given()
.contentType("application/json; charset=UTF-8")
.body(json)
.post("http://jsonplaceholder.typicode.com/posts")
.then()
.body("userId", equalTo(2));
}
}
此测试失败,因为返回的userId
为1。这是执行测试时在控制台上打印的内容。
Request method: POST
Request URI: http://jsonplaceholder.typicode.com/posts
Proxy: <none>
Request params: <none>
Query params: <none>
Form params: <none>
Path params: <none>
Multiparts: <none>
Headers: Accept=*/*
Content-Type=application/json; charset=UTF-8
Cookies: <none>
Body:
{
"title": "foo",
"body": "bar",
"userId": 1
}
HTTP/1.1 201 Created
Server: Cowboy
Connection: keep-alive
X-Powered-By: Express
Vary: Origin, X-HTTP-Method-Override, Accept-Encoding
Access-Control-Allow-Credentials: true
Cache-Control: no-cache
Pragma: no-cache
Expires: -1
X-Content-Type-Options: nosniff
Content-Type: application/json; charset=utf-8
Content-Length: 65
Etag: W/"41-+JqcAMRWkzuXd+uFDZdzIA"
Date: Fri, 17 Jun 2016 08:18:59 GMT
Via: 1.1 vegur
{
"title": "foo",
"body": "bar",
"userId": 1,
"id": 101
}
java.lang.AssertionError: 1 expectation failed.
JSON path userId doesn't match.
Expected: <2>
Actual: 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
[rest of the stacktrace]
这是一个很棒的功能,因为它允许报告更有上下文的bug报告。在引擎盖下,它使用LogConfig
,您可以将其配置为写入任何默认为System. out
的PrintStream
。
Maven Surefire插件在两个文件(文本和XML)上报告错误。但是在这些文件上,它只包括测试方法抛出的异常中的内容。所以报告中的细节如下所示:
java.lang.AssertionError: 1 expectation failed.
JSON path userId doesn't match.
Expected: <2>
Actual: 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
[rest of the stacktrace]
这很好,但还可以更好。
现在应该很明显了。
如何在Surefire报告中包含来自REST保证的请求和响应详细信息?
我在这里找到了一个答案:设置rest确保在全局记录所有请求和响应
我从导入日志过滤器开始,像这样
import io.restassured.filter.log.*;
然后我将过滤器添加到给定的()链,如下所示
RequestSpecification myRequest = RestAssured.given()
.filter(new ResponseLoggingFilter())
.filter(new RequestLoggingFilter());
然后,我可以直接在测试输出中看到原始请求和响应。