robotframework笔记16

雨燕双飞 提交于 2020-02-16 13:09:53

发布处理具有相同名称的关键字

使用机器人框架要么是关键词 图书馆 关键字 或 用户的关键字 。 前来自 标准 库 或 外部库 ,后者 中创建相同的文件在使用或进口 资源文件 。 许多关键字使用时,是很常见的 他们中的一些人有相同的名字,这部分描述了如何 在这些情况下处理可能的冲突。

关键字范围

当只使用一个关键字的名字,有几个关键词 这个名字,机器人框架试图确定哪些关键字的 最高优先级根据其范围。 关键字的范围确定 的基础上如何创建问题的关键字:

  1. 创建一个用户关键字在同一个文件中使用。 这些 关键词有最高的优先级和他们总是使用,甚至 如果有其他具有相同名称的关键字。
  2. 中创建一个资源文件,直接或进口 间接地从另一个资源文件。 这是第二高的 优先级。
  3. 中创建一个外部测试库。 使用这些关键字,如果 没有用户具有相同名称的关键字。 然而,如果有 具有相同名称的关键字在标准库,一个警告 显示出来。
  4. 中创建一个标准库。 这些关键词是最低的 优先级。

指定关键字显式地

范围单独不是一个充分的解决方案,因为可以有 具有相同名称的关键字在几个库或资源,和 因此,他们提供一种机制来只使用的关键字 最高优先级。 在这种情况下,可以使用 完整的名字 的关键字 ,关键字名称前缀的名称 资源或图书馆和一个点是一个分隔符。

库关键字,长格式意味着只有使用格式 LibraryName。 关键字的名字 。 例如,关键字 运行 从 操作 图书馆可以作为 OperatingSystem.Run ,即使有另一个 运行 关键字在其他地方。 如果图书馆在一个模块或包, 完整的模块或包名称必须使用(例如, com.company.Library.Some关键字 )。 如果一个自定义的名字 图书馆使用 与名语法 ,必须指定名称 也用于整个关键字的名字。

资源文件中指定完整的关键字的名字,同样的 库名称。 资源的名称来源于basename 资源文件的文件扩展名。 例如, 关键字 例子 在一个资源文件 myresources.html 可以 被用作myresources.Example 。 注意,这个语法没有 工作,如果多个资源文件:相同。 在这样的 情况下,文件或关键字必须重命名。 完整的名字 关键字的情况下,空间,underscore-insensitive相似 正常的关键字的名字。

指定明确的库之间的优先和资源

如果有多个关键词之间的冲突,指定所有的关键词 在长格式可以相当多的工作。 使用长格式也 无法创建动态测试用例或用户的关键字以不同的方式工作 这取决于图书馆或资源是可用的。 一个解决方案 这些问题是使用关键字指定关键字重点明确 图书馆搜索顺序 从 内装式 图书馆。

请注意

尽管关键字这个词 图书馆 在它的名字,它的工作原理 资源文件。 正如上面所讨论的,关键词资源 总是有更高的优先级比关键词库。

的 图书馆搜索顺序 接受一个有序列表或库 资源作为参数。 当在测试数据匹配多个关键字的名字 关键词,第一个库或包含关键词选择和资源 关键字实现使用。 如果没有找到关键字的 指定的库或资源,执行失败的冲突一样 当搜索订单没有设置。

的更多信息和示例,请参见文档的关键字。

超时

关键字可能有问题的情况 极长执行或者只是没完没了地。 机器人框架 允许你设置超时的 测试用例 和 用户 关键字 ,如果没有完成在测试或关键字 指定的时间,目前正在执行的关键字 有力地停了下来。 停止关键词以这种方式可能会离开 库或被测系统到一个不稳定的状态,和超时 建议只有当没有更安全的选择。 一般来说, 图书馆应该实现关键字不能挂起或 他们有自己的超时机制,如果必要的。

测试用例超时

测试用例可以通过设置超时使用 测试 超时 设置表或设置 (超时) 设置测试用例表中。 测试超时 在设置 表定义了一个默认超时时间值的测试用例进行测试 测试套件,而 (超时) 在测试用例表中 一个超时适用于一个单独的测试用例,覆盖 可能的默认值。

使用一个空 (超时) 意味着没有测试 超时即使 测试超时 使用。 也有可能 使用价值 没有一个 为这个目的。

不管测试超时定义,第一个单元格 设置名称包含的时间超时。 持续时间 必须在机器人框架的 时间格式 ,也就是说, 直接在几秒钟内或在一个格式 1分钟 30秒 。 必须指出的是,总有一些开销的 框架,超时时间短于一秒也没有 推荐。

测试时的默认错误消息显示超时 测试超时<时间>超过 。 还可以使用自定义 错误消息,而这些消息被写进细胞 超时之后持续时间。 消息可以分成多个 细胞,同样的文件。 超时值和 错误消息可能包含变量。

如果有一个超时,关键字是停在运行 超时过期,测试用例失败。 然而,关键字 执行 测试拆卸 如果一个测试超时不中断 发生,因为他们通常从事重要的清理 活动。 如果有必要,也有可能中断 关键字与 用户关键字超时 

*** Settings ***
Test Timeout    2 minutes

*** Test Cases ***
Default Timeout
    [Documentation]    Timeout from the Setting table is used
    Some Keyword    argument

Override
    [Documentation]    Override default, use 10 seconds timeout
    [Timeout]    10
    Some Keyword    argument

Custom Message
    [Documentation]    Override default and use custom message
    [Timeout]    1min 10s    This is my custom error
    Some Keyword    argument

Variables
    [Documentation]    It is possible to use variables too
    [Timeout]    ${TIMEOUT}
    Some Keyword    argument

No Timeout
    [Documentation]    Empty timeout means no timeout even when Test Timeout has been used
    [Timeout]
    Some Keyword    argument

No Timeout 2
    [Documentation]    Disabling timeout with NONE works too and is more explicit.
    [Timeout]    NONE
    Some Keyword    argument

用户关键字超时

用户可以设置一个超时使用的关键字 (超时) 设置关键字表中。 设置它的语法,包括如何 超时值和可能的自定义消息, 相同的语法使用 测试用例超时 。 如果没有定义 提供消息,默认错误消息 关键字超时 <时间>超过 如果使用超时。

从机器人Framework 3.0开始,可以指定超时变量 这样,变量值作为参数给出。 使用全局变量 工作已经与先前的版本。

*** Keywords ***
Timed Keyword
    [Documentation]    Set only the timeout value and not the custom message.
    [Timeout]    1 minute 42 seconds
    Do Something
    Do Something Else

Wrapper With Timeout
    [Arguments]    @{args}
    [Documentation]    This keyword is a wrapper that adds a timeout to another keyword.
    [Timeout]    2 minutes    Original Keyword didn't finish in 2 minutes
    Original Keyword    @{args}

Wrapper With Customizable Timeout
    [Arguments]    ${timeout}    @{args}
    [Documentation]    Same as the above but timeout given as an argument.
    [Timeout]    ${timeout}
    Original Keyword    @{args}

用户关键字超时执行期间适用的用户 关键字。 如果整个字的总时间较长 超时值,当前关键字停止执行。 用户关键字 超时也适用于在一个测试用例拆卸,而测试 超时不是。

如果测试用例和它的一些关键字(或几个嵌套 关键字)有一个超时,超时是最少的 时间了。

For循环

多次重复相同动作是相当常见的需要在测试 自动化。 与机器人框架,可以有任何类型的测试库 循环结构,大部分时间应该实现循环 他们。 机器人也有自己的for循环语法框架,这是 有用的,例如,当需要重复关键词 不同的库。

可以使用For循环测试用例和用户的关键词。 除了 很简单的情况下,用户关键字更好,因为他们隐藏 for循环引入的复杂性。 循环的基本语法, 项的序列 来自Python,但相似 语法也可能在shell脚本或Perl。

正常的循环

在一个正常的循环,从值列表中分配一个变量, 每迭代一个值。 语法开始 :对于 ,在那里 结肠癌是需要独立的语法从正常的关键词。 的 下一个单元格包含循环变量,随后的细胞必须有在 ,最后细胞包含迭代值。 这些值可以包含 变量 ,包括 变量列表 

for循环中使用的关键词是第二行和他们必须 向右缩进一个细胞。 当使用 纯文本格式 , 缩进细胞必须 用反斜杠转义 ,但与其他 数据格式可以是空的细胞。 for循环结束 当压痕返回恢复正常或表结束。

*** Test Cases ***
Example 1
    :FOR    ${animal}    IN    cat    dog
    \    Log    ${animal}
    \    Log    2nd keyword
    Log    Outside loop

Example 2
    :FOR    ${var}    IN    one    two
    ...     ${3}    four    ${last}
    \    Log    ${var}

for循环在 示例1 以上是执行两次,所以第一 循环变量 $ {动物} 的值 猫 然后 狗 。 循环包括两个 日志 关键词。 在 第二个例子,循环值 分成两行 和 循环运行的5倍。

这往往是方便使用for循环 变量列表 。 这是 下面的示例所示, @ {元素} 包含 任意的元素和关键字 开始元素 是 使用他们一个接一个。

*** Test Cases ***
Example
    :FOR    ${element}    IN    @{ELEMENTS}
    \    Start Element  ${element}

嵌套的循环

直接在不支持嵌套的循环,但可以使用 用户关键字在一个for循环和有另一个for循环。

*** Keywords ***
Handle Table
    [Arguments]    @{table}
    :FOR    ${row}    IN    @{table}
    \    Handle Row    @{row}

Handle Row
    [Arguments]    @{row}
    :FOR    ${cell}    IN    @{row}
    \    Handle Cell    ${cell}

使用几个循环变量

还可以使用几个循环变量。 语法是 一样的正常循环,但所有循环变量中列出 细胞之间的 :对于 和 在 。 可以有任意数量的循环 变量,但值的数量必须是均匀的数量可分的 变量。

如果有很多值迭代,通常是方便的组织 他们在循环变量,如第一个循环下面的例子:

*** Test Cases ***
Three loop variables
    :FOR    ${index}    ${english}    ${finnish}    IN
    ...     1           cat           kissa
    ...     2           dog           koira
    ...     3           horse         hevonen
    \    Add to dictionary    ${english}    ${finnish}    ${index}
    :FOR    ${name}    ${id}    IN    @{EMPLOYERS}
    \    Create    ${name}    ${id}

For-in-range循环

早些时候总是for循环迭代序列,这也是最 常见的用例。 有时它还方便有一个for循环 这是执行一定数量的次,机器人有一个框架 特殊的 指数的范围限制 语法这一目的。 这 Python语法来源于类似的习语。

同样作为循环,其他for-in-range循环开始 :对于 循环变量是在接下来的细胞。 在这种格式 只能有一个循环变量,它包含当前循环 索引。 下一个细胞必须包含 在范围内 和随后的 细胞循环限制。

在最简单的情况下,只有循环的上限 指定。 在这种情况下,循环索引从0开始,增加一个 但不包括,直到极限。 也可以给的 开始和结束的限制。 然后索引开始从一开始限制,但是 增加同样的简单情况。 最后,它是可能的 还一步值,指定要使用的增加。 如果这一步 是负的,这是作为递减。

可以使用简单的加法和减法等算法 范围的限制。 这是限制时特别有用 指定变量。

从机器人2.8.7框架,可以使用浮点值 下限,上限和步骤。

*** Test Cases ***
Only upper limit
    [Documentation]    Loops over values from 0 to 9
    :FOR    ${index}    IN RANGE    10
    \    Log    ${index}

Start and end
    [Documentation]  Loops over values from 1 to 10
    :FOR    ${index}    IN RANGE    1    11
    \    Log    ${index}

Also step given
    [Documentation]  Loops over values 5, 15, and 25
    :FOR    ${index}    IN RANGE    5    26    10
    \    Log    ${index}

Negative step
    [Documentation]  Loops over values 13, 3, and -7
    :FOR    ${index}    IN RANGE    13    -13    -10
    \    Log    ${index}

Arithmetics
    [Documentation]  Arithmetics with variable
    :FOR    ${index}    IN RANGE    ${var}+1
    \    Log    ${index}

Float parameters
    [Documentation]  Loops over values 3.14, 4.34, and 5.34
    :FOR    ${index}    IN RANGE    3.14    6.09    1.2
    \    Log    ${index}

For-in-enumerate循环

有时是有用的遍历一个列表并跟踪你的位置 在列表中。 有一个特殊的机器人框架 指数… 在列举…… 这种情况下的语法。 这个语法是派生的 Python的内置函数 

For-in-enumerate循环工作就像常规的for循环, 除了细胞循环变量后必须说 在列举 , 他们必须有一个额外的索引变量之前其他循环变量。 索引变量的值 第一次迭代, 为 第二,等等。

例如,下面的两个测试用例做同样的事情:

*** Variables ***
@{LIST}         a    b    c

*** Test Cases ***
Manage index manually
    ${index} =    Set Variable    -1
    : FOR    ${item}    IN    @{LIST}
    \    ${index} =    Evaluate    ${index} + 1
    \    My Keyword    ${index}    ${item}

For-in-enumerate
    : FOR    ${index}    ${item}    IN ENUMERATE    @{LIST}
    \    My Keyword    ${index}    ${item}

就像普通的for循环,你可以每循环遍历多个值 迭代只要值的数量在你的列表是整除 循环变量的数量(不含第一、索引变量)。

*** Test Case ***
For-in-enumerate with two values per iteration
    :FOR    ${index}    ${english}    ${finnish}    IN ENUMERATE
    ...    cat      kissa
    ...    dog      koira
    ...    horse    hevonen
    \    Add to dictionary    ${english}    ${finnish}    ${index}

2.9 For-in-enumerate循环在机器人的新框架。

For-in-zip循环

一些测试建立几个相关的列表,然后循环起来。 这种情况下机器人框架有一个快捷方式: 为… 在邮政… ,这 来源于 Python内置zip函数 

这可能是最简单的,展示了一个例子:

*** Variables ***
@{NUMBERS}      ${1}    ${2}    ${5}
@{NAMES}        one     two     five

*** Test Cases ***
Iterate over two lists manually
    ${length}=    Get Length    ${NUMBERS}
    : FOR    ${idx}    IN RANGE    ${length}
    \    Number Should Be Named    ${NUMBERS}[${idx}]    ${NAMES}[${idx}]

For-in-zip
    : FOR    ${number}    ${name}    IN ZIP    ${NUMBERS}    ${NAMES}
    \    Number Should Be Named    ${number}    ${name}

同样for-in-range和for-in-enumerate循环,for-in-zip循环要求 循环变量后的细胞来读 在邮政 

值使用for-in-zip循环必须列表或类似物体,和 必须有相同数量的循环变量列表循环。 循环 将停止在最短的列表为空。

请注意任何列表使用for-in-zip通常应该给出 标量 变量 就像 $ { }列表 。 一个 变量列表 只适用的项目 本身是列表。

2.9 For-in-zip循环在机器人的新框架。

退出循环

通常执行循环直到所有循环值迭代 或关键字使用内循环失败。 如果需要退出循环 早些时候, 内装式 关键字 退出循环 和 退出循环如果 可以用来完成。 他们同样工作 打破 声明在Python中,Java,和许多其他的编程语言。

退出循环 和 退出循环如果 可以使用关键字 直接在for循环或循环使用的关键字。 在这两种情况下 测试执行后继续循环。 这是一个错误使用这些关键字 外一个for循环。

*** Test Cases ***
Exit Example
    ${text} =    Set Variable    ${EMPTY}
    :FOR    ${var}    IN    one    two
    \    Run Keyword If    '${var}' == 'two'    Exit For Loop
    \    ${text} =    Set Variable    ${text}${var}
    Should Be Equal    ${text}    one

在上面的例子中可以使用 退出循环如果 而不是使用 退出循环 与 运行关键字如果 。 关于这些关键词的更多信息,包括更多的用法示例, 看到他们的文档 内装式 图书馆。

请注意

退出循环如果 2.8关键字添加机器人框架。

继续循环

除了过早退出一个for循环,也可以 继续下一个迭代循环之前所有的关键词 执行。 这可以通过使用 内装式 关键字 持续循环 和 持续循环如果 这工作 继续 声明 在许多编程语言。

持续循环 和 持续循环如果 可以使用关键字 直接在for循环或循环使用的关键字。 在这两种情况下 其他关键词,迭代是跳过和执行仍在继续 从下一次迭代。 如果使用这些关键字在最后迭代, 执行后继续循环。 这是一个错误使用这些关键字 外一个for循环。

*** Test Cases ***
Continue Example
    ${text} =    Set Variable    ${EMPTY}
    :FOR    ${var}    IN    one    two    three
    \    Continue For Loop If    '${var}' == 'two'
    \    ${text} =    Set Variable    ${text}${var}
    Should Be Equal    ${text}    onethree

关于这些关键字的更多信息,包括用法示例,看到他们 文档的 内装式 图书馆。

请注意

这两个 持续循环 和 持续循环如果 被添加在机器人框架2.8。

从输出删除不必要的关键词

For循环经常创建大量的输出,与多个迭代 大大增加生成的大小 输出 和 日志 文件。 从机器人Framework 2.7,它是可能的 删除不必要的 关键字 从输出使用 ——RemoveKeywords 命令行 选择。

重复单一的关键词

For循环可以过度的情况下只有一个需要 重复一个字。 在这些情况下,往往更容易使用 内装式 关键字 重复的关键字 。 这个关键字了 关键字和重复多少次它作为参数。  重复关键字可以有一个可选的后缀 次 或 使语法更容易阅读。

*** Test Cases ***
Example
    Repeat Keyword    5    Some Keyword    arg1    arg2
    Repeat Keyword    42 times    My Keyword
    Repeat Keyword    ${var}    Another Keyword    argument

条件执行

在一般情况下,不建议有条件逻辑测试 情况下,甚至在用户关键字,因为它可以使他们很难 理解和维护。 相反,应该在测试这种逻辑 库,它可以使用自然的编程实现 语言结构。 然而,一些条件逻辑可能是有用的 次,即使机器人框架没有一个实际的if / else 构造,有几种方法可以达到同样的效果。

  • 关键字的名称用作安装或拆卸 测试 情况下 和 测试套件 可以指定使用吗 变量。 这有助于改变它们,例如,从 命令行。
  • 的 内装式 关键字 运行关键字 需要一个关键字 执行作为参数,它可以是一个变量。 的价值 变量可以,例如,从较早的动态 关键字或从命令行。
  • 的 内装式 关键字 运行关键字如果 和 运行关键字 除非 执行一个名为关键字只有一个特定的表达式 分别为真或假。 他们是适合创建 简单的if / else结构。 例如,看到的文档 前者。
  • 另一个 内装式 关键字, 设置变量如果 ,可用于设置 根据给定的动态变量表达式。
  • 有几个 内装式 关键字允许执行一个命名 关键字只有一个测试用例或者测试套件没有通过。

并行执行的关键字

当需要并行执行时,它必须在测试库中实现的 水平,library在背景上执行代码。 这通常 意味着library需要一个关键字 开始的东西 那 立即开始执行并返回,另一个关键字 得到的结果等到结果是可用的 并返回它。 看到 操作 库关键字 启动过程 和 读取过程输出 了一个例子。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!