Robot Framework 的数据驱动场景
Data driven scenario for Robot Framework
我想在变量文件中设置用户名和密码,随着测试步骤遍历每个用户名,它会前进到下一行数据。
我正在使用资源文件来驱动数据,我的初始 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 语句,但不反对改变获取数据和使用多维数组或类似方法的策略如果效果更好。
我认为你对单个测试用例和多个测试用例有误解。你上面的内容将输入一个用户名,然后它将循环输入一个密码,提交并注销。只有当你碰巧在下一页有相同的元素时,它才会尝试输入另一个密码。
我建议看这里:http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#data-driven-style
也看看一些类似的问题,你需要提供一个测试模板,我的建议是当你有两个测试用例时担心稍后循环。
可以通过 'Data Driven through Test Template' 或从 Excel 或 csv.
读取数据来实现数据驱动测试
'Data Driven through Test Template'
在此我们将创建一个用户定义的关键字,它只是我们想要多次执行的函数或源代码。
我们在 Settings
部分声明为 'Test Template'
。
当我们给 TestCase name with 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}
'Data driven by read from Excel'
多次读取 Excel sheet 和 运行 的值,
这里是示例代码
*** 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
我想在变量文件中设置用户名和密码,随着测试步骤遍历每个用户名,它会前进到下一行数据。
我正在使用资源文件来驱动数据,我的初始 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 语句,但不反对改变获取数据和使用多维数组或类似方法的策略如果效果更好。
我认为你对单个测试用例和多个测试用例有误解。你上面的内容将输入一个用户名,然后它将循环输入一个密码,提交并注销。只有当你碰巧在下一页有相同的元素时,它才会尝试输入另一个密码。
我建议看这里:http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#data-driven-style
也看看一些类似的问题,你需要提供一个测试模板,我的建议是当你有两个测试用例时担心稍后循环。
可以通过 'Data Driven through Test Template' 或从 Excel 或 csv.
读取数据来实现数据驱动测试'Data Driven through Test Template'
在此我们将创建一个用户定义的关键字,它只是我们想要多次执行的函数或源代码。
我们在 Settings
部分声明为 'Test Template'
。
当我们给 TestCase name with 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}
'Data driven by read from Excel'
多次读取 Excel sheet 和 运行 的值,
这里是示例代码
*** 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