JMeter Если условие контроллера не достигнуто?

Я пытаюсь создать тест под механизмом авторизации на основе токенов. Все почти нормально работает, пока не истечет срок доступа. Затем я пытаюсь обновить его, но кажется, что часть теста не выполнена.

Это авторизация танца:

     foreach user в users.csv:
     {
         Получить код авторизации: Http sampleler
         Извлечь AuthzCode из $ {authorizationcode}: экстрактор JSON
         if ${JMeterThread.last_sample_ok}
         {
             Получить токен доступа: Http-сэмплер
             Извлечь Access Token из $ {accesstoken}: экстрактор JSON
             Извлечь RefreshToken в $ {refreshtoken}: экстрактор JSON
             if ${JMeterThread.last_sample_ok}
             {
                 foreach данные в data.csv
                 {
                     Отправка данных в теле: Http sampleler
                     if ${JMeterThread.last_sample_ok} == false *******************
                     {
                         Извлечь ошибку в $ {expiredaccesstokenerror}: экстрактор JSON
                         if (${expiredaccesstokenerror} == "expired_accesstoken")
                         {
                             Получить новый accessToken с помощью $ {refreshtoken}: запрос Http
                             Извлечь Access Token из $ {accesstoken}: экстрактор JSON
                             Извлечь RefreshToken в $ {refreshtoken}: экстрактор JSON
                         }
                     }
                 }
             }
         }
     }
    

Все работает нормально, пока не истечет Access Token и сервер не вернет мне это тело:

{
    "error_description":"Access token expired",
    "suberror":"expired_accesstoken",
    "error":"invalid_grant"
}

После этого я ожидаю, что JMeter достигнет внутренней части if controller с ${JMeterThread.last_sample_ok} == false а затем следующий if controller с условием ${expiredaccesstokenerror} == "expired_accesstoken", Однако я не могу понять, почему этот код не достигнут.

Как вы можете видеть на следующем рисунке, я реализовал этот процесс в JMeter следующим образом:

1 ответ

Измените ваше второе условие на:

"${expiredaccesstokenerror}" == "expired_accesstoken"

Кавычки разума вокруг переменной. Если условия Контроллера оцениваются механизмом JavaScript (Rhino или Nashorn) и если вы сравниваете что-то со строкой, вы получите исключение "blabla is notfined". Когда было около 2 булевых типов (${JMeterThread.last_sample_ok} а также false) - это было нормально, но если вы хотите сравнить переменную JMeter с какой-либо строкой - вам нужно явно преобразовать переменную в строку. Посмотрите, Как Использовать 'IF' Контроллер JMeter и получите статью Пирога для получения дополнительной информации.

Еще несколько советов:

  • В любой ситуации, когда тест JMeter не работает должным образом, загляните в файл jmeter.log
  • Если файл jmeter.log не содержит ничего подозрительного - воспользуйтесь комбинацией прослушивателя Debug Sampler и View Results Tree.
Другие вопросы по тегам