用户关键字的参数

大部分的用户关键字需要接受一定的参数. 用来设置参数的语法可能是Robot Framework最复杂的特性, 但即使如此, 在大部分情况下也还是比较容易的.

参数通过 [Arguments] 设置, 参数名称的语法格式和 变量 一样, 如 ${arg}.

位置参数

指定参数最简单的方式(除了完全不使用参数的情况)是只使用位置参数. 大部分情况下, 位置参数就足够了.

首先是 [Arguments], 后面的单元格中是声明的参数名称. 每个参数占一个单元格, 参数名称的语法格式和变量一样. 当关键字被调用时, 需要传递和此处定义相同数量的参数. 对于框架来说, 参数的名称并不重要, 不过从用户的角度看, 还是需要尽可能的描述清楚. 推荐使用小写字母作为名称, 如: ${my_arg}, ${my arg}${myArg}.

  1. *** Keywords ***
  2. One Argument
  3. [Arguments] ${arg_name}
  4. Log Got argument ${arg_name}
  5.  
  6. Three Arguments
  7. [Arguments] ${arg1} ${arg2} ${arg3}
  8. Log 1st argument: ${arg1}
  9. Log 2nd argument: ${arg2}
  10. Log 3rd argument: ${arg3}

默认值参数

大部分情况下仅用位置参数创建用户关键字就足够了. 不过, 有时候为关键字的某些参数指定 缺省值 也是很有用的. 要支持默认值, 在基础语法上添加少量改动即可.

为参数添加默认值只需要在参数名后面跟上等号(=), 然后跟上默认值即可, 例如 ${arg}=default. 可以为多个参数指定默认值, 指定默认值的参数必须跟在普通的位置参数后面.

除了本地局部作用域的变量不可作为默认值外, 参数的默认值可以包含来自 其它作用域变量.

从Robot Framework 3.0版本开始, 默认值可以基于关键字先前接受的参数来定义.

注解

默认值的语法是对空格敏感的. 等号 = 前面不允许有空格,而等号后面的空格则被视作默认值的一部分.

  1. *** Keywords ***
  2. One Argument With Default Value
  3. [Arguments] ${arg}=default value
  4. [Documentation] This keyword takes 0-1 arguments
  5. Log Got argument ${arg}
  6.  
  7. Two Arguments With Defaults
  8. [Arguments] ${arg1}=default 1 ${arg2}=${VARIABLE}
  9. [Documentation] This keyword takes 0-2 arguments
  10. Log 1st argument ${arg1}
  11. Log 2nd argument ${arg2}
  12.  
  13. One Required And One With Default
  14. [Arguments] ${required} ${optional}=default
  15. [Documentation] This keyword takes 1-2 arguments
  16. Log Required: ${required}
  17. Log Optional: ${optional}
  18.  
  19. Default Based On Earlier Argument
  20. [Arguments] ${a} ${b}=${a} ${c}=${a} and ${b}
  21. Should Be Equal ${a} ${b}
  22. Should Be Equal ${c} ${a} and ${b}

当一个关键字可接受多个带默认值的参数, 如果调用时仅需要覆盖其中一些, 则此时使用 命名参数 将会非常方便. 使用这种语法时, 指定值的参数名称要脱去 ${}. 例如, 上面第二个关键字可以按照下面的方法调用, 其中 ${arg1} 仍然是其默认值.

  1. *** Test Cases ***
  2. Example
  3. Two Arguments With Defaults arg2=new value

Pythonistas肯定都已经注意到了, 这种指定默认值的语法几乎就是参照Python中函数的默认值语法实现的.

不定参数

有时仅有默认值也不够, 关键字可能会需要接受 可变数量的参数. 用户关键字同样也支持这个特性, 只需在关键字的参数签名中使用 列表变量@{varargs} 作为参数声明. 同时不定数量的参数可以和默认值参数混用, 前面的参数先进行匹配, 列表参数最终接受所有剩余的参数, 数量可以是0个到任意个.

  1. *** Keywords ***
  2. Any Number Of Arguments
  3. [Arguments] @{varargs}
  4. Log Many @{varargs}
  5.  
  6. One Or More Arguments
  7. [Arguments] ${required} @{rest}
  8. Log Many ${required} @{rest}
  9.  
  10. Required, Default, Varargs
  11. [Arguments] ${req} ${opt}=42 @{others}
  12. Log Required: ${req}
  13. Log Optional: ${opt}
  14. Log Others:
  15. : FOR ${item} IN @{others}
  16. \ Log ${item}

注意到上例中最后一个关键字如果使用多个参数调用, 则第2个参数总是会传给 ${opt} 覆盖掉默认值. 最后的例子同时展示了如何在 FOR循环 中逐个获取任意数量的参数.

同样, Pythonistas会注意到这个语法和Python中的很相似.

用户关键字的Kwargs

用户关键字同样可以接受 任意关键字参数, 只需在参数列表的最后, 在位置参数和任意数量参数的后面, 使用 字典变量&{kwargs}. 当该关键字被调用时, 前面没有被匹配的 命名参数 都会传递给该参数.

  1. *** Keywords ***
  2. Kwargs Only
  3. [Arguments] &{kwargs}
  4. Log ${kwargs}
  5. Log Many @{kwargs}
  6.  
  7. Positional And Kwargs
  8. [Arguments] ${required} &{extra}
  9. Log Many ${required} @{extra}
  10.  
  11. Run Program
  12. [Arguments] @{varargs} &{kwargs}
  13. Run Process program.py @{varargs} &{kwargs}

上面最后一个例子展示了如何封装一个关键字, 可以接受任意的位置或命名参数, 并传递给被封装的关键字. 更详细的例子参见 Kwargs示例.

这个语法同样和Python中的kwargs很相似. &{kwargs} 的用法和 **kwargs 基本雷同.