《我的RobotFramework书》1-6-1 创建变量, Creating Variables

来源:互联网 发布:网络运营可以自学吗 编辑:程序博客网 时间:2024/06/07 14:48

创建变量, Creating Variables

作者: 虞科敏

有以下途径可以创建变量:

  • 通过Vairable Table
  • 在Vairable File中定义
  • 使用命令行选项
  • 来自关键字的返回值
  • 使用内建关键字设置

变量表, Variable Table

最常见的创建变量的地方,就是在Test Case File和Resource File中的Variable Table中。
在Variable Table中创建变量有诸多好处: 和其他测试数据在同一个地方,语法也非常简单; 不足在于变量值可能只能为字符串,并且不能动态创建。

Tips: 如果需要克服此问题,可以考虑Variable File

创建scalar变量

样例1
如果第2列为空,那么空字符串被赋值给变量

Variables 
${NAME} Robot Framework
${VERSION} 2.0
${ROBOT} ${NAME} ${VERSION}
${ZERO}

样例2
也支持中间添加"="的语法,但这不是强制要求的

Variables 
${NAME} = Robot Framework
${VERSION} = 2.0

样例3
如果值太长,可以分为多行和多列
多行和多列会被框架合并起来
缺省的,合并中间会使用空格(等效于" ".join()),也可以通过在第一个cell中使用SEPARATOR=来改变连接字符

Variables 
${EXAMPLE} This value is joined together with a space
${MULTILINE} SEPARATOR=\n First line
... Second line Third line

创建list变量

样例1
值从第2列开始
也支持空值,list作为元素,多行等语法
列表的下标从0开始

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:Qquotesand_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"使用返回值设置本地变量

0 0