如何在Java控制台打印RestAssured API状态码并传递给其他方法?
解决控制台打印状态码及传递给测试方法的方案
一、修改测试方法,保存响应并打印状态码
首先需要将API调用的响应保存为Response对象,这样才能提取状态码信息并传递给测试方法。修改后的测试代码如下:
@Test public void getRequest() { // 保存API响应到Response对象 Response response = given() .baseUri("https://api.publicapis.org/entries") .when() .get() .then() .extract() .response(); // 获取状态码(数字格式)和完整状态行(如"200 OK") int statusCode = response.getStatusCode(); String statusLine = response.getStatusLine(); // 控制台打印状态码信息 System.out.println("响应状态码:" + statusCode); System.out.println("完整响应状态:" + statusLine); // 将响应对象传递给检查方法,验证是否符合预期 checkResponseCode(response, "200 OK"); }
二、调整工具方法,基于响应对象验证状态
原工具方法依赖未初始化的responseSpecification存在风险,改为直接接收Response对象,逻辑更可靠:
// 对外暴露的检查方法,接收响应对象和预期状态行 public static void checkResponseCode(Response response, String expectedStatusLine){ ValidateResponse(response, expectedStatusLine); } // 核心验证逻辑 public static void ValidateResponse(Response response, String expectedStatusLine){ String actualStatusLine = response.getStatusLine(); // 拆分预期和实际状态行,提取描述部分 String[] expectedParts = expectedStatusLine.split(" ", 2); String expectedDesc = expectedParts[1]; String[] actualParts = actualStatusLine.split(" ", 2); String actualDesc = actualParts[1]; switch (expectedStatusLine) { case "200 OK": Assert.assertEquals(expectedDesc, actualDesc, "请求失败:实际响应为" + actualStatusLine); break; case "404 Not Found": Assert.assertEquals(expectedDesc, actualDesc, "请求失败:实际响应为" + actualStatusLine); break; default: throw new IllegalArgumentException(expectedStatusLine + " 不在支持的状态选项中"); } }
关键说明
- 保存响应对象:通过
.extract().response()获取完整响应实例,这是获取状态码、响应体等信息的基础。 - 状态码提取:
getStatusCode()返回数字格式的状态码(如200),getStatusLine()返回包含状态码和描述的完整字符串(如"200 OK")。 - 传递状态信息:直接将
Response对象传入工具方法,避免静态变量带来的线程安全或未初始化问题,同时让验证逻辑更直观。
内容的提问来源于stack exchange,提问作者X-Man
相关产品推荐
相关产品推荐

