在 RestAssured jsonPathEvaluator 中,没有为双值提供正确的值

Posted

技术标签:

【中文标题】在 RestAssured jsonPathEvaluator 中,没有为双值提供正确的值【英文标题】:In RestAssured jsonPathEvaluator not giving correct values for double value 【发布时间】:2022-01-01 19:06:53 【问题描述】:

我有一个如下所示的 json 响应:-


  "someField": [
    
      "abc": "abcdId"
    
  ],
  "someId": "pqrsId",
  "oneTier": 
    "startThreshold": 25000,
    "endThreshold": 74999.99
  ,
  "nextTier": 
    "startThreshold": 75000,
    "endThreshold": 149999.99
  

当我尝试打印时

response.getBody().asString()

我可以看到 nextTier.endThreshold 的值为 '14999.99' 但是当我这样做时

response.getBody().jsonPath().get("nextTier.maxThreshold").toString();

我看到的值为 14999.98'。

无法弄清楚为什么会发生这种情况。

【问题讨论】:

您的 json 中没有 maxThreshold。你的意思是endThreshold 【参考方案1】:

默认配置JsonPathConfig定义NumberReturnType = FLOAT_AND_DOUBLE,这样在类型间转换时可能会丢失精度。

幸运的是,RestAssured 为此类问题提供了解决方案。可以配置NumberReturnType = BIG_DECIMAL,然后保存浮点数的精度。

JsonPath.config = new JsonPathConfig().numberReturnType(JsonPathConfig.NumberReturnType.BIG_DECIMAL);
BigDecimal endThreshold = JsonPath.with(json).get("nextTier.endThreshold");
System.out.println(endThreshold.doubleValue());
//149999.99

【讨论】:

以上是关于在 RestAssured jsonPathEvaluator 中,没有为双值提供正确的值的主要内容,如果未能解决你的问题,请参考以下文章

RestAssured assertThat,键的通配符

restAssured 测试接口,以下是一个get 请求。

收到响应后,是不是可以选择删除 REST API(RestAssured) 中请求中设置的多部分内容?

RestAssured:如何检查 json 数组响应的长度?

java接口自动化测试--restassured如何进行文件上传接口测试

在 RestAssured jsonPathEvaluator 中,没有为双值提供正确的值