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

Jmeter JSON Extractor提取精确小数问题:无法保留末尾零

解决JMeter JSON Extractor丢失小数末尾零的问题

首先得明确:你遇到的问题本质是JSON的数值类型(number)本身不区分8.5和8.50,JMeter的JSON Extractor在解析时会把它们当成同一个数值处理,自动去掉无意义的末尾零,导致你的精确断言失败。下面给你几个可行的解决方案:

方案1:修改JSON结构,将价格设为字符串类型

如果能控制Dummy Sampler里的JSON内容,直接把price的值改成字符串格式:

{ 
  "shop": { 
    "book": [ 
      { 
        "author": "Author 1", 
        "title": "Title 1", 
        "price": "8.50" 
      } 
    ] 
  } 
}

这样JSON Extractor提取到的就是完整的"8.50"字符串,直接用这个值做断言就能成功。这个方法最简单,但前提是你有权修改JSON的结构。

方案2:使用正则表达式提取器替代JSON Extractor

如果不能修改JSON结构,可以换用正则表达式提取器来精确匹配字符串中的价格值。配置步骤:

  • 添加正则表达式提取器到请求下
  • 引用名称:比如price
  • 正则表达式:"price": (\d+\.\d{2})
  • 模板:$1$
  • 匹配数字:1

这个正则会直接从响应的原始文本中匹配带两位小数的价格字符串,提取到的就是8.50,完美适配你的断言需求。

方案3:提取后格式化数值为两位小数

如果一定要用JSON Extractor,可以在提取后通过处理器把数值格式化为两位小数,再进行断言:

  1. 先用JSON Extractor提取价格到变量rawPrice(比如提取到的是8.5)
  2. 添加JSR223 PostProcessor,输入以下Groovy代码:
// 读取原始提取的价格
def rawPrice = vars.get("rawPrice")
// 格式化为两位小数的字符串
def formattedPrice = String.format("%.2f", Double.parseDouble(rawPrice))
// 将格式化后的值存入新变量
vars.put("formattedPrice", formattedPrice)
  1. 然后在响应断言中使用${formattedPrice}和8.50做比较即可。

这个方法的好处是不需要修改JSON结构,也不用换提取器,通过后置处理统一格式化数值,保证断言的精度。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 17:27:51