目录
资源文件
变量文件
如何使用变量文件
测试用例文件和测试套件初始化文件中的用户关键字和变量只能在创建它们的文件中使用,但资源文件提供了一种在不同测试文件中进行共享的机制。由于资源文件结构非常接近测试用例文件,因此很容易创建它们。
变量文件也提供了一种创建和共享变量的强大机制。例如,它们允许除字符串以外的值,并允许动态创建变量。
使用“ Settings”表中的Resource 导入资源文件。资源文件的路径在设置名称后面的单元格中给出。
如果路径以绝对格式给出,则直接使用。否则的话,先在导入文件所在的目录搜索资源文件。如果在那里找不到该文件,则从PYTHONPATH中的目录中搜索该文件。路径可以包含变量,建议使用这些变量,以便路径与系统无关(例如,$ {RESOURCES} /login_resources.html或 $ {RESOURCE_PATH})。此外,路径中的斜杠(“/”)Windows系统下会自动更改为反斜杠(“\”)。
使用资源文件就可以将其中的业务数据提取为变量,对业务逻辑进行封装,这样在后续的测试过程中,只需设置每次测试的测试数据,而不必更改业务逻辑。
举个例子,我们对baidu搜索进行测试时,业务逻辑是:
[打开浏览器] - [输入搜索内容] - [点击搜索按钮] - [关闭浏览器]
资源文件名为业务关键字.txt,文件内容为:
*** Settings ***
Library Selenium2Library #导入Selenium2Library库
*** Keywords ***
百度搜索
[Arguments] ${content}
Open Browser http://www.baidu.com/ chrome
Title Should Be 百度一下,你就知道
Input Text //*[@id='kw'] ${content}
Click Element //*[@id='su']
Close Browser
测试文件代码:
*** Settings ***
Resource 业务关键字.txt #导入资源文件:业务关键字.txt
*** Test Cases ***
test
百度搜索 陈伟霆 #执行关键字百度搜索,参数为陈伟霆
执行结果:
Starting test: Rf Demo1.Resource Test.test
20190629 13:59:56.092 : INFO : Opening browser 'chrome' to base url 'http://www.baidu.com/'.
20190629 14:00:05.077 : INFO : Page title is '百度一下,你就知道'.
20190629 14:00:05.080 : INFO : Typing text '陈伟霆' into text fi
eld '//*[@id='kw']'.
20190629 14:00:05.550 : INFO : Clicking element '//*[@id='su']'.
Ending test: Rf Demo1.Resource Test.test
说明:
资源文件的扩展名可以是 .txt,.robot,.resource,最好用.resource,这样就能方便区分文件的用途。
变量文件中的变量可在测试数据中使用。变量可以使用变量表创建或从命令行设置,但变量文件可以动态创建变量,而且变量可以包含任何对象。
变量文件通常实现为Python模块,有两种不同的方法可用于创建变量:
1、方法一:直接创建变量
变量就是模块的属性。例如, MY_VAR = 'my value' 就创建了变量 ${MY_VAR}, 后面是变量的值。在RF中使用变量文件时就像Python的模块一样被导入, 非下划线(_)开头的全局属性均被视作变量。
变量的名字是不区分大小写的, 通常推荐大写字母用作全局变量和属性。
代码示例1:
变量文件:myvar1.py
#encoding=utf-8
VARIABLE = "An example string"
ANOTHER_VARIABLE = "This is pretty easy!"
INTEGER = 42
STRINGS = ["one", "two", "kolme", "four"]
NUMBERS = [1, INTEGER, 3.14]
MAPPING = {"one": 1, "two": 2, "three": 3}
rf文件:myvar1.robot
*** Setting ***
Variables myvar.py
*** Test Cases ***
test
Log ${VARIABLE}
Log ${MAPPING}
执行结果:
代码示例2:动态的创建变量
变量文件:myvar2.py
#encoding=utf-8
import time
import random
NOW = time.asctime()
RANDOM = random.random()
rf文件:myvar2.robot
*** Setting ***
Variables myvar2.py
*** Test Cases ***
test
Log ${NOW}
Log ${RANDOM}
执行结果:
2、方法二:通过特殊函数获取变量
变量文件中可以包含一个特殊的函数 get_variables (或者 getVariables), 该函数将变量按字典的形式返回。该函数还可以接受参数, 所以这种方法非常灵活。如果这个函数存在, Robot Framework将调用该函数, 并且预期返回的结果是Python的字典类型或者Java中的 Map 类型, 其中变量的名称是键, 而值就是变量的值。
代码示例一:通过不同的参数设定不同的变量
变量文件:myvar3.py
#encoding=utf-8
def get_variables(env = "test"):
if env == 'test':
# test environment
variables = {
"phone": "1833",
"default_host": "http://192.16.1.1:8086",
"databaseurl": ["192.1.11", 3306, "root", "pa117!"],
"UISdatabaseurl": ["192.16.14", 3306]
}
elif env == 'pro':
# product environment
variables = {
"phone": "1591",
"default_host": "http://pani.sv.com:886",
"databaseurl": ["192.12.13", 8066, "root", "12456"],
"UISdatabaseurl": ["192.1.6.14", 3306]
}
else:
# back environment
variables = {
# urlConfig
"mainurl": "http:",
"phone": "1828833",
"databaseurl": ["192.13", 8066, "root", "12456"],
# dbConfig
"db_trade": "",
"db_trade_pw": ""
}
return variables
rf文件:myvar3.robot,使用默认参数
*** Setting ***
Variables myvar3.py
*** Test Cases ***
test
Log ${phone}
Log ${databaseurl}
执行结果:
rf文件:myvar3.robot,指定参数值pro
*** Setting ***
Variables myvar3.py pro
*** Test Cases ***
test
Log ${phone}
Log ${databaseurl}
执行结果:
rf文件:myvar3.robot,使用变量
*** Setting ***
Variables myvar3.py ${arg}
*** Test Cases ***
test
Log ${phone}
Log ${databaseurl}
使用命令行执行结果:-v 参数名:参数值
所有的测试数据文件都可以在设置表Setting中通过 Variables 来导入变量。
如果变量文件可以接受参数, 这些参数跟在路径后面的单元格中, 并且这些参数同样可以使用变量。
*** Settings ***
Variables myvariables.py
Variables ../data/variables.py
Variables taking_arguments.py arg1 ${ARG2}
注:变量文件中定义的所有变量在导入它的测试文件中都是可见的,如果同时导入了多个变量文件并且存在名称冲突, 则最先导入的生效。此外, 通过变量表格和命令行方式设置的变量会覆盖变量文件中的同名变量。
2、方法二:--variablefile选项
通过命令行选项 --variablefile 来指定变量文件。选项后面跟着文件的路径, 如果要传递参数的话, 使用冒号 (:) 来分隔:
示例如下:
--variablefile myvariables.py
--variablefile path / variables.py
--variablefile /absolute/path/common.py
--variablefile taking_arguments.py:arg1:arg2
从Robot Framework 2.8.7版本开始, 还可以使用分号(;)作为参数的分隔符. 这种情况对参数本身也包含冒号时特别有用. 不过需要注意, 在UNIX-like操作系统中, 要使用双引号将整个选项值括起来:
这些变量文件中的变量在所有测试文件中全局可见, 这点和通过选项 --variable 来设置 单个变量 类似。如果同时使用了 --variablefile 和 --variable 选项,则使用 --variable 选项设置的变量。