3. RobotFramework 变量
Robot Framework 有自己的变量,分别可以当做标量、列表、字典使用。另外,环境变量可以用 %{ENV_VAR}
的语法去使用。
变量的定义
在 variable 模块中定义变量
在 variable 模块中标量的定义格式为 ${var} value
,列表的定义格式为 @{var} value1 value2 ... valuen
,字典的定义格式为 &{var} key1=value1 key2=value2 ... keyn=valuen
。在 variable 模块中定义的变量所有测试用例都可以调用。
*** Test Cases ***
First Test Case
Log To Console ${scalar}
Log To Console ${list}
Log To Console ${dict}
Second Test Case
Log To Console ${scalar}
Log To Console ${list}
Log To Console ${dict}
*** Variables ***
${scalar} Number
@{list} 1 2 3
&{dict} one=1 two=2 three=3
通过 robot main.robot
命令执行结果如下:
PS C:\Users\Jathon\Desktop\Robot Framework> robot main.robot
==============================================================================
Main
==============================================================================
First Test Case Number
.['1', '2', '3']
.{'one': '1', 'two': '2', 'three': '3'}
First Test Case | PASS |
------------------------------------------------------------------------------
Second Test Case Number
.['1', '2', '3']
.{'one': '1', 'two': '2', 'three': '3'}
Second Test Case | PASS |
------------------------------------------------------------------------------
Main | PASS |
2 tests, 2 passed, 0 failed
==============================================================================
Output: C:\Users\Jathon\Desktop\Robot Framework\output.xml
Log: C:\Users\Jathon\Desktop\Robot Framework\log.html
Report: C:\Users\Jathon\Desktop\Robot Framework\report.html
在 Test Cases 模块中定义变量
在 Test Cases 模块中标量的定义格式为 ${var} Set Variable value
,列表的定义格式为 @{var} Create List value1 value2 ... valuen
,字典的定义格式为 &{var} Create Dictionary key1=value1 key2=value2 ... keyn=valuen
。因为 Test Cases 模块是关键字驱动的,所以在该模块中需要通过使用关键字的方式定义变量。同时变量的作用域仅限当前测试用例。
*** Test Cases ***
First Test Case
${scalar} Set Variable Number
@{list} Create List 1 2 3
&{dict} Create Dictionary two=2 three=3
Log To Console ${scalar}
Log To Console ${list}
Log To Console ${dict}
Second Test Case
Log To Console ${scalar}
Log To Console ${list}
Log To Console ${dict}
通过 robot main.robot
命令执行结果如下:
PS C:\Users\Jathon\Desktop\Robot Framework> robot main.robot
==============================================================================
Main
==============================================================================
First Test Case ...Number
.['1', '2', '3']
.{'one': '1', 'two': '2', 'three': '3'}
First Test Case | PASS |
------------------------------------------------------------------------------
Second Test Case | FAIL |
Variable '${scalar}' not found.
------------------------------------------------------------------------------
Main | FAIL |
2 tests, 1 passed, 1 failed
==============================================================================
Output: C:\Users\Jathon\Desktop\Robot Framework\output.xml
Log: C:\Users\Jathon\Desktop\Robot Framework\log.html
Report: C:\Users\Jathon\Desktop\Robot Framework\report.html
变量的使用
在上面的例子中,通过关键字 Log To Console 调用列表和字典也都写成了 ${list}
和 ${list}
,那是因为关键字 Log To Console 只接收一个参数,用 ${var}
的方式不管变量 var 是列表或者字典都会被视为一个参数。而 @{var}
会将 var 列表展开,类似 Python 语法中给函数传参时的 *arges
;&{var}
则会将 var 字典展开,类似 Python 语法中给函数传参时的 **kwargs
。
*** Test Cases ***
First Test Case
Log To Console @{list}
Log To Console 1 2 3
Second Test Case
${str} Catenate ${scalar} ${scalar} ${scalar}
Log To Console ${str}
${str} Catenate @{list}
Log To Console ${str}
${str} Sum &{dict}
Log To Console ${str}
*** Variables ***
${scalar} Number
@{list} 1 2 3
&{dict} one=1 two=2 three=3
*** Keywords ***
Sum
[Arguments] ${one} ${two} ${three}
[Return] ${one} ${two} ${three}
通过 robot main.robot
命令执行结果如下:
PS C:\Users\Jathon\Desktop\Robot Framework> robot main.robot
==============================================================================
Main
==============================================================================
First Test Case | PASS |
------------------------------------------------------------------------------
Second Test Case .Number Number Number
..1 2 3
..1 2 3
Second Test Case | PASS |
------------------------------------------------------------------------------
Main | PASS |
2 tests, 2 passed, 0 failed
==============================================================================
Output: C:\Users\Jathon\Desktop\Robot Framework\output.xml
Log: C:\Users\Jathon\Desktop\Robot Framework\log.html
Report: C:\Users\Jathon\Desktop\Robot Framework\report.html
在这个例子的 First Test Case 中两条语句的作用是等价的,因为 Log To Console 只接收一个参数,但是调用时传入了多个参数。所以虽然最终执行 PASS 了,但是并没有将日志打印到控制台。而 Second Test Case 中的语句成功将结果打印到了控制台。
资源文件和变量文件的导入
资源文件的导入
使用 Settings 模块中的 Resource 关键字可以导入资源文件。资源文件的路径作为设置的参数给出。使用纯文本格式创建资源文件时,可以使用普通的.robot扩展名,但建议使用专用的.resource扩展名将资源文件与测试用例文件分开。
*** Variables ***
${RESOURCE_SCALAR} Number
@{RESOURCE_LIST} 1 2 3
&{RESOURCE_DICT} one=1 two=2 three=3
当定义好上述资源文件并命名为 variables.resource 之后,在同目录下的测试用例文件中就可以通过如下方式导入资源文件并使用资源文件中定义好的变量。
*** Settings ***
Resource ./variables.resource
*** Test Cases ***
Resource Example
Log To Console ${RESOURCE_SCALAR}
Log To Console ${RESOURCE_LIST}
Log To Console ${RESOURCE_DICT}
变量文件导入
变量文件和资源文件功能类似,只不过使用的不是 Robot Framework 语法。可以是 Python 文件或者 YAML 文件。如果使用 YAML 文件作为变量文件,需要使用 pip install pyyaml
安装第三方包使 Python 能够解析 YAML 文件。
定义如下 Python 变量文件并命名为 variables.py
PY_SCALAR = 'Number'
PY_LIST = [1, 2, 3]
PY_DICT = {'one': 1, 'two': 2, 'three': 3}
定义好如下 YAML 变量文件并命名为 variables.yaml
YAML_SCALAR:
Number
YAML_LIST:
- 1
- 2
- 3
YAML_DICT:
one: 1
two: 2
three: 3
在同目录下的测试用例文件中就可以通过如下方式导入变量文件并使用变量文件中定义好的变量。
*** Settings ***
Variables ./variables.py
Variables ./variables.yaml
*** Test Cases ***
Py Example
Log To Console ${PY_SCALAR}
Log To Console ${PY_LIST}
Log To Console ${PY_DICT}
YAML Example
Log To Console ${YAML_SCALAR}
Log To Console ${YAML_LIST}
Log To Console ${YAML_DICT}