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

测试带PathSegment路径参数的POST请求出现断言失败该如何解决

问题根源

你的测试用例存在两处明确问题,是导致404和断言失败的核心原因:

  1. Rest Assured默认开启URL编码,且会自动识别路径中;开头的矩阵参数,将其从路径中剥离单独处理,导致实际发往服务端的路径为/api/customer/order/1002/items/qty,和你定义的接口路径规则不匹配,因此返回404。
  2. 你的断言逻辑写反:如果接口正常处理请求后返回Order(s) Received,assertNotEquals会直接抛出断言失败错误。

修复方案

方案1:关闭URL编码(最简便)

新增urlEncodingEnabled(false)配置,让Rest Assured原样传递你写入的完整路径:

@Test
public final void testOrderMultipleItems() throws URISyntaxException, AssertionError {
  String msg= given()
      .urlEncodingEnabled(false)
      .contentType("application/json")
      .when()
      .post(TestUtil.getURI("/api/customer/order/1002/items;item=3006;item=3005/qty;q=1;q=1"))
      .getBody().asString();
  assertEquals("Order(s) Received", msg);
}

方案2:显式传递路径参数

如果不想全局关闭URL编码,也可以通过路径参数的方式传递带矩阵参数的路径段:

@Test
public final void testOrderMultipleItems() throws URISyntaxException, AssertionError {
  String msg= given()
      .contentType("application/json")
      .pathParam("id", 1002)
      .pathParam("itemSegment", "items;item=3006;item=3005")
      .pathParam("qtySegment", "qty;q=1;q=1")
      .when()
      .post(TestUtil.getURI("/api/customer/order/{id}/{itemSegment}/{qtySegment}"))
      .getBody().asString();
  assertEquals("Order(s) Received", msg);
}

调试建议

后续遇到类似请求异常问题,可以在given后添加.log().all()配置,打印完整的请求信息(路径、头、参数等),快速定位请求和预期不一致的地方:

given().log().all()
  // 剩余配置

内容的提问来源于stack exchange,提问作者Pallavi Prasad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:51:03