在 Junit 测试中将 RestAssured 日志记录到 Log4J
Logging RestAssured Logs to Log4J in Junit tests
我们正在使用 REST Assured 来测试一些 REST 服务。我们需要将请求和响应日志记录重定向到 Log4j 日志。我们有以下代码试图测试日志记录重定向:
public class RestTest {
private static RequestSpecification spec;
private static Logger logger = LogManager.getLogger(RestTest.class);
@Rule
public TestWatcher watcher = new Log4JWatcher();
@BeforeClass
public static void initSpec(){
PrintStream logStream = IoBuilder.forLogger(logger).buildPrintStream();
RestAssuredConfig restAssuredConfig = new RestAssuredConfig();
LogConfig logConfig = restAssuredConfig.getLogConfig();
logConfig
.defaultStream(logStream)
.enablePrettyPrinting(true);
spec = new RequestSpecBuilder()
.setContentType(ContentType.JSON)
.setBaseUri("http://jsonplaceholder.typicode.com/")
.addFilter(new ResponseLoggingFilter())
.addFilter(new RequestLoggingFilter())
.setConfig(restAssuredConfig)
.build();
}
@Test
public void useSpec(){
given()
.spec(spec)
.param("limit", 20)
.when()
.get("posts")
.then()
.statusCode(200);
}
}
我们将以下日志输出到 log4j 文件:
09:47:17.264 [main] INFO test.util.Log4JWatcher - useSpec(test.ExtentReportSandbox.RestTest)
09:49:45.485 [main] INFO test.util.Log4JWatcher - useSpec(test.ExtentReportSandbox.RestTest)
在 system.out 上,我们看到了请求和响应的 REST Assured 输出。该输出不会重定向到 Log4j 文件。我们如何将控制台输出重定向到 Log4j 文件?
问题已通过更改以下内容得到解决:
new RequestLoggingFilter();
new ResponseLoggingFilter();
spec = new RequestSpecBuilder()
.setContentType(ContentType.JSON)
.setBaseUri("http://jsonplaceholder.typicode.com/")
.addFilter(ResponseLoggingFilter.logResponseTo(logStream))
.addFilter(RequestLoggingFilter.logRequestTo(logStream))
.setConfig(restAssuredConfig)
.build();
现在它按预期将输出发送到 Log4j 文件。关键是添加 "logResponseTo" 和 "logRequestTo" 过滤器。
我们正在使用 REST Assured 来测试一些 REST 服务。我们需要将请求和响应日志记录重定向到 Log4j 日志。我们有以下代码试图测试日志记录重定向:
public class RestTest {
private static RequestSpecification spec;
private static Logger logger = LogManager.getLogger(RestTest.class);
@Rule
public TestWatcher watcher = new Log4JWatcher();
@BeforeClass
public static void initSpec(){
PrintStream logStream = IoBuilder.forLogger(logger).buildPrintStream();
RestAssuredConfig restAssuredConfig = new RestAssuredConfig();
LogConfig logConfig = restAssuredConfig.getLogConfig();
logConfig
.defaultStream(logStream)
.enablePrettyPrinting(true);
spec = new RequestSpecBuilder()
.setContentType(ContentType.JSON)
.setBaseUri("http://jsonplaceholder.typicode.com/")
.addFilter(new ResponseLoggingFilter())
.addFilter(new RequestLoggingFilter())
.setConfig(restAssuredConfig)
.build();
}
@Test
public void useSpec(){
given()
.spec(spec)
.param("limit", 20)
.when()
.get("posts")
.then()
.statusCode(200);
}
}
我们将以下日志输出到 log4j 文件:
09:47:17.264 [main] INFO test.util.Log4JWatcher - useSpec(test.ExtentReportSandbox.RestTest)
09:49:45.485 [main] INFO test.util.Log4JWatcher - useSpec(test.ExtentReportSandbox.RestTest)
在 system.out 上,我们看到了请求和响应的 REST Assured 输出。该输出不会重定向到 Log4j 文件。我们如何将控制台输出重定向到 Log4j 文件?
问题已通过更改以下内容得到解决:
new RequestLoggingFilter();
new ResponseLoggingFilter();
spec = new RequestSpecBuilder()
.setContentType(ContentType.JSON)
.setBaseUri("http://jsonplaceholder.typicode.com/")
.addFilter(ResponseLoggingFilter.logResponseTo(logStream))
.addFilter(RequestLoggingFilter.logRequestTo(logStream))
.setConfig(restAssuredConfig)
.build();
现在它按预期将输出发送到 Log4j 文件。关键是添加 "logResponseTo" 和 "logRequestTo" 过滤器。