robotframework笔记16

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

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

关键字范围

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

  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需要一个关键字 开始的东西 那 立即开始执行并返回,另一个关键字 得到的结果等到结果是可用的 并返回它。 看到 操作 库关键字 启动过程 和 读取过程输出 了一个例子。

时间: 2024-10-10 00:10:41

robotframework笔记16的相关文章

Javascript DOM 编程艺术读书笔记16/04/01

愚人节快乐 开始用webstorm了,随着学习深入,代码越来越长,因为不借助ide还真是挺难的 今天发现了一个严重的误区,text和textNode是完全不同的两个概念,之前没有特别注意,写代码很容易跳过createTextNode直接用parentNode.appendChild(text) 单独拎出来晒一晒,以后引以为戒 Javascript DOM 编程艺术读书笔记16/04/01

C++笔记16之const的用法总结

const主要是为了程序的健壮型,减少程序出错. 最基本的用法: [cpp] view plaincopy const int a=100; b的内容不变,b只能是100也就是声明一个int类型的常量(#define b =100) int const b=100; //和上面作用一样 const指针和引用一般用在函数的参数中 [cpp] view plaincopy int* m = &a; //出错,常量只能用常指针 int c= 1;const int*pc = &c;//常指针可指

python基础教程_学习笔记16:标准库:一些最爱——random

标准库:一些最爱 random random模块包括返回随机数的函数,可以用于模拟或者用于任何产生随机输出的程序. 事实上,所产生的数字都是伪随机数,它们以一个可预测的系统作为基础,除非是为了强加密的目标,否则这些随机数还是足够随机的.如果真的需要随机性,可以使用os模块的urandom函数. 重要函数 函数 描述 random() 返回0<=n<1之间的随机实数n,其中0<n<=1 getrandbits(n) 以长整型形式返回n个随机位(二进制数) uniform(a,b) 返

springmvc学习笔记(16)-异常处理器

springmvc学习笔记(16)-异常处理器 springmvc学习笔记16-异常处理器 异常处理思路 自定义异常类 全局异常处理器 错误页面 在springmvcxml配置全局异常处理器 异常测试 本文主要介绍springmvc中异常处理的思路,并展示如何自定义异常处理类以及全局异常处理器的配置 异常处理思路 系统中异常包括两类: 预期异常 运行时异常RuntimeException 前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发.测试通过手段减少运行时异常的发生. 系统的dao

Ext.Net学习笔记16:Ext.Net GridPanel 折叠/展开行

Ext.Net学习笔记16:Ext.Net GridPanel 折叠/展开行 Ext.Net GridPanel的行支持折叠/展开功能,这个功能个人觉得还说很有用处的,尤其是数据中包含图片等内容的时候. 下面来看看效果: 使用行折叠/展开功能之后,在Ext.Net GridPanel的行头会出现一个展开图标,点击图标以后能够将这一行展开: 使用XTemplate实现行折叠/展开 这是最简单的一种实现,我们只需要在GridPanel的定义中加入下面的代码: <Plugins> <ext:R

操作系统概念学习笔记 16 内存管理(二) 段页

操作系统概念学习笔记 16 内存管理 (二) 分页(paging) 分页(paging)内存管理方案允许进程的物理地址空间可以使非连续的.分页避免了将不同大小的内存块匹配到交换空间上(前面叙述的内存管理方案都有这个问题,当位于内存中的代码和数据需要换出时,必须现在备份存储上找到空间,这是问题就产生了.备份存储也有前面所述的与内存相关的碎片问题,只不过访问更慢). 传统上,分页支持一直是由硬件来处理的.最近的设计是通过将硬件和操作系统相配合来实现分页. 基本方法 实现分页的基本方法设计将物理内存分

robotframework笔记22

创建测试库 支持的编程语言 机器人框架本身是用写的 Python 和自然的测试 库扩展它可以使用相同的实现 语言. 运行时框架上 Jython ,图书馆也可以 实现使用 Java . 纯Python代码Python和工作 Jython,假设它不使用语法或模块 可在Jython. 当使用Python,也是可能的 实现与C库使用 Python C API ,尽管它是 往往更容易与C代码从Python库使用 ctypes 模块. 图书馆使用这些支持本地语言可以实现 也作为包装器使用其他功能实现 编程语

前端学习笔记--16/5~22/5 jQuery,HTML5+CSS3+JS 简易微信贺卡开发

先写一下上周的总结,基本上没有偷懒,每天都有认真学习前端知识.但是有一点目标不清晰.我上周订下来的计划只完成了50%,即是只完成了坐H5+CSS3+JS的小demo.imooc上的jQuery练习并没有完成,而且还差不少. 周六去了一天潜江吃大虾,不过作为弥补,星期天一整天又把缺的时间补回来了. 至于健身,上周属于间隔期,不过在周日这些计划也都重新启动了.到今天也已经完成了执行. 下面来单步跟踪一下每天学的只是吧. 5.16 jQuery使用each()方法遍历元素. 语法: $(selecto

robotframework笔记1--安装与卸载

机器人框架 实现与 Python 和支持也 Jython (JVM)和 IronPython (. net). 在安装框架之前, 一个明显的 先决条件 就是安装至少一个. 下面列出了不同的方法来安装机器人框架本身和解释 更彻底地在随后的部分. 安装与pip 使用pip推荐的方法是安装机器人框架. 随着 标准的Python包管理器包含在最新的Python, Jython和IronPython版本. 如果你已经pip,你 可以执行: pip install robotframework 从源代码安装