Фреймворк робота: IF / ELSE — использование ключевого слова внутри другого ключевого слова

#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
  

Это должно гарантировать правильное выполнение вашего кода
Для получения дополнительной информации проверьте встроенную библиотеку

Если вам нужно передать переменные из одного ключевого слова в другое, есть два способа:

  1. Используйте глобальные переменные (не рекомендуется)

    Suite Setup Set Suite/Global/Local Variable name value

  2. Передайте необходимые переменные в качестве аргументов

 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’ ключевое слово также.