#robotframework
#robotframework
Вопрос:
Я полный новичок, когда дело доходит до фреймворка робота, мои извинения, если это глупый вопрос.
Итак, у меня есть определяемое пользователем ключевое слово здесь:
GET call to an API
[Arguments] ${user_uuid} ${country_uuid} ${http_status_code}
${json_date_uuid} = Set Variable $.date
#code here#
${response} = Trigger GET ${HTTP_SERVER} ${APP_UUID} ${PRI_KEY} ${get_endpoint} ${secs_headers} ${no_query_param}
Log Endpoint GET Result:
Log ${response.status_code}
Log ${response.content}
Теперь я пытаюсь выполнить проверку, чтобы проверить response.status_code
, возвращает ли он 200 или 404.
Если это 200, я хочу, чтобы он выполнил следующие шаги:
Should Be Equal As Strings ${response.status_code} ${status_code}
${milestone_definition} = Retrieve Json Value ${response.content} ${json_date_uuid}
List Should Contain Value ${value} 12345
Если это 404, я хочу, чтобы он запускал следующее:
Should Be Equal As Strings ${response.status_code} ${status_code}
Итак, я попробовал следующее, где я определил шаги как ключевые слова под ключевым словом GET call для API и вызывал их с помощью IF / ELSE IF, но безрезультатно:
GET call to an API
[Arguments] ${user_uuid} ${country_uuid} ${http_status_code}
${json_date_uuid} = Set Variable $.date
#code here#
${response} = Trigger GET ${HTTP_SERVER} ${APP_UUID} ${PRI_KEY} ${get_endpoint}
${secs_headers} ${no_query_param}
Log Endpoint GET Result:
Log ${response.status_code}
Log ${response.content}
Run Keyword If ${response.status_code} == 200 GET SEC Success Validation ELSE IF ${response.status_code} == 404 GET SEC Failure Validation
#Validation
GET SEC Success Validation
Should Be Equal As Strings ${response.status_code} ${status_code}
${milestone_definition} = Retrieve Json Value ${response.content} ${json_date_uuid}
List Should Contain Value ${value} 12345
GET SEC Failure Validation GET
Should Be Equal As Strings ${response.status_code} ${status_code}
К сожалению, при запуске команды возвращается следующая ошибка:
Ключевое слово ‘API_Keywords.ПОЛУЧИТЕ подтверждение успеха SEC’ ожидалось 0 аргументов, получено 2.
Любые советы или руководства о том, как я могу этого добиться, пожалуйста?
Ответ №1:
Вы можете создать простую if, else if, else
структуру, используя ключевое слово Run If. В документации по ключевому слову даже есть пример для такого варианта использования.
${var1}= Run Keyword If ${rc} == 0 Some keyword returning a value ... ELSE IF 0 < ${rc} < 42 Another keyword ... ELSE IF ${rc} < 0 Another keyword with args ${rc} arg2 ... ELSE Final keyword to handle abnormal cases ${rc}
Начиная с Robot Framework 4.0, можно использовать новый IF/ELSE IF/ELSE
синтаксис.
IF ${rc} == 0
${var1}= Some keyword returning a value
ELSE IF 0 < ${rc} < 42
${var1}= Another keyword
ELSE IF ${rc} < 0
${var1}= Another keyword with args ${rc} arg2
ELSE
${var1}= Final keyword to handle abnormal cases ${rc}
END
Ответ №2:
Вы допустили ошибку
Run Keyword If ${response.status_code} == 200 GET SEC Success Validation ELSE IF
${response.status_code} == 404 GET SEC Failure Validation
Это должно делать то, что вы хотите. (в одной строке с двойным пробелом между «IF» и «${response.status_code}» -sry двойные пробелы переносят его в новую строку)
Иногда возникают проблемы с функцией ELSE / IF, поэтому альтернативу, которую вы можете использовать:
Run Keyword If ${response.status_code} == 200 GET SEC Success Validation
Run Keyword If ${response.status_code} == 404 GET SEC Failure Validation
Это должно гарантировать правильное выполнение вашего кода
Для получения дополнительной информации проверьте встроенную библиотеку
Если вам нужно передать переменные из одного ключевого слова в другое, есть два способа:
-
Используйте глобальные переменные (не рекомендуется)
Suite Setup Set Suite/Global/Local Variable name value
-
Передайте необходимые переменные в качестве аргументов
Run Keyword If ${response.status_code} == 200 GET SEC Success Validation ${arg1.1} ${arg1.2}
GET SEC Success Validation
[Arguments] ${arg1.1} ${arg1.2}
Run Keyword If ${response.status_code} == 404 GET SEC Failure Validation ${arg2.1} ${arg2.2}
GET SEC Failure Validation GET
[Arguments] ${arg2.1} ${arg2.2}
Я надеюсь, вы это понимаете. Напишите команду, если у вас есть еще вопросы или я что-то не понял
Комментарии:
1. Спасибо! Хотя передача переменных в качестве аргументов не сработала (возможно, я что-то сделал неправильно, но использование Set Test Variable выполнило свою работу.
2. Рад слышать, что я мог бы вам помочь. Если вы хотите, мы можем выяснить, почему передача аргументов не сработала.
Ответ №3:
Не проверяя документацию (я подозреваю, что другого IF нет), вот мое предложение:
Run Keyword If ${response.status_code} == 200 GET SEC Success Validation ELSE Run Keyword If ${response.status_code} == 404 GET SEC Failure Validation
или
Run Keyword If ${response.status_code} == 200 GET SEC Success Validation
Run Keyword If ${response.status_code} == 404 GET SEC Failure Validation
или
Run Keyword If ${response.status_code} == 200 GET SEC Success Validation
Run Keyword Unless ${response.status_code} == 200 Run Keyword If ${response.status_code} == 404 GET SEC Failure Validation
Комментарии:
1. Спасибо! Я думаю, что 2-й вариант, который вы предложили, сработал, но я все еще получаю так много ошибок, чтобы знать правильно (по крайней мере, сообщение об ошибке теперь другое). Возможно, мне также было неясно в моем первоначальном вопросе, но помимо инструкции if / else, я также хотел понять, как я мог бы получить переменные из ключевого слова ‘GET call to an API’ и использовать их в ‘GET SEC Success Validation’ и ‘GET SEC Success Validation’ ключевое слово также.