robot framework —— 变量文件
-
何为变量文件?
变量文件中包含了测试数据中的变量。虽然变量可以通过变量表格中创建, 或者通过命令行设置, 不过这些方法有所局限, 而变量文件可以动态地创建任意类型的变量。
变量文件一般由Python模块实现, 有两种不同的方法来创建变量:
1、方法一:直接创建变量
变量就是模块的属性。最简单的情形下, 这种语法几乎不需要真正的编程。 例如, MY_VAR = 'my value'
就创建了变量 ${MY_VAR}
, 后面是变量的值。
当使用变量文件时, 它们像Python的模块一样被导入, 其中的非下划线(_
)开头的全局属性均被视作变量。
变量的名字是不区分大小写的, 通常推荐大写字母用作全局变量和属性。
1.1 示例1:
导入变量文件 myvar1.py
rf用例 test2:
执行结果:pass
2.2 示例2,使用下面的方式在变量表中创建 :
2.3 示例3,动态创建变量:
因为变量文件就是真正的编程语言, 其中几乎可以包含任意的代码逻辑来设置变量
2.4 示例4,与示例3类似,真实的代码中的数据可以是来自数据库, 或者外部文件, 甚至是要求用户输入。
rf用例:
执行结果pass:
选择性的包含变量
当 Robot Framework 处理变量文件时, 这些文件(模块)中所有的属性只要不是以下划线开头, 都会被视作变量, 这其中甚至包括函数或类, 不管是在文件中创建的还是从其它模块导入的。例如, 上面最后一个例子中除了 ${AREA1}
和 ${AREA2}
这两个我们预期的变量外, 最终还包含了 ${math}
和 ${get_area}
这两个变量。
虽然通常情况下这些额外的变量不会造成什么问题, 但是它们有可能会无意覆盖其它的变量名, 由此引发的错误将难以定位。推荐的做法是使用特殊属性 __all__
, 将要作为变量暴露的属性名放在列表中赋值给它。
rf用例:
执行结果fail:
2、方法二:通过特殊函数获取变量
变量文件中可以包含一个特殊的函数 get_variables
(或者 getVariables
), 该函数将变量按字典的形式返回。该函数还可以接受参数, 所以这种方法非常灵活。
如果这个函数存在, Robot Framework将调用该函数, 并且预期返回的结果是Python的字典类型或者Java中的 Map
类型, 其中变量的名称是键, 而值就是变量的值。
2.1 示例1:
rf用例:
执行方法一:
执行方法二:
执行方法三:
2.2 示例2:演示变量文件如何使用参数
在更真实的场景中, 这些参数可能是一个用来读取参数的外部文件的路径, 或者是数据库的地址。:
get_variables
可以接受参数, 这样可以很方便的改变实际要创建什么样的变量。参数的数量和类型和普通的Python函数并无二致。当在测试数据中使用变量文件时, 调用参数跟在变量文件后面的表格里, 而在命令行中则通过冒号或分号和文件路径分开。
示例:见另一篇博文介绍https://www.cnblogs.com/chengchengla1990/p/9890926.html
-
如何使用变量文件?
1、方法一:所有的测试数据文件都可以在设置表Setting中通过 Variables 来导入变量。
如果 变量文件可以接受参数, 这些参数跟在路径后面的单元格中, 并且这些参数同样可以使用变量。
注:变量文件中定义的所有变量在导入它的测试文件中都是可见的,如果同时导入了多个变量文件并且存在名称冲突, 则最先导入的生效。此外, 通过变量表格和命令行方式设置的变量会覆盖变量文件中的同名变量。
2、方法二:
通过命令行选项 --variablefile
来指定变量文件。选项后面跟着文件的路径, 如果要传递参数的话, 使用冒号 (:
) 来分隔:
示例如下:
从Robot Framework 2.8.7版本开始, 还可以使用分号(;
)作为参数的分隔符. 这种情况对参数本身也包含冒号时特别有用. 不过需要注意, 在UNIX-like操作系统中, 要使用双引号将整个选项值括起来:
这些变量文件中的变量在所有测试文件中全局可见, 这点和通过选项 --variable
来设置 单个变量 类似.
如果同时使用了 --variablefile
和 --variable
选项, 并且发生变量名冲突, 则使用 --variable
选项设置的变量胜出.