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.