robotframework笔记13
变量
介绍
变量是不可或缺的功能机器人框架,他们可以 在大多数地方用于测试数据。 通常,他们使用 参数测试用例表中的关键字和关键字表,但是 也都设置允许变量的值。 一个正常的字 的名字 不能 指定一个变量,但是 内装式 关键字 运行关键字 可以达到同样的效果。
机器人框架都有它自己的变量,可以使用 标量 , 列表 或 字典 使用语法 $ {标量}
, @ {列表}
和 & { DICT }
, 分别。 除此之外, 环境变量 可以使用 直接与语法 % { ENV_VAR }
。
变量是有用的,例如,在这种情况下:
- 当字符串经常更改的测试数据。 你只与变量 需要做出这些改变在一个地方。
- 在创建系统和操作系统独立测试 数据。 使用变量大大简化,而不是硬编码的字符串 (例如,
$ {资源}
而不是c:\资源
,或$ {主机}
而不是10.0.0.1:8080
)。 因为变量可以 设置的 命令行 测试开始时,变化的系统 变量是很容易的(例如,——主机变量:10.0.0.2:1234 ——可变资源:/ opt /资源
)。 这也促进了 本地化测试,它通常包括运行相同的测试 与不同的字符串。 - 当有需要对象以外的字符串作为参数 为关键词。 这是不可能的不变量。
- 当不同的关键字,甚至在不同的测试库,需要 沟通。 你可以分配一个返回值从一个关键字 变量并将它作为参数传递给另一个。
- 当测试数据中的值长或复杂。 为 的例子,
$ { URL }
短于http://long.domain.name:8080 /道路/ /服务? foo = 1就是= 2 zap = 42
。
如果使用一个不存在的变量的测试数据,使用关键字 它失败。 如果相同的语法,是用来作为一个变量是必须的 文字字符串,它必须 用反斜杠转义 就像在 \ $ {名称}
。
变量类型
不同的变量类型是在这一节中解释。 多变量 可以创建将在随后的章节中讨论。
机器人框架变量,同样作为关键字, 不区分大小写,空间和下划线 忽略了。 然而,推荐使用大写字母 全局变量(例如, $ { PATH }
或 $ { }两个词
) 和小写字母只能在特定的变量 测试用例或用户的关键字(例如, $ { var我}
或 $ { myVar }
)。 更重要的是,应该使用情况 保持一致。
变量名由变量类型标识符( 美元
, @
, &
, %
), 花括号( {
, }
)和实际括号之间的变量名。 与一些编程语言,语法相似的变量 使用花括号总是强制性的。 变量名可以 花括号之间的任何字符。 然而,仅使用字母 字符从a到z、数字、下划线和空间建议, 甚至使用的要求 扩展变量语法 。
标量变量
当使用标量变量的测试数据,它们取代了 他们被分配到的价值。 在标量变量 常用的简单字符串,您可以分配任何对象, 包括列表、。 例如,标量变量的语法 $ {名称}
大多数用户应该很熟悉,也用, 例如,在shell脚本和Perl编程语言。
下面的例子演示了使用标量变量。 假设 的变量 $ { }打招呼
和 $ {名称}
是可用的 和分配给字符串 helloworld
分别 这两个例子的测试用例是等价的。
*** Test Cases ***
Constants
Log Hello
Log Hello, world!!
Variables
Log ${GREET}
Log ${GREET}, ${NAME}!!
当一个标量变量作为唯一的价值在一个测试数据单元, 标量变量替换的值。 可能的值 任何对象。 当一个标量变量用于测试数据单元 其他(常数字符串或其他变量),它的价值是多少 首先转换为Unicode字符串,然后加任何 细胞。 转换成一个字符串的值意味着对象的 方法 __unicode__
(在Python中, __str__
作为后备) 或 toString
(在Java)。
请注意
没有转换当变量值按原样使用 将参数传递给关键字使用 命名参数 语法就像 argname = $ { var }
。
下面的例子演示了区别 变量在一个单元中单独或与其他内容。 首先,让我们假设 我们有一个变量 $ { STR }
将一个字符串 你好, 世界!
和 $ { OBJ }
设置为以下Java的一个实例 对象:
public class MyObj {
public String toString() {
return "Hi, tellus!";
}
}
与这两个变量集合,然后我们有以下测试数据:
*** Test Cases ***
Objects
KW 1 ${STR}
KW 2 ${OBJ}
KW 3 I said "${STR}"
KW 4 You said "${OBJ}"
最后,当执行这个测试数据,不同的关键字 参数说明如下:
- KW1 获得一个字符串
你好,世界!
- KW2 对象存储到变量中
$ { OBJ }
- KW3 获得一个字符串
我说:“你好,世界!”
- KW4 获得一个字符串
你说“HI TELLOUS!”
请注意
将变量转换为Unicode显然失败如果变量 不能被表示为Unicode。 这可能发生,例如, 如果您尝试使用字节序列作为关键字,这样的参数 你连接在一起的值 $ { byte1 } $ { byte2 }
。 解决方案是创建一个变量,它包含整个价值 和使用它的细胞(如。 $ {字节}
)因为 使用原有的价值。
变量列表
当一个变量被用作一个标量 $ { }例子
,它的价值 按原样使用。 如果一个变量值是一个列表或类似,这也是可能的 作为一个列表变量 @ {例子}
。 在这种情况下个人名单 项目分别作为参数传递进来。 这是最简单的解释 一个例子。 假设一个变量 @ { USER }
是有价值的 (“robot”、“秘密”)
, 以下两个测试用例是等价的:
*** Test Cases ***
Constants
Login robot secret
List Variable
Login @{USER}
机器人框架存储在一个内部存储,允许自己的变量 使用它们作为标量,列表或字典。 使用一个变量作为一个列表 需要Python列表或类似它的值对象。 机器人框架 不允许字符串用作列表,但是等iterable对象呢 元组或字典都接受。
机器人框架2.9之前,标量和列表变量是分开存储, 但它是可以使用变量作为标量和标量变量列表 列表。 这造成很多混乱时,意外是一个标量 变量和变量名称相同但不同的值列表。
使用列表变量与其他数据
可以使用列表变量与其他参数,包括 其他变量列表。
*** Test Cases ***
Example
Keyword @{LIST} more args
Keyword ${SCALAR} @{LIST} constant
Keyword @{LIST} @{ANOTHER} @{ONE MORE}
如果列表变量是用于细胞与其他数据(常量字符串或其他 变量),最终的值将包含一个字符串表示 变量的值。 最终的结果是这样使用时一模一样 变量是一个标量与其他数据位于相同的单元中。
访问单个列表项
可以访问一个特定值的变量列表的语法 @ {名称}(指数)
,在那里 指数
是选择的索引值。 指数 从0开始,负指标可以用来访问项目的结束, 和试图访问一个值太大索引会导致一个错误。 指数会自动转换为整数,还可以 使用变量指标。 可以使用列表项以这种方式访问 同样作为标量变量。
*** Test Cases ***
List Variable Item
Login @{USER}
Title Should Be Welcome @{USER}[0]!
Negative Index
Log @{LIST}[-1]
Index As Variable
Log @{LIST}[${INDEX}]
使用与设置变量列表
列表变量只可以使用的 设置 。 他们可以 用于导入库和变量的参数文件,但是 图书馆和变量本身不能的文件名列表 变量。 还设置和拆解列表变量不能被使用 关键字的名称,但可以用于参数。 与标记相关 他们可以自由设置。 使用标量变量是可能的 那些地方不支持变量列表。
*** Settings ***
Library ExampleLibrary @{LIB ARGS} # This works
Library ${LIBRARY} @{LIB ARGS} # This works
Library @{NAME AND ARGS} # This does not work
Suite Setup Some Keyword @{KW ARGS} # This works
Suite Setup ${KEYWORD} @{KW ARGS} # This works
Suite Setup @{KEYWORD} # This does not work
Default Tags @{TAGS} # This works
字典的变量
正如上面所讨论的,一个变量包含可以用来作为一个列表 列表 变量 通过列表项关键字作为单独的参数。 同样一个变量包含Python字典或类字典 对象可以用作字典变量 & {例子}
。 在实践中 这意味着个人字典传递的物品 命名参数 关键字。 假设一个变量 & { USER }
有 价值 {“名称”:“机器人”,“密码”:“秘密”}
,以下两个测试用例 是等价的。
*** Test Cases ***
Constants
Login name=robot password=secret
Dict Variable
Login &{USER}
字典变量新的机器人框架2.9。
使用字典变量与其他数据
可以使用字典与其他参数变量,包括 其他词典变量。 因为 命名参数的语法 要求的位置 参数命名参数之前,词典只能紧随其后 命名参数或其他字典。
*** Test Cases ***
Example
Keyword &{DICT} named=arg
Keyword positional @{LIST} &{DICT}
Keyword &{DICT} &{ANOTHER} &{ONE MORE}
如果字典中使用变量与其他数据(常量字符串或一个细胞 其他变量),最终的值将包含一个字符串表示 变量的值。 最终的结果是这样使用时一模一样 变量是一个标量与其他数据位于相同的单元中。
访问个人字典条目
可以访问某一个字典变量的值 与语法 & {名称}(例子)
,在那里 关键
的名称是什么 选择的值。 钥匙被认为是字符串,但把非string对象 钥匙可以作为变量。 字典项访问 方式可以使用同样的标量变量:
*** Test Cases ***
Dict Variable Item
Login &{USER}
Title Should Be Welcome &{USER}[name]!
Variable Key
Log Many &{DICT}[${KEY}] &{DICT}[${42}]
用字典变量设置
字典变量通常不能用于设置。 唯一的例外 是进口,设置和拆解,字典可以作为参数。
*** Settings ***
Library ExampleLibrary &{LIB ARGS}
Suite Setup Some Keyword &{KW ARGS} named=arg
环境变量
机器人框架允许使用环境变量在测试 数据使用语法 % { ENV_VAR_NAME }
。 他们是有限的字符串 值。
环境变量中设置操作系统在测试执行之前 可用时,就可以创建新的关键词 设置环境变量 或删除现有的 关键字 删除环境变量 ,两者都可用 操作 图书馆。 因为环境变量是全球性的, 环境变量中设置一个测试用例可以用于其他测试 用例执行。 然而,更改环境变量 没有有效的测试执行。
*** Test Cases ***
Env Variables
Log Current user: %{USER}
Run %{JAVA_HOME}${/}javac
Java系统属性
当与Jython运行测试时,可以访问 Java系统属性 使用相同的语法 环境变量 。 如果一个环境变量和一个 系统属性相同的名称存在,将使用环境变量。
*** Test Cases ***
System Properties
Log %{user.name} running tests on %{os.name}
创建变量
变量可以来自不同来源的出现。
表变量
最常见的来源表变量变量 测试用例 文件 和 资源文件 。 变量表方便,因为他们 允许创建变量在同一个地方,其余的测试 数据和所需的语法非常简单。 他们的主要缺点是 值总是字符串,他们不能被动态创建。 如果这是一个问题, 变量的文件 可以使用。
创建标量变量
最简单的可能的变量赋值设置成一个字符串 标量变量。 这是通过给变量名(包括 $ { }
)在表的第一列变量和价值 第二个。 如果第二列是空的,设置一个空字符串 作为一个值。 也可以使用一个已定义的变量的值。
*** Variables ***
${NAME} Robot Framework
${VERSION} 2.0
${ROBOT} ${NAME} ${VERSION}
也有可能,但不是必须的, 使用等号 =
在变量名进行分配 变量更明确。
*** Variables ***
${NAME} = Robot Framework
${VERSION} = 2.0
如果一个标量变量有着悠久的价值,它可以分离到多个列和 行 。 默认情况下使用空间细胞加在一起,但这一点 可以通过改变吗 分隔符= < 9 >
在第一个单元格。
*** Variables ***
${EXAMPLE} This value is joined together with a space
${MULTILINE} SEPARATOR=\n First line
... Second line Third line
加入长值高于2.9是机器人中的一个新特性的框架。 创建一个标量变量与多个值是一个语法错误 机器人框架与早期版本2.8,它创建了一个变量 值列表。
创建变量列表
创建变量一样容易创建标量变量列表。 再一次, 变量名在表的第一列变量 在随后的列值。 变量可以包含任意数量列表 的价值观,从零,如果需要的价值观,他们 可以 分成几行 。
*** Variables ***
@{NAMES} Matti Teppo
@{NAMES2} @{NAMES} Seppo
@{NOTHING}
@{MANY} one two three four
... five six seven
创建字典变量
字典表变量可以在创建变量类似 变量列表。 所不同的是,物品需要创建使用 名称=值
语法或现有的字典变量。 如果有多个 项目名称相同,最后一个值优先。 如果名称包含 一个等号,它可以 逃了出来 这样的一个反斜杠 \ =
。
*** 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
字典表有两个额外的属性变量中创建变量 相比正常的Python字典。 首先,这些值 字典可以像访问属性,这意味着它是可能的 使用 扩展变量语法 就像 $ { VAR.key }
。 这只 关键是一个有效的属性名称和不匹配任何正常属性 Python字典。 例如,个人价值 & { USER }[名称]
可以 也被访问 $ { USER.name }
(注意 美元
需要在这 上下文),但 & {许多}[$ { 3 }]
不工作 $ { MANY.3 }
。
另一个特殊的属性字典表中创建的变量 他们命令。 这意味着,如果这些字典是迭代, 项目的顺序总是他们的定义。 这可能是有用的 如果使用字典 变量列表 与 for循环 或以其他方式。 当使用一个字典列表变量,包含实际的价值 字典键。 例如, @ {许多}
变量将是有价值的 (“第一次”, 第二,3]
。
变量文件
变量创建不同的文件是最强大的机制 类型的变量。 可以将变量分配给任何对象 使用他们,他们也可以用于创建动态变量。 的 变量文件语法和考虑变量文件使用解释道 节 资源和变量文件 。
在命令行中设置变量
可以从命令行设置变量分别与 的 ——变量(- v) 选择的文件或使用一个变量 ——variablefile(- v) 选择。 从命令行设置的变量 对所有执行全局可用测试数据文件,他们也 覆盖可能的变量与变量相同的名称和表 变量在测试数据文件导入。
设置单个变量的语法 ——变量 名称:值 ,在那里 的名字
变量的名字没有 $ { }
和 价值
是它的价值。 几个变量可以 设定的多次使用这个选项。 只有标量变量 设置使用该语法,他们只能得到字符串值。 许多 特殊字符很难代表的 命令行,但是他们可以 逃了出来 与 ——逃避 选择。
--variable EXAMPLE:value
--variable HOST:localhost:7272 --variable USER:robot
--variable ESCAPED:Qquotes_and_spacesQ --escape quot:Q --escape space:_
在上面的示例中,变量设置
$ { }例子
得到的值价值
$ {主机}
和$ { USER }
得到的值localhost:7272
和机器人
$ {逃脱}
得到的值“引用和空间”
的基本语法 变量的文件 使用命令行 是 ——/ / variables.py variablefile路径 , 考虑变量文件 使用 有更多的细节部分。 变量实际上取决于创建 引用变量的变量有什么文件。
如果两个变量文件和个人变量从命令行, 后者有 更高的优先级 。
返回值的关键字
返回值的关键字也可以设置为变量。 这 即使在不同的测试允许之间的沟通不同的关键词 库。
变量组以这种方式否则类似于任何其他 变量,但它们只在可用 局部作用域 他们在哪里创建。 因此它是不可能的,例如,设置 这样的一个变量在另一个测试用例,并使用它。 这是 因为,一般来说,不应该依赖于每一个自动化测试用例 ,不小心设置一个变量,用于其他地方 可能导致难以调试的错误。 如果有一个真正的需要 设置一个变量在一个测试用例,使用它在另一个 可以使用 内装式 关键字,在下一节中解释。
分配标量变量
任何返回值可以分配给一个关键字 标量变量 。 如下面的例子所示,所需的语法非常简单。
*** Test Cases ***
Returning
${x} = Get X an argument
Log We got ${x}!
在上面的例子中返回的值 得到X 关键字 第一组到变量 $ { x }
然后使用的 日志 关键字。 在等号 =
在变量名 不是必须的,但它使任务更明确。 创建 这样的局部变量在测试用例和用户关键字级别工作。
注意,尽管一个值赋给一个标量变量,它可以 被用作 变量列表 如果它有一个类似价值和作为 字典 变量 如果它有一个类字典值。
*** Test Cases ***
Example
${list} = Create List first second third
Length Should Be ${list} 3
Log Many @{list}
分配变量列表
如果一个关键词返回一个列表或任何类似的对象,它是可能的 把它赋值给一个 变量列表 。
*** Test Cases ***
Example
@{list} = Create List first second third
Length Should Be ${list} 3
Log Many @{list}
因为所有机器人框架变量存储在相同的名称空间中,有 两者之间并没有明显将值分配给一个标量变量或一个列表 变量。 这通过比较可以看到最后上面的两个例子。 主要的 差异是,当创建一个列表变量,机器人框架 自动验证值是一个列表或类似,和存储 变量值将是一个新列表创建的返回值。 当 分配到一个标量变量,返回值并不和验证 储值将会返回相同的对象。
分配变量字典
如果一个关键词返回一个字典或任何类字典对象,它是可能的 分配到一个 字典变量 。
*** Test Cases ***
Example
&{dict} = Create Dictionary first=1 second=${2} ${3}=third
Length Should Be ${dict} 3
Do Something &{dict}
Log ${dict.first}
因为所有机器人框架变量存储在相同的名称空间,它会 还可以指定一个字典到一个标量变量并使用它 后来作为一个字典。 然而,有一些实际的好处 在变量显式地创建一个字典。 首先,机器人框架 验证返回的值是一个字典或类似的类字典 因为它验证列表变量只能获得类似的价值。 另一个好处是,机器人将值转换为一个特殊的框架 字典也使用时 创建字典变量在变量 表。 这些字典是合适的和它们的值可以使用访问 属性访问像 $ { dict.first }
在上面的例子中。
分配多个变量
如果一个字返回一个列表或类似物体,可以分配 个人价值为多个标量变量或标量变量 变量列表。
*** Test Cases ***
Assign Multiple
${a} ${b} ${c} = Get Three
${first} @{rest} = Get Three
@{before} ${last} = Get Three
${begin} @{middle} ${end} = Get Three
假设关键字 得到三个 返回一个列表 (1、2、3)
, 创建以下变量:
$ {一}
,$ { b }
和$ { c }
与价值观1
,2
,3
,分别。$ {第一}
与价值1
,@ {休息}
与价值(2、3)
。@ {之前}
与价值[1,2]
和$ {一}
与价值3
。$ { }开始
与价值1
,@ {中间}
与价值[2]
和$ { }结束 价值3
。
这是一个错误,如果返回列表或多或少比有值 标量变量分配。 此外,只有一个列表变量是被允许的 和词典变量只能被分配。
支持分配多个变量有点变化 2.9机器人框架。 在这一个变量是只允许列表 最后指定的变量,但现在它可以在任何地方使用。 此外,它是可能的返回值比标量变量。 在这种情况下最后一个标量变量是神奇地变成了一个列表 包含额外的价值。
使用 设置测试套件/全局变量 关键字
的 内装式 图书馆有关键词 设置测试变量 , 设置组变量 和 设置全局变量 它可以 用于设置变量动态测试中 执行。 如果一个变量已经存在新的范围内 值将被重写,否则创建一个新变量。
变量集 设置测试变量 关键字是可用的 随处可见范围内当前执行的测试用例。 为 例子,如果你在用户关键字设置一个变量,它是可用的 测试用例级别和所有其他用户中使用的关键字 当前的测试。 其他测试用例不会看到变量设置 关键字。
变量集 设置组变量 关键字是可用的 当前执行的测试范围内 套件。 设置变量与这个关键词有同样的效果 创建它们使用 表变量 在测试数据文件或 进口的 变量的文件 。 其他的测试套件,包括 可能孩子测试套件,不会看到变量设置 关键字。
变量集 设置全局变量 关键字是全球 可用在所有测试用例和套件设置后执行 他们。 设置变量与这个关键词有同样的效果 从命令行创建 使用的选项 ——变量 或 ——variablefile 。 因为这个字可以改变变量 无处不在,应该小心使用它。
请注意
设置测试套件/全局变量 关键字设置命名 变量直接进入 测试套件或全局变量作用域 并返回。 另一方面,另一个地方 内装式 关键字 设置变量 设置局部变量使用 返回值 。
2.5.4内置变量
机器人框架提供了一些内置的变量 自动。
操作系统变量
内置变量与操作系统有关减轻测试数据 operating-system-agnostic。
变量 | 解释 |
---|---|
$ { CURDIR } | 目录的绝对路径测试数据 文件所在的位置。 这个变量是区分大小写的。 |
$ { TEMPDIR } | 系统临时目录的绝对路径。 在类unix 系统通常 / tmp ,在窗户 c:\Documents and Settings\ <用户> \ Temp \本地设置。 |
$ { EXECDIR } | 目录的绝对路径测试执行 从开始的。 |
$ { / } | 系统目录路径分隔符。 / 在类unix 系统和 \ 在Windows。 |
$ {:} | 系统路径元素分隔符。 : 在类unix 系统和 ; 在Windows。 |
$ { \ n } | 系统行分隔符。 \ n 在类unix系统和 \ r \ n 在Windows。 2.7.5新版本。 |
*** Test Cases ***
Example
Create Binary File ${CURDIR}${/}input.data Some text here${\n}on two lines
Set Environment Variable CLASSPATH ${TEMPDIR}${:}${CURDIR}${/}foo.jar
变量的数量
变量可以用来创建整数和语法 浮点数,见下面的例子。 这是 有用的关键字时希望得到一个实际的数字,而不是一个 字符串,看起来就像一个数字,作为参数。
*** Test Cases ***
Example 1A
Connect example.com 80 # Connect gets two strings as arguments
Example 1B
Connect example.com ${80} # Connect gets a string and an integer
Example 2
Do X ${3.14} ${-1e-4} # Do X gets floating point numbers 3.14 and -0.0001
也可以创建整数从二进制,八进制, 十六进制值使用 0 b
, 0啊
和 0 x
分别为前缀。 语法不区分大小写。
*** Test Cases ***
Example
Should Be Equal ${0b1011} ${11}
Should Be Equal ${0o10} ${8}
Should Be Equal ${0xff} ${255}
Should Be Equal ${0B1010} ${0XA}
布尔和没有/空变量
布尔值和Python 没有一个
和Java 零
可以 使用变量语法创建同样的数字。
*** Test Cases ***
Boolean
Set Status ${true} # Set Status gets Boolean true as an argument
Create Y something ${false} # Create Y gets a string and Boolean false
None
Do XYZ ${None} # Do XYZ gets Python None as an argument
Null
${ret} = Get Value arg # Checking that Get Value returns Java null
Should Be Equal ${ret} ${null}
这些变量是不区分大小写的,举个例子 $ {真}
和 $ {真}
是等价的。 此外, $ {一}
和 $ {零}
是同义词,因为当在Jython运行测试吗 Jython解释器,自动转换 没有一个
和 零
必要时,正确的格式。
空间和空的变量
可以使用变量创建空间和空字符串 $ {空间}
和 $ {空}
,分别。 这些变量是 有用的,例如,否则会有需要的时候出现 逃避 空格或空的细胞 一个反斜杠。 如果一个以上的空间 需要的话,可以使用 扩展变量语法 就像 $ {空间* 5 }
。 在接下来的例子中, 应该是 平等的 但是那些使用变量是关键字得到相同的参数 更容易理解比使用反斜杠。
*** Test Cases ***
One Space
Should Be Equal ${SPACE} \ \
Four Spaces
Should Be Equal ${SPACE * 4} \ \ \ \ \
Ten Spaces
Should Be Equal ${SPACE * 10} \ \ \ \ \ \ \ \ \ \ \
Quoted Space
Should Be Equal "${SPACE}" " "
Quoted Spaces
Should Be Equal "${SPACE * 2}" " \ "
Empty
Should Be Equal ${EMPTY} \
还有一个空的 变量列表 @ {空}
和一个空 字典 变量 & {空}
。 因为他们没有内容,基本上 在测试数据使用时消失。 他们是有用的,例如, 与 测试模板 当 模板使用关键字 参数 或者当变量在不同覆盖列表或字典 范围。 修改的值 @ {空}
或 & {空}
是不可能的。
*** Test Cases ***
Template
[Template] Some keyword
@{EMPTY}
Override
Set Global Variable @{LIST} @{EMPTY}
Set Suite Variable &{DICT} &{EMPTY}
请注意
@ {空}
机器人第2.7.4框架和新 & {空}
在 2.9机器人框架。
自动变量
也可以使用一些自动变量的测试数据。 这些 变量可以在测试执行和一些有不同的价值观 他们甚至没有可用的。 改变的价值 这些变量并不影响原来的值,但是一些值 可以动态地改变使用关键字的 内装式 图书馆。
变量 | 解释 | 可用 |
---|---|---|
$ {测试名称} | 当前测试用例的名称。 | 测试用例 |
@ {测试标签} | 包含当前测试用例的标签 字母顺序排列。 可以动态修改使用吗 设置标签 和 删除标签 关键词。 | 测试用例 |
$ {测试文档} | 当前测试用例的文档。 可以设置 使用使用动态 设置测试文档 关键字。 2.7新机器人框架。 | 测试用例 |
$ {测试状态} | 当前测试用例的状态,或通过 失败。 | Test teardown |
$ {测试消息} | 当前测试用例的信息。 | Test teardown |
$ { PREV测试名称} | 以前的测试用例的名称,或一个空字符串 如果没有测试被执行。 | Everywhere |
$ { PREV测试状态} | 以前的测试用例的状态:要么通过, 失败,或空字符串时,没有测试 执行。 | Everywhere |
$ { PREV测试消息} | 以前的测试用例可能的错误消息。 | Everywhere |
$ {套件名称} | 当前的测试套件的全名。 | Everywhere |
$ {套件来源} | 一个文件或目录的绝对路径的套件。 | Everywhere |
$ {套件文档} | 文档的当前的测试套件。 可以 动态设置使用使用 组套件 文档 关键字。 2.7新机器人框架。 | Everywhere |
& {套件元数据} | 自由的元数据的当前的测试套件。 可以 设置使用 集套件的元数据 关键字。 新的第2.7.4机器人框架中。 | Everywhere |
$ {套件状态} | 当前的测试套件的状态,或通过 失败。 | Suite teardown |
$ {套件信息} | 当前的测试套件的完整信息,包括 统计数据。 | Suite teardown |
$ {关键词地位} | 当前状态的关键字,通过或 失败。 2.7新机器人框架 | User keyword teardown |
$ {关键词信息} | 当前关键字的可能的错误消息。 2.7新机器人框架。 | User keyword teardown |
$ {日志级别} | 当前的 日志级别 。 2.8新机器人框架。 | Everywhere |
输出文件$ { } | 绝对路径 输出文件 。 | Everywhere |
日志文件$ { } | 绝对路径 日志文件 或字符串没有 当没有创建日志文件。 | Everywhere |
$ {报告文件} | 绝对路径 报告文件 或字符串没有 当没有创建报告。 | Everywhere |
$ { }调试文件 | 绝对路径 调试文件 或字符串没有 当没有调试文件创建。 | Everywhere |
$ {输出DIR } | 绝对路径 输出目录 。 | Everywhere |
套件相关的变量 $ {套件来源}
, $ {套件名称}
, $ {套件文档}
和 & {套件元数据}
是 可用的测试库和变量文件时已经导入, 除了机器人框架2.8和2.8.1发布这个支持被打破了。 可能的变量在这些自动变量还没有解决 不过,在导入时间。
变量的重点和范围
来自不同的来源有不同的优先级和变量 在不同的范围。
变量的优先级
变量从命令行
变量 在命令行中设置 最高优先级的 变量可以设置在实际测试执行之前就开始了。 他们 覆盖可能的变量变量表中创建测试用例 文件,以及在资源和变量文件导入 测试数据。
单独设置变量( ——变量 选项)覆盖 变量设置使用 变量的文件 ( ——variablefile 选项)。 如果您指定同一个人变量多次,指定的一个 最后将会覆盖之前的。 这允许设置的默认值 变量在一个 启动脚本 并从命令行覆盖它们。 不过,请注意,如果多个变量文件具有相同的变量, 指定的文件的第一个具有最高的优先级。
表在一个测试用例文件变量
创建的变量使用 表变量 在一个测试用例文件中 可用于该文件中的所有测试用例。 这些变量 覆盖在进口资源和具有相同名称的变量 变量的文件。
变量变量中创建表可用在所有其他表 他们在哪里创建的文件。 这意味着他们可以使用 在设置表中,例如,对于进口更多的变量 资源文件和变量。
进口资源和变量文件
变量的进口 资源和变量文件 有 最低优先级的所有变量创建测试数据。 从资源文件中变量和变量有相同的文件 优先级。 如果一些资源和/或变量具有相同的文件 变量的文件中第一次被导入到使用。
如果一个资源文件导入资源文件或变量文件, 表变量的变量有一个更高的优先级 变量进口。 所有这些变量对文件可用 导入该资源文件。
注意,从资源和进口变量变量文件 可用的变量进口表的文件。 这 是由于变量表前处理设置表吗 资源文件和变量文件都是进口的。
在测试执行期间设置的变量
在测试执行使用变量设置 返回值 从关键字 或 使用关键字设置测试/套件/全局变量 总是覆盖可能的现有 变量的范围设置。在某种意义上,他们如此 最高优先级,但另一方面他们不影响吗 变量超出了定义范围。
内置的变量
内置的变量 就像$ { TEMPDIR }
和$ { TEST_NAME }
所有变量的优先级最高。 他们不能被覆盖 使用变量表或从命令行,但即使他们可以重置期间 测试执行。 这个规则的例外 变量的数量 ,这 如果没有发现其他变量动态解析。 因此可以 覆盖,但通常是一个坏主意。 另外$ { CURDIR }
是特殊的,因为它已经取代了在测试数据处理时间。
变量作用域
取决于他们在哪里以及如何创建,可以有一个变量 全球测试套件、测试用例或局部作用域。
全局作用域
全局变量可用的测试数据。 这些 变量通常是 从命令行设置 与 ——变量 和 ——variablefile 选项,但也 可以创建新的全局变量或改变现有的 与 内装式 关键字 设置全局变量 在任何地方 测试数据。 此外还 内置的变量 是全球性的。
推荐使用大写字母与所有全局变量。
测试套件范围
变量的测试套件范围可用的任何地方 测试套件定义或导入。 他们可以创建 在变量表、进口 资源和变量文件 , 或设置测试执行期间使用 内装式 关键字 设置组变量 。
测试套件的范围 不是递归 ,这意味着变量 在一个更高级的测试套件 不可用 在 低层套件。 如果有必要, 资源和变量文件 可以 用于共享变量。
由于这些变量可以被认为是全球测试套件中 他们使用,建议使用大写字母也与他们。
测试用例范围
变量的测试用例是可见的在一个测试用例和范围 所有用户关键字测试使用。 最初没有变量 这个范围,但可以通过使用创建它们 内装式 关键字 设置测试变量 在一个测试用例。
还在测试用例变量在一定范围扩展全球。 它是 因此通常推荐使用大写字母和他们。
局部作用域
测试用例和用户关键字有一个局部变量范围 被其他测试或关键字。 局部变量可以使用创建 返回值 从关键词和用户的关键词也得到执行 他们是 参数 。
推荐使用小写字母与局部变量。
请注意
机器人框架2.9之前在当地范围内的变量 泄露给低级别用户关键词 。 这是从来没有一个 预期功能,和变量应该设置或通过 明确的早期版本。
高级变量特性
扩展变量语法
扩展变量语法允许访问一个对象的属性 给一个变量(例如, $ { object.attribute }
),甚至打电话 它的方法(例如, $ { obj.getName()}
)。 它的工作原理与 标量变量列表,但前者主要是有用的
扩展变量语法是一种强大的功能,但它应该 小心使用。 访问属性通常不是一个问题 相反,因为一个包含对象和几个变量 属性通常是比有几个变量。 在 另一方面,调用方法,尤其是当他们使用 参数,可以使测试数据很复杂的理解。 如果出现这种情况,建议移动到一个测试库的代码。
最常见的用法扩展变量的语法 在下面的例子中。 首先假设我们有以下 变量文件 和测试用例:
class MyObject:
def __init__(self, name):
self.name = name
def eat(self, what):
return '%s eats %s' % (self.name, what)
def __str__(self):
return self.name
OBJECT = MyObject('Robot')
DICTIONARY = {1: 'one', 2: 'two', 3: 'three'}
*** Test Cases ***
Example
KW 1 ${OBJECT.name}
KW 2 ${OBJECT.eat('Cucumber')}
KW 3 ${DICTIONARY[2]}
当执行这个测试数据,关键字参数作为 解释如下:
- KW1 得到字符串 Robot
- KW2 得到字符串 robo teats Cucumber
- KW3 得到字符串 two
按照以下顺序扩展变量语法评估:
- 变量是使用完整的变量名称搜索。 扩展的 评估变量的语法只有在没有匹配的变量 是发现。
- 创建基本变量的名称。 身体的名字 包括开始后所有的人物
{
直到 第一次出现的角色不是一个字母数字字符 或空间。 例如,基础的变量$ { OBJECT.name }
和$ {词典[2]}
)对象
和字典
, 分别。 - 一个变量匹配搜索。 如果没有匹配,一个 异常,测试用例失败。
- 花括号内的表达式求值作为一个Python 表达,所以基本变量名替换它 价值。 如果评估失败,因为一个无效的语法 查询属性不存在,会抛出一个异常并 测试失败。
- 整个扩展变量替换为返回的值 从评估。
如果使用的对象是使用Java实现,扩展 变量的语法允许您使用所谓的bean访问属性 属性。 从本质上讲,这意味着如果你有对象了 getName
方法设置成一个变量 $ { OBJ }
,那么 语法 $ { OBJ.name }
相当于但清晰吗 $ { OBJ.getName()}
。 在上一个示例中使用的Python对象 因此可以替换为以下Java实现:
public class MyObject:
private String name;
public MyObject(String name) {
name = name;
}
public String getName() {
return name;
}
public String eat(String what) {
return name + " eats " + what;
}
public String toString() {
return name;
}
}
许多标准的Python对象,包括字符串和数字 方法可以用于扩展变量语法 显式或隐式。 有时这可以真正有用的和 减少需要设置临时变量,但也容易 过度使用它并创建真正的测试数据。 下面的例子 显示一些不错的用法。
*** Test Cases ***
String
${string} = Set Variable abc
Log ${string.upper()} # Logs 'ABC'
Log ${string * 2} # Logs 'abcabc'
Number
${number} = Set Variable ${-2}
Log ${number * 10} # Logs -20
Log ${number.__abs__()} # Logs 2
注意,即使 abs(数量)
建议在 number.__abs__()
在正常的Python代码,使用 $ { abs(数量)}
不工作。 这是因为变量名 必须在扩展语法的开始。 使用 __xxx__
这样的方法在测试数据已经有点可疑,和 最好通常是这种逻辑转移到测试库中。
扩展变量语法也在工作 变量列表 上下文。 例如,如果一个对象分配给一个变量 $ {扩展}
有 一个属性 属性
包含一个列表作为一个值,它可以 用作变量列表 @ { EXTENDED.attribute }
。
扩展变量赋值
从机器人Framework 2.7开始,可以设置的属性 对象存储使用标量变量 关键字返回值 和 的一个变种 扩展变量语法 。 假设我们有 变量 $ {对象}
从前面的示例中,属性 被设置为像下面例子所示的那样。
*** Test Cases ***
Example
${OBJECT.name} = Set Variable New name
${OBJECT.new_attr} = Set Variable New attribute
评估使用的扩展变量赋值语法 以下规则:
- 分配的变量必须是一个标量变量,至少有 一个点。 否则,赋值语法不使用和扩展 正常的变量被分配。
- 如果存在一个变量的全名 (如。
$ { OBJECT.name }
在上面的示例中,变量 将指定一个新值,不使用扩展语法。 - 创建基本变量的名称。 身体的名字 包括所有的人物之间的开放
$ {
和 最后一个点,例如,对象
在$ { OBJECT.name }
和foo.bar
在$ { foo.bar.zap }
。 在第二个例子 所示,基本名称可能包含正常扩展变量 语法。 - 属性的名称设置所有制造而成 字符之间的最后一个点和结束
}
,因为 的例子,的名字
在$ { OBJECT.name }
。 如果名字不 以字母或下划线开始和只包含这些字符 和数字,属性被认为是无效的和扩展的 不使用语法。 创建一个新变量的全名 代替。 - 一个变量匹配基本名称搜索。 如果没有变量 发现,不使用扩展语法,相反,一个新的变量 创建使用完整的变量名。
- 如果发现变量是一个字符串或一个数字,扩展语法 被忽略和创建一个新变量使用全名。 这是 因为你不能到Python字符串或添加新属性 数字,这样新语法也更少 向后不兼容的。
- 如果所有前面的规则匹配,该属性被设置为基础 变量。 如果设置由于某种原因失败,会抛出一个异常 和测试失败。
请注意
与分配变量时通常使用 返回 从关键字值 ,改变变量使用 扩展分配语法并不局限于当前 范围。 因为没有创建新的变量,而是 现有的状态变量是改变,所有的测试 关键词,发现变量也将更改。
变量内部变量
变量也允许在变量,当这个语法 使用变量从内而外的解决。 例如,如果你 有一个变量 $ { var $ { x } }
,然后 $ { x }
解决 第一。 如果它有价值 的名字
然后,最后一个值 值的变量$ { varname }
。 可以有多个嵌套 变量,但解决最外层的失败,如果他们不 存在。
在下面的示例中, 做X 得到的值 $ {约翰回家}
或 $ {简家}
,这取决于如果 得到的名字 返回 约翰
或 简
。 如果它返回别的东西,解决 $ { $ {名称}回家}
失败。
*** Variables ***
${JOHN HOME} /home/john
${JANE HOME} /home/jane
*** Test Cases ***
Example
${name} = Get Name
Do X ${${name} HOME}