zoukankan      html  css  js  c++  java
  • robotframework笔记14

    创建用户关键字

    关键字表是用于创建新的更高层次的关键词 结合现有的关键词。 这些关键字被称为 用户 关键字 区分他们的最低水平 库关键字 实现在测试库。 的语法创建用户 关键词非常接近的语法创建测试用例 很容易学习。

    用户关键字语法

    基本语法

    在许多方面,总体用户关键字语法是相同的 测试用例的语法 。 用户创建关键字关键字表 这不同于测试用例表,用于只有名字 识别它们。 用户在第一列类似关键字名称 测试用例的名称。 也从关键字,创建用户的关键词 从关键词在测试库或其他用户的关键词。 关键字的名字 通常在第二列,但当设置变量的 关键字返回值,它们在随后的列。

    *** Keywords ***
    Open Login Page
        Open Browser    http://host/login.html
        Title Should Be    Login Page
    
    Title Should Start With
        [Arguments]    ${expected}
        ${title} =    Get Title
        Should Start With    ${title}    ${expected}
    

    大多数用户关键词需要一些参数。 这个重要的特性 已经在上面的第二个例子,详细解释 后来在这一节中 类似地, 用户关键字返回 值 

    可以创建用户关键字 测试用例文件 资源文件 , 和 测试套件的初始化文件 。 关键字中创建资源 文件可用于文件使用它们,而其他关键字 只能在他们创建的文件。

    设置关键字表中

    用户关键字可以有类似的设置 测试用例 ,他们 有相同的方括号语法分离关键字 的名字。 下面列出了所有可用的设置和稍后解释 这一节。

    (文档)
    用于设置一个 用户的关键字的文档 
    (标签)
    集 标签 关键字。
    (参数)
    指定 用户关键字参数 
    (返回)
    指定 用户关键字返回值 
    (拆卸)
    指定 用户关键字拆卸 
    (超时)
    集可能 用户关键字超时 。 超时 讨论了 在自己的部分。

    用户关键字名称和文档

    中定义的用户关键字的名字是第一列的用户 关键字表。 当然,这个名字应该是描述性的,它是 接受有很长的关键字的名字。 实际上,当创建 通常use-case-like测试用例,最高级别的关键词 制定句子甚至段落。

    用户关键字可以有一个文档的设置 (文档) 设置,完全一样 测试用例文档 。 这个设置文档用户关键字的测试数据。 它也显示 在更正式的关键字的文档, Libdoc 工具可以创建 从 资源文件 。 最后,文档的第一行 显示为一个关键字的文档 测试日志 

    有时关键词需要被删除,取而代之的是新的,或 弃用其他原因。 用户关键字可以弃用 从文档 *不* ,这将 导致使用关键字的一个警告。 有关更多信息,请参见 不以为然的关键词 部分。

    用户关键词标签

    从机器人Framework 2.9,关键词也可以有标签。 用户的关键字 可以设置标签 (标签) 设置同样 测试用例的标签 , 但可能 力的标签 和 默认的标签 设置不 影响它们。 另外可以指定关键词标签的最后一行 的文档 标签: 前缀和由逗号分隔。 例如, 后两个关键词都得到相同的三个标签。

    *** Keywords ***
    Settings tags using separate setting
        [Tags]    my    fine    tags
        No Operation
    
    Settings tags using documentation
        [Documentation]    I have documentation. And my documentation has tags.
        ...                Tags: my, fine, tags
        No Operation

    关键词标签生成的日志和文档所示 Libdoc , 的关键字也可以根据标签搜索。 ——removekeywords 和 ——flattenkeywords 命令行选项也支持选择关键词 标签,和新用法的关键词标签可能被添加在后面的版本。

    类似与 测试用例的标签 ,用户关键词标签 机器人- 前缀 是 保留 特色的机器人框架本身。 用户应该 因此不使用任何标签 机器人- 除非真正激活前缀 特殊的功能。

    用户关键字参数

    大多数用户关键词需要一些参数。 的语法 指定他们可能是最复杂的功能正常 需要与机器人框架,但即使是相对容易的, 特别是在最常见的情况。 参数通常是指定的 的 (参数) 使用相同的设置,参数名称 语法 变量 例如, $ { arg } 

    位置参数

    最简单的方法来指定参数(除了没有) 仅使用位置参数。 在大多数情况下,这就是一切了 这是必要的。

    语法是这样的首先 (参数) 设置是 鉴于,然后在随后的定义参数名称 细胞。 每个参数都是在自己的细胞,使用相同的语法 变量。 关键字必须使用尽可能多的参数 参数名称在其签名。 实际的参数名称不 框架问题,但从用户的角度来看他们应该 尽可能的描述。 建议 在变量名用小写字母,要么 $ { my_arg } $ {我的arg } 或 $ { myArg } 

    *** Keywords ***
    One Argument
        [Arguments]    ${arg_name}
        Log    Got argument ${arg_name}
    
    Three Arguments
        [Arguments]    ${arg1}    ${arg2}    ${arg3}
        Log    1st argument: ${arg1}
        Log    2nd argument: ${arg2}
        Log    3rd argument: ${arg3}
    

    默认值与用户关键词

    在创建用户关键字时,位置参数是充分的 大多数情况下。 然而,有时有用,关键字 默认值 的部分或全部参数。 同时用户关键字 支持默认值,需要新的语法不会增加很多 已经讨论了基本的语法。

    简而言之,默认值被添加到参数,这首先是 等号( )的值,例如 $ { arg } =违约 。 可以有许多参数与违约,但他们都必须有 正常的位置参数。 默认值可以包含一个 变量 上创建 测试套件或全球范围 ,但局部变量的关键字 遗嘱执行人不能使用。 从机器人Framework 3.0,默认值 早些时候还定义基于参数关键字所接受。

    请注意

    默认值是空间敏感的语法。 空间 之前 不允许,和可能的空间 后被认为是默认值本身的一部分。

    *** Keywords ***
    One Argument With Default Value
        [Arguments]    ${arg}=default value
        [Documentation]    This keyword takes 0-1 arguments
        Log    Got argument ${arg}
    
    Two Arguments With Defaults
        [Arguments]    ${arg1}=default 1    ${arg2}=${VARIABLE}
        [Documentation]    This keyword takes 0-2 arguments
        Log    1st argument ${arg1}
        Log    2nd argument ${arg2}
    
    One Required And One With Default
        [Arguments]    ${required}    ${optional}=default
        [Documentation]    This keyword takes 1-2 arguments
        Log    Required: ${required}
        Log    Optional: ${optional}
    
     Default Based On Earlier Argument
        [Arguments]    ${a}    ${b}=${a}    ${c}=${a} and ${b}
        Should Be Equal    ${a}    ${b}
        Should Be Equal    ${c}    ${a} and ${b}
    

    当一个关键字和默认值,只接受多个参数 其中一些需要覆盖,这往往是方便使用 命名参数 语法。 当这个语法是用户使用 关键词,没有指定的参数 $ { } 装饰。 例如,可以使用第二个字以上 下面 $ { __arg1 } 仍将得到其默认值。

    *** Test Cases ***
    Example
        Two Arguments With Defaults    arg2=new value

    正如所有的python支持者必须已经注意到的,语法 指定默认参数严重受Python语法 函数的默认值。

    Varargs和用户关键字

    有时甚至默认值是不够的,有必要 为一个关键字接受 数量可变的参数 。 用户的关键字 也支持这个特性。 所需要的就是拥有 变量列表 这样的 作为 @ { varargs } 在关键字可能位置参数后签名。 这个语法可以结合前面描述的默认值,和 最后列表变量得到所有剩下的参数不匹配 其他参数。 列表变量可以有任意数量的物品,甚至是零。

    *** Keywords ***
    Any Number Of Arguments
        [Arguments]    @{varargs}
        Log Many    @{varargs}
    
    One Or More Arguments
        [Arguments]    ${required}    @{rest}
        Log Many    ${required}    @{rest}
    
    Required, Default, Varargs
        [Arguments]    ${req}    ${opt}=42    @{others}
        Log    Required: ${req}
        Log    Optional: ${opt}
        Log    Others:
        : FOR    ${item}    IN    @{others}
            Log    ${item}
    

    注意,如果使用上面最后一个字与不止一个 参数,第二个参数 $ {选择} 总是给定的 值而不是默认的值。 这种情况即使给定 值是空的。 最后一个例子也说明了一个变量 数量的参数接受一个用户关键字可以用在一个 为 循环 。 这种组合的两个,而先进的功能 有时是非常有用的。

    再次,python支持者可能注意到变量的数量 参数语法非常接近一个Python。

    Kwargs与用户关键字

    用户关键字也可以接受 免费的关键字参数 通过一个 字典 变量 就像 & { kwargs } 作为最后一个参数后可能的位置 参数和可变参数。 当关键字被调用时,该变量会得到所有 命名参数不匹配任何位置参数的关键字 签名。

    *** Keywords ***
    Kwargs Only
        [Arguments]    &{kwargs}
        Log    ${kwargs}
        Log Many    @{kwargs}
    
    Positional And Kwargs
        [Arguments]    ${required}    &{extra}
        Log Many    ${required}    @{extra}
    
    Run Program
        [Arguments]    @{varargs}    &{kwargs}
        Run Process    program.py    @{varargs}    &{kwargs}
    

    上面的最后一个例子展示了如何创建一个包装器的关键字 接受任何位置或命名参数和传递。 看到 kwargs例子 对于一个完整的示例相同的关键字。

    还kwargs支持与用户关键字和kwargs工作非常类似的工作 在Python中。 在签名也向前传递参数时, & { kwargs } 差不多是Python的吗 * * kwargs 

    将参数嵌入到关键字的名字

    机器人框架也另一种方法向用户传递参数 关键字比指定关键字名称后细胞内 在前一节中解释。 这种方法是基于嵌入 参数直接进入关键字名称和它的主要好处是 使其更容易使用真实和清晰的句子作为关键字。

    基本语法

    它一直可以使用关键字的样子 选择狗 从列表 和 从列表中选择猫 ,但所有这些关键字 一定是单独实现。 嵌入参数的概念 入关键字的名字是所有你需要的是一个字的名字 从列表中选择$ {动物} 

    *** Keywords ***
    Select ${animal} from list
        Open Page    Pet Selection
        Select Item From List    animal_list    ${animal}
    

    关键字使用嵌入式论点不能采取任何“正常”的论点 (指定 (参数) 设置)除此之外 就像其他用户创建关键字。 中使用的参数的名称 自然会可以在关键字和他们有不同吗 价值取决于关键字。 例如, $ {动物} 在前面的是有价值的 狗 如果关键字 使用像 从列表中选择狗 。 显然它不是 强制使用这些参数在关键字,他们可以 因此作为通配符。

    这类关键字也用同样的方式作为其他关键词 除了空间和强调不被忽视 的名字。 然而,他们是不区分大小写的像其他关键词。 为 示例中,关键字在上面的例子中可以使用 从列表中选择x ,但不喜欢 选择x fromlist 

    嵌入参数不支持默认值或变量的数量 参数正常参数。 使用变量时 把这些关键词是可能的,但可以减少可读性。 只注意到嵌入式参数处理用户的关键词。

    嵌入参数匹配的太多

    一个棘手的部分使用嵌入式参数是确保 值调用时使用的关键字匹配正确的参数。 这 是一个问题尤其是如果有多个参数和人物 分离也可能出现在给定的值。 例如, 关键字 城市选择$ { } $ {团队} 如果使用不正确工作 与城市包含了部分 选择洛杉矶湖人队 

    解决这个问题很简单,那就是引用的参数(如。 城市选择“$ { } " $ {团队} " ),在引用中使用关键字 格式(如。 选择“洛杉矶”“湖人队” )。 这种方法是 不足以解决所有的冲突,但它是 仍然强烈推荐,因为它使论点脱颖而出 其他关键字。 一个更强大,但也更复杂 解决方案, 使用自定义正则表达式 在定义变量时, 在下一节中解释。 最后,如果事情变得复杂, 这可能是一个更好的主意转而使用普通位置参数。

    参数匹配的问题往往出现在创建太多了 的关键字 忽略了/ / /,/但前缀 。 例如, $ {名称}回家 匹配 给珍妮回家 所以 那 $ {名称} 获得的价值 给珍妮 。 引号的 参数,像在 " $ {名称}”回家 ,解决这个问题 很容易。

    使用自定义正则表达式

    与嵌入参数被称为关键字时,值 匹配在内部使用 正则表达式 (简称regexp)。 默认的逻辑,这样每一个论点 名字是一个模式所取代 . * ? 基本上匹配 任何字符串。 这个逻辑通常很有效,但而已 上面所讨论的,有时候关键字 比赛多 目的 。 引用或分离参数 文本可以帮助但是,例如,下面的测试失败,因为关键字 我执行“ls”与“韩” 这两个定义匹配 关键词。

    *** Test Cases ***
    Example
        I execute "ls"
        I execute "ls" with "-lh"
    
    *** Keywords ***
    I execute "${cmd}"
        Run Process    ${cmd}    shell=True
    
    I execute "${cmd}" with "${opts}"
        Run Process    ${cmd} ${opts}    shell=True

    解决这个问题是使用自定义正则表达式 确保关键字匹配只应该在那 特定的上下文。 能够使用该功能,并完全 理解本节中的示例,您需要理解 最基本的正则表达式语法。

    一个定制的嵌入式参数正则表达式定义之后 基本的参数,参数名称和正则表达式 用冒号分隔。 例如,一个论点,应该匹配 只有数字可以被定义 $ {参数: d + } 。 使用自定义 下面的例子说明了正则表达式。

    *** Test Cases ***
    Example
        I execute "ls"
        I execute "ls" with "-lh"
        I type 1 + 2
        I type 53 - 11
        Today is 2011-06-27
    
    *** Keywords ***
    I execute "${cmd:[^"]+}"
        Run Process    ${cmd}    shell=True
    
    I execute "${cmd}" with "${opts}"
        Run Process    ${cmd} ${opts}    shell=True
    
    I type ${a:d+} ${operator:[+-]} ${b:d+}
        Calculate    ${a}    ${operator}    ${b}
    
    Today is ${date:d{4}-d{2}-d{2}}
        Log    ${date}
    

    在上面的例子中关键字 我执行“ls”与“韩” 匹配 只有 我执行“$ { cmd }”和“$ {选择} " 。 这是保证 因为自定义正则表达式 [^ "]+ 在 我执行 “$ { cmd:[^]}” 意味着一个匹配的参数不能包含任何 引号。 在这种情况下不需要添加自定义的regexp 其他 我执行 变体。

    提示

    如果你引用参数,使用正则表达式 [^ "]+ 直到第一个保证的参数匹配 关闭报价。

    支持正则表达式语法

    使用Python实现,自然使用Python的机器人框架 再保险 非常标准的模块 正则表达式 语法 。 这个语法与嵌入式否则完全支持 参数,但regexp扩展格式 (?…) 不能 使用。 还需要注意的是,嵌入参数进行匹配 不区分大小写。 如果正则表达式语法无效, 创建关键字失败与错误中可见 测试执行 错误 

    转义特殊字符

    有一些特殊字符需要使用时逃走了 自定义正则表达式嵌入参数。 首先,可能关闭 花括号( )的模式需要保住了一个反斜杠 ( ),否则参数就会结束了。 这是 与关键字前面的示例中所示 今天是$ {日期: d { 4 } - d { 2 } d { 2 } } 

    反斜杠(  )是一种特殊的字符在Python中常规 表达式语法,因此需要逃脱了如果你想要一个 文字反斜杠字符。 在这种情况下最安全的转义序列 是四个反斜杠(   ),但是,这取决于下一个 性格,还两个反斜杠可能就足够了。

    注意到关键字名称和可能的嵌入参数 应该 不 使用正常的逃脱了 测试数据泄漏 规则 。 这意味着,例如,反斜杠的表达式 就像 $ {名称: w + } 不应该逃跑。

    使用自定义的变量嵌入参数正则表达式

    每当定制的嵌入式参数使用正则表达式时,机器人 框架会自动提高指定的regexp,这样他们 匹配变量除了与模式相匹配的文本。 这 意味着它总是可以用关键字使用变量 嵌入参数。 例如,下面的测试用例能通过 从早期的例子使用关键词。

    *** Variables ***
    ${DATE}    2011-06-27
    
    *** Test Cases ***
    Example
        I type ${1} + ${2}
        Today is ${DATE}
    

    一个缺点的变量自动定制正则匹配 表达式是可能值的关键字 实际上并没有匹配指定的正则表达式。 例如,变量 $ {日期} 在上面的例子中可以包含任何价值 今天是$ {日期} 仍将匹配相同的关键字。

    行为驱动开发的例子

    最大的好处有参数作为关键字的名字是它的一部分 使它更容易使用更高级的句子的关键词在编写测试 病例 行为驱动方式 。 下面的例子说明了这一点。 请注意 也前缀 鉴于 和 然后 是 遗漏了 关键字定义 

    *** Test Cases ***
    Add two numbers
        Given I have Calculator open
        When I add 2 and 40
        Then result should be 42
    
    Add negative numbers
        Given I have Calculator open
        When I add 1 and -2
        Then result should be -1
    
    *** Keywords ***
    I have ${program} open
        Start Program    ${program}
    
    I add ${number 1} and ${number 2}
        Input Number    ${number 1}
        Push Button     +
        Input Number    ${number 2}
        Push Button     =
    
    Result should be ${expected}
        ${result} =    Get Result
        Should Be Equal    ${result}    ${expected}
    

    请注意

    在机器人框架受嵌入参数特性 如何 步骤定义 中创建一个受欢迎的BDD工具

    用户关键字返回值

    同样作为图书馆的关键词,也可以返回用户关键词 值。 通常的定义返回值 (返回) 设置,但也可以使用 内装式 关键字 从关键字 和 从关键字如果回来 。 无论如何返回值,就可以 分配给变量 在测试用例和其他用户的关键词。

    使用 (返回) 设置

    最常见的情况是,用户关键字返回一个值,它是 分配给一个标量变量。 当使用 (返回) 设置,这是 完成在接下来的细胞通过返回值后设置。

    用户关键字也可以返回多个值,然后可以分为 几个标量变量,变量列表,或标量变量 和一个列表变量。 几个可以简单地通过返回值 在不同的细胞后,指定这些值 (返回) 设置。

    *** Test Cases ***
    One Return Value
        ${ret} =    Return One Value    argument
        Some Keyword    ${ret}
    
    Multiple Values
        ${a}    ${b}    ${c} =    Return Three Values
        @{list} =    Return Three Values
        ${scalar}    @{rest} =    Return Three Values
    
    *** Keywords ***
    Return One Value
        [Arguments]    ${arg}
        Do Something    ${arg}
        ${value} =    Get Some Value
        [Return]    ${value}
    
    Return Three Values
        [Return]    foo    bar    zap

    使用特殊的关键字返回

    内装式 关键字 从关键字 和 从关键字如果回来 从用户的关键字有条件地允许返回中间的字。 他们两人也接受可选的处理完全一样的返回值 与 (返回) 设置上面所讨论的。

    下面的第一个例子是功能与之前相同 (返回) 设置的例子。 第二,更先进的例子 演示了返回内部条件 for循环 

    *** Test Cases ***
    One Return Value
        ${ret} =    Return One Value  argument
        Some Keyword    ${ret}
    
    Advanced
        @{list} =    Create List    foo    baz
        ${index} =    Find Index    baz    @{list}
        Should Be Equal    ${index}    ${1}
        ${index} =    Find Index    non existing    @{list}
        Should Be Equal    ${index}    ${-1}
    
    *** Keywords ***
    Return One Value
        [Arguments]    ${arg}
        Do Something    ${arg}
        ${value} =    Get Some Value
        Return From Keyword    ${value}
        Fail    This is not executed
    
    Find Index
        [Arguments]    ${element}    @{items}
        ${index} =    Set Variable    ${0}
        :FOR    ${item}    IN    @{items}
            Return From Keyword If    '${item}' == '${element}'    ${index}
            ${index} =    Set Variable    ${index + 1}
        Return From Keyword    ${-1}    # Could also use [Return]
    

    请注意

    这两个 从关键字 和 从关键字如果回来 因为机器人框架2.8。

    用户关键字拆卸

    用户使用关键字可以定义拆解 (拆卸) 设置。

    关键字拆卸工作一样 测试用例 拆卸 。 最重要的是,拆卸总是一个 关键字,尽管它可以被另一个用户的关键字,就会执行 也当用户关键字失败。 此外,所有的步骤 拆卸执行即使其中一个失败。 然而,失败 关键字拆卸将会失败的测试用例和后续步骤 测试不运行。 的名称关键字执行拆卸 也可以是变量。

    *** Keywords ***
    With Teardown
        Do Something
        [Teardown]    Log    keyword teardown
    
    Using variables
        [Documentation]    Teardown given as variable
        Do Something
        [Teardown]    ${TEARDOWN}
  • 相关阅读:
    HDU4714+三分
    HDU1465+递推
    HDU1437+模拟
    HDU1796+容斥原理
    HDU1432+几何
    Linux---Ls命令 初级实现
    HDU1411+四面体的体积
    HDU1412
    HDU1431+简单题
    请定义一个交通工具(Vehicle)的类,其中有: 属性:速度(speed),体积(size)等等
  • 原文地址:https://www.cnblogs.com/kuihua/p/5397395.html
Copyright © 2011-2022 走看看