作者: 虞科敏
测试用例在test case table中创建,使用各种合法可用的关键字。
关键字的来源: 从test libraries或者resource file中导入; 在用例文件自身的keyword table中创建。
样例
*** Test Cases ***
Valid LoginOpen Login Page
Input Username demo
Input Password mode
Submit Credentials
Welcome Page Should Be OpenSetting Variables
Do Something first argument second argument
${value} = Get Some Value
Should Be Equal ${value} Expected value
Force Tags, Default Tags
Test Setup, Test Teardown
Test Template
Test Timeout
样例
*** Test Cases ***
Test With Settings[Documentation] Another dummy test
[Tags] dummy owner-johndoe
Log Hello, world!
关键字的参数,可以类比Python参数来理解,实际上其实现即为Python语言实现,难怪行为也如此相似。 在关键字的文档中也会用类似语法说明出来。 使用Python的同学理解RF中关键字的参数,对比Python的相关行为很容易理解。 将关键字参数和python中的参数进行对比如下。
=> 类比python的位置参数,positional arg
*** Test Cases ***
ExampleCreate Directory ${TEMPDIR}/stuff
Copy File ${CURDIR}/file.txt ${TEMPDIR}/stuff
No Operation
=> 类比python的默认参数 (arg=value)
*** Test Cases ***
ExampleCreate File ${TEMPDIR}/empty.txt
Create File ${TEMPDIR}/utf-8.txt Hyvä esimerkki
Create File ${TEMPDIR}/iso-8859-1.txt Hyvä esimerkki ISO-8859-1
=> 类比python的非关键字可变长参数(元组) (*arg)
*** Test Cases ***
ExampleRemove Files ${TEMPDIR}/f1.txt ${TEMPDIR}/f2.txt ${TEMPDIR}/f3.txt
@{paths} = Join Paths ${TEMPDIR} f1.txt f2.txt f3.txt f4.txt
=> 类比python的关键字参数,可以直接指定参数名来进行赋值
样例1 正常使用举例
*** Settings ***
Library Telnet prompt=$ defaultloglevel=DEBUG*** Test Cases ***
ExampleOpen connection 10.0.0.42 port=${PORT} alias=example
List files options=-lh
List files path=/tmp options=-l*** Keywords ***
List files[Arguments] ${path}=. ${options}=
List files options=-lh
Execute command ls ${options} ${path}
样例2 特别举例
*** Test Cases ***
ExampleRun Program shell=True # This will not come as a named argument to Run Process!
Log foo\=quux # this will get the value "foo=quux"*** Keywords ***
Run Program[Arguments] @{args}
Run Process program.py @{args} # Named arguments are not recognized from inside @{args}!
=> 类比python的关键字可变长参数(字典) (**arg),其会收集所有使用name=value语法,并且不匹配任何其他类型参数的内容作为kwargs
样例1
Run Process关键字(来自Process库), signature: command, *arguments, **configuration
command: 将执行的命令, its arguments as variable number of arguments (
*arguments: 可变长参数
**configuration: 自由参数
*** Test Cases ***
Using KwargsRun Process program.py arg1 arg2 cwd=/home/user
Run Process program.py argument shell=True env=${ENVIRON}
样例2
对Run Process关键字的包裹Run Program
*** Test Cases ***
Using KwargsRun Program arg1 arg2 cwd=/home/user
Run Program argument shell=True env=${ENVIRON}*** Keywords ***
Run Program[Arguments] @{arguments} &{configuration}
Run Process program.py @{arguments} &{configuration}
直接使用fails关键字,可以让用例失败: 然后执行test teardown,然后执行下一个用例
使用continuable failures关键字,如果不希望停止用例执行
失败消息: 在fails关键字中可以直接指定失败消息内容,有些关键字也可以指定失败消息内容
样例
*** Test Cases ***
Normal ErrorFail This is a rather boring example...
HTML Error
${number} = Get Number
Should Be Equal ${number} 42 HTML Number is not my MAGIC number.
直接阅读样例理解即可,不作过多说明
样例
*** Test Cases ***
Simple[Documentation] Simple documentation
No OperationFormatting
[Documentation] This is bold, this is italic and here is a link: http://robotframework.org
No OperationVariables
[Documentation] Executed at ${HOST} by ${USER}
No OperationSplitting
[Documentation] This documentation is split into multiple columns
No OperationMany lines
[Documentation] Here we have
... an automatic newline
No Operation
标签用来分类用例,方便有选择的执行和查看。
标签会出现在报告,日志,统计信息中,提供用例的元数据信息。
使用标签,include和exclude可以容易选择用例,也方便指定关键用例Critical.
在测试文件中,本文件中的所有用例都将加上此标签
在suite的init文件中,所有的子suite中的用例都将加上此标签
没有Tags定义的用例将加上此标签
不支持suite的init文件
指定本测试用例的标签
同时,它会覆盖缺省标签
--settag
Set Tags
Remove Tags
Fail
Pass Execution
标签定义时候是自由无限制的; 但是标签有一个normalized过程,将转为全小写,并且移除空格,这个在阅读框架代码是可以看到。
标签可以使用变量来定义。
样例
*** Settings ***
Force Tags req-42
Default Tags owner-john smoke*** Variables ***
${HOST} 10.0.1.42*** Test Cases ***
No own tags[Documentation] This test has tags owner-john, smoke and req-42.
No OperationWith own tags
[Documentation] This test has tags notready, owner-mrx and req-42.
[Tags] owner-mrx notready
No OperationOwn tags with variables
[Documentation] This test has tags host-10.0.1.42 and req-42.
[Tags] host-${HOST}
No OperationEmpty own tags
[Documentation] This test has only tag req-42.
[Tags]
No OperationSet Tags and Remove Tags Keywords
[Documentation] This test has tags mytag and owner-john.
Set Tags mytag
Remove Tags smoke req-*
保留标签: RF的预留标签都使用"robot-"作为前缀,用户不要自己定义以此为前缀的标签。 当前,只有在正常停止测试执行时, "robot-exit"标签会被自动添加到测试用例。
Fixture: setup和teardown语义等同于其他测试框架中相似的部件,如果不清楚请自己阅读用户手册。
Fixture: setup和teardown中一般使用单个的关键字。 如果需要关注多个任务,也请创建高级的用户关键字来进行。 另外, 你也可以使用BuiltIn中Run Keywords关键字。
teardown的2点特别说明:
即时测试失败, teardown也会被执行, 这里是进行必行执行的clean-up活动的最佳地方
teardown中的关键字,就算其中某些关键字执行失败,其他关键字也会被执行。 这个行为也可以通过Continue on faliure系列关键字(比如,Run Keyword And Ignore Error, Run Keyword And Expect Error)来得到。
最方便指定setup和teardown的地方是测试文件的Setting Table中使用Test Setup和Test Teardown进行设置。 T 单独的测试用例, 也可以有它自己的[Setup]和[Teardown]。
样例
*** Settings ***
Test Setup Open Application App A
Test Teardown Close Application*** Test Cases ***
Default values[Documentation] Setup and teardown from setting table
Do SomethingOverridden setup
[Documentation] Own setup, teardown from setting table
[Setup] Open Application App B
Do SomethingNo teardown
[Documentation] Default setup, no teardown at all
Do Something
[Teardown]No teardown 2
[Documentation] Setup and teardown can be disabled also with special value NONE
Do Something
[Teardown] NONEUsing variables
[Documentation] Setup and teardown specified using variables
[Setup] ${SETUP}
Do Something
[Teardown] ${TEARDOWN}