#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 / является аналогом).).