邮递员返回整数值,而JMeter对于相同的API调用返回双精度

时间:2019-02-01 07:38:40

标签: jmeter postman jmeter-4.0

我有一个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的请求。

请有人,让我知道为什么会有这种奇怪的行为吗?

2 个答案:

答案 0 :(得分:0)

如果您有不同的答复,我希望您发送的是不同的请求。确保JMeter和Postman发送的请求完全相同,您可以使用WiresharkFiddler之类的嗅探工具捕获并比较它们。

一旦弄清了什么,就应该修改JMeter配置,以使请求看起来完全一样。

如果比较请求时遇到麻烦,您甚至可以使用JMeter的HTTP(S) Test Script Recorder记录源自Postman的请求。

  1. 准备进行记录的JMeter。最快,最简单的方法是使用JMeter Templates feature

    • 从JMeter的主菜单中选择File -> Templates -> Recording,然后单击“创建”

      enter image description here

    • 展开HTTP(S)测试脚本记录器,然后单击“开始”

      enter image description here

  2. 准备邮递员进行记录。

    • 从邮递员的“首选项”对话框中,选择Proxy标签
    • 使用localhost作为代理主机,使用8888作为代理端口

      enter image description here

  3. 在邮递员中运行您的请求
  4. JMeter应该在headers下捕获它(以及相关的Recording Controller
  5. JMeter中的重播请求-您现在应该获得相同的响应。

答案 1 :(得分:-1)

与许多其他编程语言不同,JavaScript Numbers are always 64-bit floating point和JSON是JavaScript Object Notation,因此JS的3030.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的完整详细信息,请参阅: