在Robot框架中跨测试套件设置会话cookie

时间:2017-09-08 10:26:03

标签: python robotframework

我的应用是RESTful API,仅在会话cookie存在时才有效。 不幸的是,我总是需要通过网络登录进行身份验证才能获取Cookie并将会话Cookie 传递给API以建立会话。

我能够找出验证的解决方案并将会话cookie传递给API并使用机器人框架编写测试用例。直到这里的所有内容都可以在单个测试套件文件中正常工作。

articles-config.py

ARTICLE_PREPROD = 'http://10.122.123.124:3001'
ARTICLE_CREATION_UI_API = '/api/articles/create'
ARTICLE_UPDATE_UI_API = '/api/articles/update'

会话cookie.robot

*** Settings ***
Documentation    Suite description
Library  Selenium2Library


*** Keywords ***

Get Authn Session
    [Arguments]     ${url}  ${username}    ${password}
    [Documentation]  Login using Authn
    Open browser  ${url}  chrome
    Input Text   id=j_username    ${username}
    Input Password  id=j_password  ${password}
    Click Element  name=submit
    ${cookie_value}     Get Cookie Value    SESSION
    [Teardown]    Close Browser
    ${session_cookie}  Create Dictionary   SESSION=${cookie_value}
    Set Suite Variable  ${SESSION_COOKIE}   ${session_cookie}
    [Return]  ${session_cookie}

物品create.robot

*** Settings ***
Documentation    Suite description
Test Teardown

Library  Collections
Library  RequestsLibrary
Library  json

Resource  ../keywords/session-cookie.robot
Variables  ../variables/articlesCreationData.py
Variables  ../articles-config.py
Suite Setup  Get Authn Session  ${ARTICLE_PREPROD}  username    password


*** Test Cases ***
Article creation API
    [Tags]    ArticleCreation    
    Article creation from UI

Artcile2 creation API
    [Tags]    ArticleCreation
    Article2 creation from UI    

*** Keywords ***
Article creation from UI
    [Documentation]  Creating Article
    Create Session  articleCreate  ${ARTICLE_PREPROD}  cookies=${SESSION_COOKIE}
    ${headers}  Create Dictionary  Content-Type=application/json
    ${response}  Post Request  articleCreate  ${ARTICLE_CREATION_UI_API}  data=${ARTICLE_CREATE}  headers=${headers}
    log  ${response.text}


Article2 creation from UI
    [Arguments]
    [Documentation]  Creating Article
    Create Session  articleCreate  ${ARTICLE_PREPROD}  cookies=${SESSION_COOKIE}
    ${headers}  Create Dictionary  Content-Type=application/json
    ${response}  Post Request  articleCreate  ${ARTICLE_CREATION_UI_API}  data=${ARTICLE_CREATE}  headers=${headers}
    log  ${response.text}

我的问题是如何确保 SESSION_COOKIE 可用于机器人文件中的所有测试套件。

例如,如果我有另一个名为 update-article.robot 的测试套件文件。如何将SESSION_COOKIE传递给 / api / articles / update API。请让我知道测试经过身份验证的API的更好方法。

我是否需要将cookie存储在sqlite db中,或者将其保存在yml文件中或更好的方法中,或者我做错了什么。

解决方案:

__初始化__。机器人

*** Settings ***

Documentation    Suite description

Resource  ../keywords/session-cookie.robot

Variables  ../articles-config.py

Suite Setup  Get Authn Session  ${ARTICLE_PREPROD}  username    password

1 个答案:

答案 0 :(得分:3)

您可以使用Set Global Variable关键字。这将在全局范围内设置您的变量,并使其在每个套件和测试用例之后可用。