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

。 许多关键字使用时,是很常见的 他们中的一些人有相同的名字,这部分描述了如何 在这些情况下处理可能的冲突。

关键字范围

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

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

指定关键字显式地

,关键字名称前缀的名称 资源或图书馆和一个点是一个分隔符。

,必须指定名称 也用于整个关键字的名字。

。 注意,这个语法没有 工作,如果多个资源文件:相同。 在这样的 情况下,文件或关键字必须重命名。 完整的名字 关键字的情况下,空间,underscore-insensitive相似 正常的关键字的名字。

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

图书馆。

请注意

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

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

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

超时

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

测试用例超时

在测试用例表中 一个超时适用于一个单独的测试用例,覆盖 可能的默认值。

为这个目的。

。 必须指出的是,总有一些开销的 框架,超时时间短于一秒也没有 推荐。

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

*** 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循环语法框架,这是 有用的,例如,当需要重复关键词 不同的库。

来自Python,但相似 语法也可能在shell脚本或Perl。

正常的循环

,但与其他 数据格式可以是空的细胞。 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}

和 循环运行的5倍。

是 使用他们一个接一个。

*** 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循环

语法这一目的。 这 Python语法来源于类似的习语。

和随后的 细胞循环限制。

在最简单的情况下,只有循环的上限 指定。 在这种情况下,循环索引从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循环

为 第二,等等。

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

*** 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循环

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

*** 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-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循环。

*** 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。

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

命令行 选择。

重复单一的关键词

使语法更容易阅读。

*** 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结构。 例如,看到的文档 前者。
  • ,可用于设置 根据给定的动态变量表达式。
  • 关键字允许执行一个命名 关键字只有一个测试用例或者测试套件没有通过。

并行执行的关键字

了一个例子。

相关文章: