Почтальон возвращает целочисленное значение, тогда как JMeter возвращает double для одного и того же вызова API - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть 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 голосов
/ 04 февраля 2019

Если у вас разные ответы, я ожидаю, что вы отправляете разные запросы.Убедитесь, что запросы, отправленные JMeter и Postman, одинаковы, вы можете захватывать и сравнивать их с помощью инструмента анализатора, например Wireshark или Fiddler .

Как только вы выясните, в чем разница, вы должны изменить конфигурацию JMeter, чтобы запрос выглядел точно так же.

Если у вас возникли проблемы со сравнением запросов, вы даже можете записать запрос, исходящий от Почтальона, с помощью HTTP (S) Test Scor Recorder JMeter .

  1. Подготовьте JMeter к записи.Самый быстрый и простой способ - использовать функцию JMeter Templates .

    • В главном меню JMeter выберите File -> Templates -> Recording и нажмите «Создать»

      enter image description here

    • Разверните HTTP (S) Test Script Recorder и нажмите «Пуск»

      enter image description here

  2. Подготовка почтальонадля записи.

    • В диалоговом окне «Предпочтения» Почтальона выберите Proxy tab
    • Используйте localhost в качестве хоста прокси и 8888 в качестве порта прокси

      enter image description here

  3. Запустите ваш запрос в Почтальоне
  4. JMeter должен перехватить его (вместе со связанными заголовками ) под Recording Controller
  5. Воспроизвести запрос в JMeter - вы должны получить тот же ответ сейчас.
0 голосов
/ 01 февраля 2019

В отличие от многих других языков программирования, Числа JavaScript всегда представляют собой 64-разрядные числа с плавающей запятой , а JSON - Обозначение объекта JavaScript , поэтому между 30 и 30.0 нет никакой разницыдля JS.

Для анализа JSON с JMeter вам необходимо добавить JSON Extractor в ваш план тестирования.Чтобы получить value из вышеуказанного JSON:

{
    "value": 30.0
}

в поле выражений JSON Path, мы можем вставить этот путь JSON $.value

В конце концов, вы можете преобразовать ваш float вцелое число, используя BeanShell :
1. Добавьте BeanShell Sampler после вашего HTTP-запроса с JSON Extractor.
2. Скопируйте этот код в BeanShell Script:

//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, пожалуйста, смотрите:

...