我有一个API GET:/ api / getInt
When I call this API using postman, I get following response
{ "value": 30 }
Whereas, If I call the same API using JMeter, I get double
{ "value": 30.0 }
因此,我真的很麻烦。由于我在许多API中都遇到此类问题,因此我将响应用作对其他API的请求。
请有人,让我知道为什么会有这种奇怪的行为吗?
答案 0 :(得分:0)
如果您有不同的答复,我希望您发送的是不同的请求。确保JMeter和Postman发送的请求完全相同,您可以使用Wireshark或Fiddler之类的嗅探工具捕获并比较它们。
一旦弄清了什么,就应该修改JMeter配置,以使请求看起来完全一样。
如果比较请求时遇到麻烦,您甚至可以使用JMeter的HTTP(S) Test Script Recorder记录源自Postman的请求。
准备进行记录的JMeter。最快,最简单的方法是使用JMeter Templates feature。
准备邮递员进行记录。
答案 1 :(得分:-1)
与许多其他编程语言不同,JavaScript Numbers are always 64-bit floating point和JSON是JavaScript Object Notation,因此JS的30
和30.0
之间没有区别。
要使用JMeter解析JSON,您需要在测试计划中添加JSON Extractor。
要从上述JSON获取value
:
{
"value": 30.0
}
在“ JSON路径表达式”字段中,我们可以插入此JSON路径$.value
毕竟,您可以使用BeanShell将浮点数转换为整数:
1.在带有JSON Extractor的HTTP请求之后添加BeanShell Sampler。
2.将此代码复制到BeanShell脚本:
//get string from JMeter Variable "floatNumberAsString":
String floatNumberAsString = vars.get("floatNumberAsString");
//Parse it to int
int integerNumber = (int)Float.parseFloat(floatNumberAsString);
//Put as a string value to JMeter variable test
vars.put("IntegerNumberAsString", String.valueOf(integerNumber));
在脚本之前,我们有floatNumberAsString=30.0
,在IntegerNumberAsString=30
之后
有关使用BeanShell
的完整详细信息,请参阅: