用例逻辑相同,每次输入的数据不同,并且数据量很大的时候,这时候就要使用到数据驱动。
比如测试输入框的内容,页面上有很多输入框,在输入框中要输入很多次数据进行验证,负数、0、小数、整数、中文、英文、特殊字符及组合输入。
总不能说每个输入框、每次输入都写一个测试用例进行验证,通过复制粘贴去修改内容,多麻烦。这时候用上数据驱动,就会省事很多
在RF中,通过使用 [template]
用户关键字自发实现数据驱动
没有这种类型的例子进行很好的说明,依旧使用163邮箱登录进行举例验证
common.robot
*** Settings ***
Library SeleniumLibrary
*** Keywords ***
登录网易邮箱
[Arguments] ${账号} ${密码}
# 打开chrome浏览器访问163邮箱
open browser https://mail.163.com/ chrome
sleep 5
maximize browser window
# 切换到iframe
select frame xpath=//iframe[contains(@id,'iframe')]
# 用户名输入框中输入 用户名
sleep 2
input text xpath=//*[@name="email"] ${账号}
sleep 2
# 密码输入框中输入 密码
input text xpath=//*[@name="password"] ${密码}
sleep 2
# 点击登录按钮
click element xpath=//*[@id="dologin"]
sleep 10
关闭浏览器
close browser
[Template]
关键字后的内容是定义的用户关键字
,语法要求是后面接关键字
而此时用例的主体变成了要传递的参数的内容,对应的是${账号}
、${密码}
(编辑器会识别不了该语法,因为第一个参数不是关键字,会报红,但运行是不会报错的)
test.robot
*** Settings ***
Library SeleniumLibrary
Resource common.robot
*** Test Cases ***
网易邮箱
[Template] 登录网易邮箱
用户名1 密码1
用户名2 密码2
注意,此时用例主体就不能再有其他关键字内容了,因为都变成了默认对应的参数${账号}
、${密码}
,如果还有其他关键字内容,会被当成是对应的参数进行传递,或者参数不对应,产生报错
test.robot
*** Settings ***
Library SeleniumLibrary
Resource common.robot
*** Test Cases ***
网易邮箱
[Template] 登录网易邮箱
用户名1 密码1
用户名2 密码2
sleep 10
log 账号密码输入正确 登录成功
此时 sleep
和 log
都不被当成关键字了,而是当成是参数传递,因为 log
一行相当于有3个参数,所以会产生报错
RF中的数据驱动没有python中来的方便,RF中没有关键字去读取excel中的数据,如果要在RF中使用比较复杂的数据驱动功能,还是推荐写成python模块,然后再进行引用