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

Rest Assured测试用例因浮点数精度问题断言失败求助

解决Rest Assured浮点数值断言失败的问题

嘿,我之前也碰到过类似的问题,咱们来一步步拆解下你的问题:

问题出在哪?

从你给出的错误日志和Postman返回结果来看,有两个核心原因导致断言失败:

  • 类型不兼容:你在断言里用了float类型的期望值(带f后缀,比如-365305.5f),但API返回的是double类型的数值(比如-365305.5,没有f)。Rest Assured的JSON Path断言会严格校验数值类型,这就直接导致了匹配失败。
  • 精度不匹配:Postman返回的实际值有更高的精度(比如-365305.5066),而你期望的是截断后的-365305.5,直接精确匹配肯定过不了。

具体怎么修复?

这里有几种可行的解决方案,你可以根据自己的测试场景选:

1. 用double类型做期望值,允许精度误差(最推荐)

把断言里的float换成double(去掉f后缀),同时用Hamcrest的closeTo匹配器来忽略微小的精度差异——毕竟浮点计算本来就容易有精度问题,强制精确匹配反而不严谨:

// 逐个字段断言,指定可接受的误差范围
given()
    // 你的请求配置
.when()
    .get("/your-api-endpoint")
.then()
    .body("zero_base.herebyBreakdown.value[0]", closeTo(-365305.5066, 0.001))
    .body("zero_base.herebyBreakdown.value[1]", closeTo(-75133.816, 0.001))
    .body("zero_base.herebyBreakdown.value[2]", closeTo(79750.4868, 0.001))
    .body("zero_base.herebyBreakdown.value[3]", equalTo(0.0d));

如果你的测试不关心顺序,还可以用containsInAnyOrder来匹配整个列表:

.then().body("zero_base.herebyBreakdown.value", 
            containsInAnyOrder(
                closeTo(-365305.5066, 0.001),
                closeTo(-75133.816, 0.001),
                closeTo(79750.4868, 0.001),
                equalTo(0.0d)
            ));

2. 把返回值转成float再匹配

如果你一定要用原来的float期望值,可以在JSON Path里把返回的数值强制转成float类型后再断言:

.then()
    .body("zero_base.herebyBreakdown.value[0].floatValue()", equalTo(-365305.5f))
    .body("zero_base.herebyBreakdown.value[1].floatValue()", equalTo(-75133.81f))
    .body("zero_base.herebyBreakdown.value[2].floatValue()", equalTo(79750.484f))
    .body("zero_base.herebyBreakdown.value[3].floatValue()", equalTo(0.0f));

3. 直接用API返回的精确值做断言

如果API返回的数值精度是固定不变的,你也可以直接把Postman里看到的精确值(比如-365305.5066)作为double类型的期望值,这样就能精确匹配:

.then().body("zero_base.herebyBreakdown.value", 
            equalTo(Arrays.asList(-365305.5066d, -75133.816d, 79750.4868d, 0.0d)));

注意事项

别忘了确保你的项目里引入了Hamcrest匹配器的依赖,不然closeTo这些方法用不了。如果是Maven项目,在pom.xml里加这段:

<dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest-all</artifactId>
    <version>1.3</version>
    <scope>test</scope>
</dependency>

内容的提问来源于stack exchange,提问作者keshav goyal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:03:11