*** Variables ***
@{NAMES} Matti Teppo
@{NAMES2} @{NAMES} Seppo
@{NOTHING}
@{MANY} one two three four
... five six seven
创建dict变量
创建dict变量的语法: "name=value" 或者 已有的Dict变量赋值给新变量
同样key的value,后出现的覆盖先出现的
如果key或value中存在"=",需要进行转义"\="
样例
访问元素的语法(使用Python的同学一定不会陌生): ${VAR.key} 或者 &{USER}[name]
&{MANY}[${3}] 不等价于 ${MANY.3}
字典的key是有顺序的,按照其被定义的顺序
字典按照列表的语法进行使用,实际使用的是字典的key集合: @{MANY}变量 == ['first', 'second', 3]
*** Variables ***
&{USER 1} name=Matti address=xxx phone=123
&{USER 2} name=Teppo address=yyy phone=456
&{MANY} first=1 second=${2} ${3}=third
&{EVEN MORE} &{MANY} first=override empty=
... =empty key\=here=value
变量文件, Vairable Files
变量文件支持各种变量的创建: 任何对象被指派给变量; 动态创建变量等
变量文件典型使用Python模块来实现
更多关于变量文件的介绍,请参考下一个章节。
命令行, Command Line Option
命令行选项可以设置变量:
单个设置变量: --variable (-v)
使用Variable File: --variablefile (-V)
Tips: --variable (-v) 优先于 --variablefile (-V)
通过命令行设置的变量,对于所有测试执行是全局可用的。
它们会覆盖通过Variable Table创建或者导入的Variable File创建的同名变量。
样例1
语法: --variable name:value
只能设置scalar变量,值只能为字符串
可以使用--escape对字符进行转义
以下样例的结果如下:
${EXAMPLE} 值: value
${HOST} 和 ${USER} 值分别为: localhost:7272 和 robot
${ESCAPED} 值: "quotes and spaces"
--variable EXAMPLE:value
--variable HOST:localhost:7272 --variable USER:robot
--variable ESCAPED:Qquotes_and_spacesQ --escape quot:Q --escape space:_
返回值, Return Value from Keyword
关键字返回值可以被赋值给变量。这个变量又可以被传递给其他关键字。 这样实现不同关键字之间的相互通信。
这种变量的设置和使用,和其他方式创建的变量是一样的。只是这种变量的作用域范围只局限在它们被创建的局部作用域。即在一个Test Case里创建的变量,不能在另一个Test Case中被使用。
scalar变量的赋值
样例1
"="不是强制要求的。
这种创建变量的方式,在定义用户关键字时也是一样的。
*** Test Cases ***
Returning
${x} = Get X an argument
Log We got ${x}!
样例2
尽管被赋值给scalar变量,但是,如果数据为list-like的,那么你可以将其按照list变量进行使用。
同样地,如果数据为dict-like的,也可以将其按照dict变量进行使用。
*** Test Cases ***
Example
${list} = Create List first second third
Length Should Be ${list} 3
Log Many @{list}
list变量的赋值
样例
如果关键字返回值为list或者list-like的值,可以将其赋值给list变量。
*** Test Cases ***
Example
@{list} = Create List first second third
Length Should Be ${list} 3
Log Many @{list}
因为所有的变量都被存储在同一个名字空间(namespace), 值被赋值给scalar变量或者list变量实际上是没有太大区别。
区别在于:
当创建一个list变量时,RF框架会验证值是否为list或list-like的,存储的值将会是从返回值创建的新的list对象。
当创建一个scalar变量时,RF框架不会进行任何验证,返回的值将会原样被存储起来。
dict变量的赋值
样例
如果关键字返回值为dict或者dict-like的值,可以将其赋值给dict变量。
*** Test Cases ***
Example
&{dict} = Create Dictionary first=1 second=${2} ${3}=third
Length Should Be ${dict} 3
Do Something &{dict}
Log ${dict.first}
因为所有的变量都被存储在同一个名字空间(namespace), 值被赋值给scalar变量,之后又按照dict变量来进行使用,这样做也是可以的。
但赋值给dict变量有这些好处:
RF框架会像验证list变量一样,执行dict变量的相应验证。
RF框架会将值转换为特殊的dict: 可排序的; 可以使用语法${dict.first}访问单个元素。
多个变量的同时赋值
如果关键字返回值为list或list-like的对象,可以将单个值赋值给不同的scalar变量,或者scalar变量+list变量。
样例
假设关键字"Get Three"返回[1, 2, 3], 创建的变量和值如下情况:
${a}, ${b}, ${c} 值分别为: 1, 2, 3
${first} 值: 1, @{rest} 值: [2, 3]
@{before} 值: [1, 2], ${last} 值: 3
${begin} 值: 1, @{middle} 值: [2], ${end} 值: 3
*** Test Cases ***
Assign Multiple
${a} ${b} ${c} = Get Three
${first} @{rest} = Get Three
@{before} ${last} = Get Three
${begin} @{middle} ${end} = Get Three
内建变量设置关键字, Set Test/Suite/Global Variable
内建变量设置关键字,可以在用例执行期间动态设置关键字
如果变量已经存在,值将会被覆盖;
如果变量不存在,新变量会被创建
Set Test Variable
作用域: 当前测试用例中
Set Suite Variable
作用域: 和测试文件中Variable Table或者从Variable File导入等效;
其他Suite, 包括子Suite, 不可见
Set Global Variable
作用域: 设置后的所有用例和Suite都可见;
和--variable 或 --variablefile等效
关键字"Set Xxx Variable"直接设置变量到相应的作用域,没有返回值
关键字"Set Variable"使用返回值设置本地变量