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

RestAssured+Cucumber多数据集执行时GET接口查询参数叠加问题

结论

该问题不是RestAssured的已知问题,核心原因为请求实例未做隔离导致参数累加。

问题根因

你代码中使用的req请求对象、RequestSpecification()返回的请求规格实例是类级别的共享变量。Cucumber执行Scenario Outline的每条示例用例时,不会自动重置这些跨用例的共享变量,第二次执行queryParam("size", size)操作时,会往同一个请求实例中追加新的参数,而非覆盖原有参数,最终出现两个size参数拼接的情况。
如果你的RequestSpecification()是自行封装的公共方法,若方法返回的是单例实例,也会触发同样的参数累加问题。

解决方案

  • 优先将请求变量改为方法内的局部变量,每次发起请求都创建全新的请求实例,从根源避免参数污染,修改后的步骤定义代码参考:
@When("^user calls the getScenePaginationAPI endpoint with the GET request with \"([^\"]*)\"$")
public void user_calls_the_getScenePaginationAPI_endpoint_with_the_GET_request_with(int size) throws IOException {
    // 方法内创建新的请求实例,不使用类级别的共享req变量
    RequestSpecification req = given().relaxedHTTPSValidation().urlEncodingEnabled(false)
            .spec(new RequestSpecBuilder().build())
            .queryParam("size",size);
    String resourceAPI = endpointResources.getScenePaginationAPI();
    Response response = req.when().get(resourceAPI);
    logger.info("Response Data: "+response);
}
  • 若需要复用公共请求配置(比如统一域名、全局header),每次使用前克隆新的实例,或者调用reset()方法重置实例:
// 公共请求配置示例
private static RequestSpecification publicSpec = new RequestSpecBuilder()
        .setBaseUri("https://testing.company.com")
        .build();

// 每次使用时克隆新实例,避免修改公共配置
RequestSpecification req = given().spec(publicSpec.clone())
        .queryParam("size", size);
  • 新增Cucumber After钩子方法,每条用例执行结束后清空所有类级别的请求、响应变量,彻底避免跨用例的数据污染。

内容的提问来源于stack exchange,提问作者Vishvesh Savant

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:45:02