执行PATCH请求更新记录时返回500错误(RestAssured测试求助)
PATCH请求返回500错误排查方案
问题详情
报错信息:
java.lang.AssertionError: 1 expectation failed. Expected status code <200> but was <500>
执行PATCH请求更新restful-booker的预订记录时返回500内部错误,已确认端点地址正确,相同请求逻辑在Postman中可正常执行,测试代码如下:
import org.json.simple.JSONObject; import org.testng.annotations.Test; import io.restassured.http.ContentType; import java.util.Map; import static io.restassured.RestAssured.*; public class Test03_PartialUpdateBooking { @Test public void PartialUpdateBooking() { JSONObject payload = new JSONObject(); payload.put("firstname","Tiger"); payload.put("lastname","Test"); //String AuthToken ="Basic YWRtaW46cGFzc3dvcmQxMjM="; System.out.println(payload); System.out.println(payload.toJSONString()); given(). header("Authorization", "Basic YWRtaW46cGFzc3dvcmQxMjM="). //header("Authorization","AuthToken"). contentType(ContentType.JSON). accept(ContentType.JSON). header("cookie","token=abc123"). body(payload.toJSONString()). when(). patch("https://restful-booker.herokuapp.com/booking/2"). then(). statusCode(200). log().all(); } }
排查与修复方案
- 移除冲突的认证方式:restful-booker的PATCH接口仅需单一认证方式,代码中同时传入
Basic Auth头和tokenCookie会导致服务端解析异常。二选一即可:- 若使用Basic Auth,删除
header("cookie","token=abc123"); - 若使用Cookie Token,删除
Authorization头,且确保token为登录接口返回的有效值(代码中abc123是无效测试值,Postman中使用的是真实有效token)。
- 若使用Basic Auth,删除
- 优化请求体构建方式:避免手动JSON序列化,直接用RestAssured原生支持的Map构建请求体,减少格式错误风险:
import java.util.HashMap; import java.util.Map; // ... Map<String, String> payload = new HashMap<>(); payload.put("firstname", "Tiger"); payload.put("lastname", "Test"); given() .header("Authorization", "Basic YWRtaW46cGFzc3dvcmQxMjM=") .contentType(ContentType.JSON) .accept(ContentType.JSON) .body(payload) // 直接传入Map,无需转字符串 // ... - 获取服务端错误详情:添加响应体打印,定位具体错误原因:
when() .patch("https://restful-booker.herokuapp.com/booking/2") .then() .log().body() // 打印响应体内容 .statusCode(200) .log().all(); - 验证目标记录存在:先通过GET请求
https://restful-booker.herokuapp.com/booking/2确认该预订记录未被删除,再执行更新操作。
内容的提问来源于stack exchange,提问作者Tester11
相关产品推荐
相关产品推荐

