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,可以在提取后通过处理器把数值格式化为两位小数,再进行断言:
- 先用JSON Extractor提取价格到变量
rawPrice(比如提取到的是8.5) - 添加JSR223 PostProcessor,输入以下Groovy代码:
// 读取原始提取的价格 def rawPrice = vars.get("rawPrice") // 格式化为两位小数的字符串 def formattedPrice = String.format("%.2f", Double.parseDouble(rawPrice)) // 将格式化后的值存入新变量 vars.put("formattedPrice", formattedPrice)
- 然后在响应断言中使用
${formattedPrice}和8.50做比较即可。
这个方法的好处是不需要修改JSON结构,也不用换提取器,通过后置处理统一格式化数值,保证断言的精度。
内容的提问来源于stack exchange,提问作者TestMcc
相关产品推荐
相关产品推荐

