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

Rest Assured接口测试JUnit运行正常 Cucumber报Gson解析错误如何解决

异常原因及解决方案

核心原因定位

该错误本质是Gson尝试将字符串类型的内容解析为JSON对象时触发的类型不匹配异常,两段逻辑看起来一致但执行环境不同,触发原因集中在Cucumber与JUnit的运行环境差异上,常见原因如下:

  • Cucumber环境Rest Assured配置不一致:JUnit用例加载的Rest Assured基础配置(baseURI、basePath、端口、解析器配置)和Cucumber启动时加载的配置不同,导致请求实际发送到了错误地址,返回了HTML错误页、纯文本错误提示等非JSON内容。
  • 自动解析逻辑被提前触发:Cucumber上下文存在全局Hook(@BeforeStep/@AfterStep)、监听器,或者你使用的CommonData.response是自定义的DTO实体类而非Rest Assured原生Response类型,赋值时会自动触发JSON序列化,此时如果响应内容不符合JSON结构就会报错。
  • 默认解析器配置冲突:Cucumber测试启动类中强制配置了Gson作为全局默认解析器,且未处理非JSON响应的兼容逻辑。

分步解决方案

  1. 优先确认实际响应内容
    在Cucumber步骤的请求执行后,先打印原始响应内容,确认是否返回了预期的JSON结构:
CommonData.response = given()
        .header("Authorization", PropertiesReader.getPropertiesValue("TokenPub"))
        .queryParam("langId", "PdOnv3OV")
        .queryParam("Regions", "52aAGOZ7")
        .queryParam("From","2022-01-30")
        .queryParam("To","2022-02-06")
        .when()
        .request(String.valueOf(RestHttpRequest.HttpMethods.GET), "/api/product/search");
// 新增调试代码
System.out.println("响应状态码:" + CommonData.response.getStatusCode());
System.out.println("原始响应内容:" + CommonData.response.getBody().asString());

如果打印出来的内容不是JSON(比如是<html>开头的错误页、404 Not Found之类的纯文本),直接修正Cucumber环境的Rest Assured baseURI、basePath配置即可。

  1. 统一两套环境的Rest Assured配置
    将JUnit用例加载的Rest Assured配置迁移到Cucumber的全局前置Hook中,确保两套环境的请求基础配置完全一致,比如:
@Before
public void initRestAssuredConfig() {
    RestAssured.baseURI = "你的接口域名";
    RestAssured.basePath = "/你的基础路径";
    // 其他配置保持和JUnit环境一致
}
  1. 避免自动解析触发异常
  • 确认CommonData.response的类型为io.restassured.response.Response,不要直接用自定义DTO类接收响应。
  • 如果需要做实体转换,手动显式转换,避免框架自动解析:
String responseBody = CommonData.response.getBody().asString();
// 手动用Gson转换
SearchResponseDTO dto = new Gson().fromJson(responseBody, SearchResponseDTO.class);
  1. 兼容非JSON响应场景
    如果有全局解析逻辑,先判断响应的Content-Type是否为JSON类型再执行解析:
String contentType = CommonData.response.getHeader("Content-Type");
if (contentType != null && contentType.contains("application/json")) {
    // 执行JSON解析逻辑
}

内容的提问来源于stack exchange,提问作者Qa Automation

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:36:09