RobotFramework: подключение с помощью цикла FOR

#python-3.x #python-2.7 #automated-tests #robotframework

#python-3.x #python-2.7 #автоматизированные тесты #robotframework

Вопрос:

Я довольно новичок в использовании RobotFramework и пытаюсь отформатировать строку с помощью Catenate, задаваясь вопросом, могу ли я использовать цикл FOR при форматировании строки, и приведенный ниже формат правильный? Любое предложение было бы действительно оценено, спасибо!!!

 ${data}=    Catenate
...    {
...    "email_address": "${NewUserEmailID}",
...    "user_name": "${UserName}",
...    "roles": [
...    :FOR    ${roleId}, ${catID}, ${subcatID}    IN    @{role_id_list}, @{category_id_list}, @{subCat_id_list}
...    /    {
...    /    "role_id": ${roleId},
...    /    "categories": [{ "category_id": "${catID}" }],
...    /    "subcats":[{ "sub_category_id": "${subcatID}" }]
...    /    },
...    ],
...    "line_manager": "${LineManageID}",
...    "guest_user": ${GuestUser},
...    "guest_invitation_text":    "Invitation Text",
...    "guest_redirect_url":    "http://www.example.com/guest",
...    "organization_id":    1
...    }
  

Комментарии:

1. Вы пробовали его запускать? 😉 Нет, по крайней мере, не так, как вы надеетесь, что он будет выполняться — цикл не будет выполняться, вы просто получите конечную строку, содержащую «:FOR», «@{role_id_list}» и т.д. В нем.

2. Для этого вам следует реализовать специальное ключевое слово catenate на чистом python.

Ответ №1:

интересно, могу ли я использовать цикл FOR при форматировании строки

Нет, в смысле выполнения цикла и добавления значений каждой итерации к Catenate цели. Что произойдет, так это то, что в конечном итоге вы получите конечную строку, содержащую «:FOR», «@{role_id_list}» и т.д. В ней.

Но достичь желаемого не так уж сложно — просто создайте цикл, который создаст промежуточную строку и добавит это в Catenate . Вот так:

 ${roles array}=    Set Variable    ${EMPTY}    # initialize an empty string variable

:FOR    ${roleId}    ${catID}    ${subcatID}    IN ZIP    ${role_id_list}    ${category_id_list}    ${subCat_id_list}
/    ${roles array}=    Set Variable    ${roles array}{  # you append the target string to the end of the current value of the variable
/    ${roles array}=    Set Variable    ${roles array}"role_id": ${roleId},
/    ${roles array}=    Set Variable    ${roles array}"categories": [{ "category_id": "${catID}" }],
/    ${roles array}=    Set Variable    ${roles array}"subcats":[{ "sub_category_id": "${subcatID}" }]
/    ${roles array}=    Set Variable    ${roles array}},

# and now use it inside the Catenate
${data}=    Catenate
...    {
...    "email_address": "${NewUserEmailID}",
...    "user_name": "${UserName}",
...    "roles": [ ${roles array}
...    ],
...    "line_manager": "${LineManageID}",
...    "guest_user": ${GuestUser},
...    "guest_invitation_text":    "Invitation Text",
...    "guest_redirect_url":    "http://www.example.com/guest",
...    "organization_id":    1
...    }
  

Как вы заметили, синтаксис для перебора более чем одного списка немного отличается — нужно использовать IN ZIP (который происходит из zip() функции python / является аналогом).).