【问题标题】:Data driven scenario for Robot FrameworkRobot Framework 的数据驱动场景
【发布时间】:2017-05-08 09:38:13
【问题描述】:

我想在变量文件中设置用户名和密码,当测试通过每个用户名时,它会前进到下一行数据。

我正在使用资源文件来驱动数据,我的初始 FOR 脚本处理用户名 1 (eeny),然后嵌套的 FOR 循环一次传递所有密码。

*** Variables  ***
@{users}  eeny  meeny  miny  moe
@{pwds}  pwd  pwd1  pwd2  pwd3

*** Test Cases ***

Login Test
    :FOR    ${u}    IN    @{users}
    \   Open Browser  ${URL}
    \   set window size  1440  900
    \   set selenium speed  .5
    \   input text  id=username  ${u}
    \   :FOR  ${p}  IN  @{pwds}
    \   \  input text  id=password  ${p}
    \   \  click button  css=button.primary
    \   \  wait until page contains  css=p.logout
    \   \  capture page screenshot
    \   \  click element  css=p.logout

目前我正在尝试嵌套 FOR 语句,或同时声明用户名和密码变量的 FOR 语句,但不反对更改获取数据的策略并使用多维数组或类似的方法效果更好。

【问题讨论】:

    标签: nested-loops robotframework


    【解决方案1】:

    我认为您对单个测试用例和多个测试用例有误解。您上面的内容将输入一个用户名,然后它将通过一个密码循环,提交和注销。只有当你碰巧在下一页有相同的元素时,它才会尝试输入另一个密码。

    我建议看看这里:http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#data-driven-style

    另外看看一些类似的问题,你需要提供一个测试模板,我的建议是当你让它在两个测试用例工作时担心循环。

    【讨论】:

      【解决方案2】:

      数据驱动测试可以通过“通过测试模板驱动的数据”或从 Excel 或 csv 读取数据来实现。

      “通过测试模板驱动的数据”
      在此我们将创建一个用户定义的关键字,它只是我们想要多次执行的函数或源代码。 我们在Settings 部分声明为'Test Template'
      当我们给 TestCase 名字加上 arguments 时,它每次都会执行Test Template
      这里是示例代码

      *** Settings ***
      Documentation     This Test Suite Deals with Data Driven Testing using Test Template Method
      Test Teardown     Close All Browsers
      Test Template     Validate Login with Differnt Valid Credentials
      
      *** Variables ***
      ${URL}            http://ururl
      ${Browser}        chrome
      ${Title}          HomePage
      ${delay}          5s
      
      *** Test Cases ***    USERNAME    PASSWORD
      Test User             user1       user1
      
      Admin User            admin       admin
      
      *** Keywords ***
      Validate Login with Differnt Valid Credentials
          [Arguments]    ${Uname}    ${Pwd}
          Open the Browser and enter the URL    ${URL}    ${Browser}
          Enter the User Name    ${Uname}
          Enter the Password    ${Pwd}
          Click on Submit button
          Verify HomePage displayed    ${Title}
      
      Open the Browser and enter the URL
          [Arguments]    ${URL}    ${Browser}
          Open Browser    ${URL}    ${Browser}
      
      Enter the User Name
          [Arguments]    ${UserName}
          Sleep    ${delay}
          Input Text    id=username    ${UserName}
      
      Enter the Password
          [Arguments]    ${Password}
          Input Text    id=password    ${Password}
      
      Click on Submit button
          Click Button    css=.btn.btn-primary
      
      Verify HomePage displayed
          [Arguments]    ${Title}
          Sleep    ${delay}
          Title Should Be    ${Title}
      

      '由 Excel 读取驱动的数据'
      从 Excel 工作表中读取值并多次运行,
      这里是示例代码

      *** Settings ***
      Documentation     CLM Registration Test Case
      Test Teardown     Close All Browsers
      Library           Selenium2Library
      Library           Collections
      Library           ExcelLibrary
      Library           String
      
      *** Variables ***
      ${delay}          2s
      ${excelName}      LoginTestData.xls
      ${rowCount}       ${EMPTY}
      ${cellCount}      ${EMPTY}
      ${URL}            http://Ur test Test URL
      ${Browser}        chrome
      
      *** Test Cases ***
      ReadFromExcelSheet
          Open Excel Sheet    ${excelName}
          @{sheetNames}    Get Sheet Names
          ${sheetName}    Set Variable    @{sheetNames}[0]
          ${rowCount}    Get Row Count    ${sheetName}
          ${cellCount}    Get Column Count    ${sheetName}
          #for loop to read all the rows in excel
          : FOR    ${rindex}    IN RANGE    1    ${rowCount}
          \    @{rowValues}    Create List
          \    @{rowValues}    Get Values    ${sheetName}    ${rindex}    ${cellCount}
          \    Log to console    row values are for index ${rindex} : @{rowValues}
          \    Sleep    ${delay}
          \    Open Browser    ${url} ${Browser}
          \    Enter User Name    @{rowValues}[0]
          \    Enter Password     @{rowValues}[1]
          \    Click on Submit Button
      
      *** Keywords ***
      Open Excel Sheet
          [Arguments]    ${excelName}
          Open Excel    ${excelName}    useTempDir=False
      
      Get Values
          [Arguments]    ${sName}    ${row}    ${cCount}
          Log to console    user is in Get Values function
          @{rValues}    Create List
          : FOR    ${cindex}    IN RANGE    0    ${cCount}
          \    Log to console    get the data from ${sName}[${cindex}][${row}]
          \    ${cellValue}    Read Cell Data By Coordinates    ${sName}    ${cindex}    ${row}
          \    Insert Into List    ${rValues}    ${cindex}    ${cellValue}
          [Return]    @{rValues}
      
      
      Open The Browser
             [Arguments]    ${url}    ${Browser}
             Open Browser   ${url}    ${Browser}
      
      Enter User Name    
             [Arguments]    username
             Input Text    id=username    username
      
      
      Enter Password     
             [Arguments]   password
             Input Password    id=password    password
      
      Click on Submit Button
             Click Button    css=.btn.btn-primary
      

      【讨论】:

      • 你为什么提到excel?
      • 因为我们可以从excel中读取数据并进行数据驱动测试,所以我提到了excel
      • 我们可以,但是问这个问题的人清楚地表明不需要这个?在某些情况下它当然很有价值,但我会小心不要混淆你试图帮助的人
      • 感谢你们两位的帮助 - 我能够从每个产品中提取部分内容并将它们迁移到一个有效的脚本中!
      猜你喜欢
      • 1970-01-01
      • 2019-04-03
      • 2014-04-14
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 2014-06-03
      • 2014-09-13
      相关资源
      最近更新 更多