You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行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头和token Cookie会导致服务端解析异常。二选一即可:
    • 若使用Basic Auth,删除header("cookie","token=abc123");
    • 若使用Cookie Token,删除Authorization头,且确保token为登录接口返回的有效值(代码中abc123是无效测试值,Postman中使用的是真实有效token)。
  • 优化请求体构建方式:避免手动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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 21:15:36