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 } 与价值观 ,分别。
  • $ {第一} 与价值 @ {休息} 与价值 (2、3) 
  • @ {之前} 与价值 [1,2] 和 $ {一} 与价值 
  • $ { }开始 与价值 @ {中间} 与价值 [2] 和$ { }结束 价值 

这是一个错误,如果返回列表或多或少比有值 标量变量分配。 此外,只有一个列表变量是被允许的 和词典变量只能被分配。

支持分配多个变量有点变化 2.9机器人框架。 在这一个变量是只允许列表 最后指定的变量,但现在它可以在任何地方使用。 此外,它是可能的返回值比标量变量。 在这种情况下最后一个标量变量是神奇地变成了一个列表 包含额外的价值。

使用 设置测试套件/全局变量 关键字

的 内装式 图书馆有关键词 设置测试变量 , 设置组变量 和 设置全局变量 它可以 用于设置变量动态测试中 执行。 如果一个变量已经存在新的范围内 值将被重写,否则创建一个新变量。

变量集 设置测试变量 关键字是可用的 随处可见范围内当前执行的测试用例。 为 例子,如果你在用户关键字设置一个变量,它是可用的 测试用例级别和所有其他用户中使用的关键字 当前的测试。 其他测试用例不会看到变量设置 关键字。

变量集 设置组变量 关键字是可用的 当前执行的测试范围内 套件。 设置变量与这个关键词有同样的效果 创建它们使用 表变量 在测试数据文件或 进口的 变量的文件 。 其他的测试套件,包括 可能孩子测试套件,不会看到变量设置 关键字。

变量集 设置全局变量 关键字是全球 可用在所有测试用例和套件设置后执行 他们。 设置变量与这个关键词有同样的效果 从命令行创建 使用的选项 ——变量 或 ——variablefile 。 因为这个字可以改变变量 无处不在,应该小心使用它。

请注意

设置测试套件/全局变量 关键字设置命名 变量直接进入 测试套件或全局变量作用域 并返回。 另一方面,另一个地方 内装式 关键字 设置变量 设置局部变量使用 返回值 

2.5.4内置变量

机器人框架提供了一些内置的变量 自动。

操作系统变量

内置变量与操作系统有关减轻测试数据 operating-system-agnostic。

可用operating-system-related内置变量
变量解释
$ { 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

按照以下顺序扩展变量语法评估:

  1. 变量是使用完整的变量名称搜索。 扩展的 评估变量的语法只有在没有匹配的变量 是发现。
  2. 创建基本变量的名称。 身体的名字 包括开始后所有的人物 直到 第一次出现的角色不是一个字母数字字符 或空间。 例如,基础的变量 $ { OBJECT.name } 和 $ {词典[2]} 对象和 字典 , 分别。
  3. 一个变量匹配搜索。 如果没有匹配,一个 异常,测试用例失败。
  4. 花括号内的表达式求值作为一个Python 表达,所以基本变量名替换它 价值。 如果评估失败,因为一个无效的语法 查询属性不存在,会抛出一个异常并 测试失败。
  5. 整个扩展变量替换为返回的值 从评估。

如果使用的对象是使用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

评估使用的扩展变量赋值语法 以下规则:

  1. 分配的变量必须是一个标量变量,至少有 一个点。 否则,赋值语法不使用和扩展 正常的变量被分配。
  2. 如果存在一个变量的全名 (如。 $ { OBJECT.name } 在上面的示例中,变量 将指定一个新值,不使用扩展语法。
  3. 创建基本变量的名称。 身体的名字 包括所有的人物之间的开放 $ { 和 最后一个点,例如, 对象 在 $ { OBJECT.name } 和 foo.bar 在 $ { foo.bar.zap } 。 在第二个例子 所示,基本名称可能包含正常扩展变量 语法。
  4. 属性的名称设置所有制造而成 字符之间的最后一个点和结束 ,因为 的例子, 的名字 在 $ { OBJECT.name } 。 如果名字不 以字母或下划线开始和只包含这些字符 和数字,属性被认为是无效的和扩展的 不使用语法。 创建一个新变量的全名 代替。
  5. 一个变量匹配基本名称搜索。 如果没有变量 发现,不使用扩展语法,相反,一个新的变量 创建使用完整的变量名。
  6. 如果发现变量是一个字符串或一个数字,扩展语法 被忽略和创建一个新变量使用全名。 这是 因为你不能到Python字符串或添加新属性 数字,这样新语法也更少 向后不兼容的。
  7. 如果所有前面的规则匹配,该属性被设置为基础 变量。 如果设置由于某种原因失败,会抛出一个异常 和测试失败。

请注意

与分配变量时通常使用 返回 从关键字值 ,改变变量使用 扩展分配语法并不局限于当前 范围。 因为没有创建新的变量,而是 现有的状态变量是改变,所有的测试 关键词,发现变量也将更改。

变量内部变量

变量也允许在变量,当这个语法 使用变量从内而外的解决。 例如,如果你 有一个变量 $ { var $ { x } } ,然后 $ { x } 解决 第一。 如果它有价值 的名字 然后,最后一个值 值的变量$ { varname } 。 可以有多个嵌套 变量,但解决最外层的失败,如果他们不 存在。

在下面的示例中, 做X 得到的值 $ {约翰回家} 或 $ {简家} ,这取决于如果 得到的名字 返回 约翰 或 简 。 如果它返回别的东西,解决 $ { $ {名称}回家} 失败。

*** Variables ***
${JOHN HOME}    /home/john
${JANE HOME}    /home/jane

*** Test Cases ***
Example
    ${name} =    Get Name
    Do X    ${${name} HOME}
posted @ 2016-04-17 03:01  七月的尾巴_葵花  阅读(12863)  评论(0编辑  收藏  举报