Robot Framework - Variable file
RF导入变量文件
在Setting中导入
Setting中导入变量文件时,和导入外部资源文件类似。变量文件的路径可以包含参数,如果一个变量文件接受参数,那么它们也可以是变量。
Path最好使用相对路径,如下:
*** Settings ***
Resource ../../eRes.txt
Variables ../test.py
Variables ../comVar.py product ${arg2}
Variables ${RESOURCES}/common.py
Ride 中导入变量文件:
命令行导入
pybot --help
查看相关帮助信息如下:
从命令行导入的Varialbe File,作用域范围是全局可用的。注意,pybot -v 是导入变量,pybot -V 才是导入变量文件。如果通过 pybot -v 和 pybot -V 创建的变量名存在冲突,则pybot -v选项创建的变量将会被保留。
如果变量文件需要参数,则可以使用冒号来分隔path和params。如果在Winodws系统中使用绝对路径导入变量文件,则驱动器号后面的冒号不会被认为是一个分隔符:如下:
pybot --variablefile /relative_path/variables.py #相对路径
pybot -V /absolute_path/common.py #绝对路径
pybot -V C:\path\variables.py #绝对路径
pybot -V ../common.py:product #变量文件有一个参数
pybot -V needTwoParams.py:arg1:arg2 #变量文件有多个参数
pybot -V "../common.py:product" -V "../test.py" #导入多个变量文件
如果多个文件导入时存在变量重名的情况,则最先导入的变量有效 。
创建变量文件
直接创建
基本语法
在变量文件中直接给变量赋值,语法非常简单,变量名大小写不敏感。
# -*- coding: utf-8 -*-
# python
pyuser = 'Brian' # 在RF中等同于:${pyuser} |Set Variable |'Brian'
pytags = ["大宗商品","供应链金融",'2C电商'] # list
pyparams = {'username':'Brian','passwd':'20171219'}
_pykey = "f007688f401311e782617cd30ab49afc"
__all__ = ['pyuser','pytags'] #变量名需要加引号
RF中的写法:
#rf中的写法log many ${pyuser} ${pytags} ${pyparams}${pytags} Evaluate '${pytags}'.decode('utf8')${type_pyuser} Evaluate type($pyuser)${type_pytags} Evaluate type($pytags)${type_pyparams} Evaluate type($pyparams)
补充几点:
- 变量文件中创建的所有以下划线开头的变量不会被RF导入,如 ''_pykey'' ;除此之外,也可以使用''__all__'' (双下滑线)将真正要被RF导入的Variables的加为一个lis;比如上面的例子中,就只有pyuser和pytags被认为是variable,而pyparams将会被忽略;
- 为了更明确的定义list变量或者dict变量,可以在变量名称中加上前缀"LIST__" (两个下划线)或者 "DICT__"。RF中引用该变量时,不会把前缀当成变量名的一部分。前缀的作用是告诉RF该变量将会是"list-like"或者"dict-like"类型,框架会执行响应的检查验证。
LIST__pytags = ["大宗商品","供应链金融",'2C电商'] # prefix,list-like
DICT__pyparams = {"username":"pyuser", "passwd":"20171219"} # prefix,dict-like
- 变量文件中创建的Set类型或Tuple类型的变量,应该避免在RF中引用,否则可能会报语法错误;
- 通常来说,全局变量名称应该大写,非全局变量小写;
使用对象最为变量的值
变量文件中的变量不限于只有字符串或其他基本类型作为值。相反,它们的变量可以包含任何对象。在下面的示例中,变量$ {MAPPING}包含一个具有两个值的Java Hashtable(这个示例只在Jython上运行测试时才起作用)。
from java.util import HashtableMAPPING = Hashtable()
MAPPING.put("one", 1)
MAPPING.put("two", 2)
第二个示例创建了$ {MAPPING}作为Python字典,并且还包含两个从同一个文件中实现的自定义对象创建的变量。
MAPPING = {'one': 1, 'two': 2}class MyObject:def __init__(self, name):self.name = nameOBJ1 = MyObject('John')
OBJ2 = MyObject('Jane')
动态创建变量
由于Variable File本质上是编程语言进行变量的创建,所以可以达到动态创建变量的效果。
import os
import random
import time
import datetime
PATH = os.getcwd() #获得当前路径
RANDOM_INT = random.randint(0,9999) #random integer in range [0,9999]
CURRENT_TIME = time.time() # 1513661957.0591035
NOW = datetime.datetime.now() #2017-12-19
YEAR = NOW.year
MONTH = NOW.month
HOUR = NOW.hour
RF中打印变量的值如下:
YAML语法
变量文件也可以YAML文件实现。官方例子如下:
string: Hello, world!
integer: 42
list:- one- two
dict:one: yksitwo: kaksiwith spaces: kolme
#RF中的写法
*** Variables ***
${STRING} Hello, world!
${INTEGER} ${42}
@{LIST} one two
&{DICT} one=yksi two=kaksi
使用特殊函数
如果在Variable File中存在特殊函数(getVariables、get_variable),可以通过特殊函数来得到变量,此机制使得变量的创建变的非常灵活。
如果特殊函数存在,RF框架会调用此函数来获取函数。 函数的预期返回应该是Python的dict 或者 Java的Map, 其中key为Variable名称, value为Variable值。 其他规则和直接创建变量的情形一样:,既可以创建scalar, list, dict各种类型的变量,也支持特殊前缀"LIST__" 和 "DICT__"等。
# -*- coding: utf-8 -*-def getVariables(env = 'test'):if env == 'product':#production environmentDICT__variables = {"dbPort" : "3308","dbUser": "qt_product","dbPasswd" : "qt_product",}else :#test environmentDICT__variables = {"dbPort" : "3309","dbUser": "qt_test","dbPasswd" : "qt_test",}#全局变量,不区分运行环境globalvars = {'projectID':'3456','userID':'6'} DICT__variables['globalvars'] = globalvars #RF中取值用${globalvars['userID']}return DICT__variables
如果在RF中引入该Variable file文件时不输入参数,则变量的值打印结果为:
如果输入参数product,则变量的值打印结果为:
切换运行环境
一般来说,自动化测试的用例不仅只在测试环境运行,可能情况下有三套运行环境:测试环境、灰度环境(沙盒/预发布)、生产环境。调试或者辅助验证测试时,切环境改变量甚是麻烦。这些变量包括但不限于:一些url信息,数据库信息,预置用户信息等等。
对应以上需求,提供以下解决思路。
第一种思路是按照运行环境,把变量写入不同的变量文件。说测试环境的用到的变量写入testVars.py,生产环境下的变量写入productionVars.py,运行时根据环境pybot -V导入文件。
第二种思路是使用特殊函数,在一个文件中创建所有环境下需要的变量,函数入参为测试环境,默认参数为test,变量文件样例在上面已经给出了。
最后,我们来探讨一下,所谓的RF的全局变量,想要只在用例里改变它的值,并且后续用例里用改变后的值,提供思路:通过变量文件,利用字典update方法将改变内存里的值的特性。
如上面的例子中,变量文件中定义了一个变量projectID:
globalvars = {'projectID':'3456','userID':'6'} DICT__variables['globalvars'] = globalvars
下图中两个suite 文件Test1和Test2都导入了该变量文件,在Test1下的case1中更新该变量的值,在Test2的case2下,它的值还是6666,如果再次用update的方法更新时,后续所有的Case中的值都会是更新后的值。如此,达到用例中间变更变量后续可用的目的。
参考文档
- rf变量进阶--变量文件的使用,环境快捷切换等
,雪霁 - 其他测试框架 测试开发之路----框架中数据的管理策略
- robot framework - variable file
- 《我的RobotFramework书》,1-6-2 变量文件, Vairable Files
Robot Framework - Variable file相关推荐
- 【转】Robot Framework 快速入门
目录 介绍 概述 安装 运行demo 介绍样例应用程序 测试用例 第一个测试用例 高级别测试用例 数据驱动测试用例 关键词keywords 内置关键词 库关键词 用户定义关键词 变量 定义变量 使用变 ...
- Robot Framework 内置变量
Robot Framework 内置变量 转自:https://blog.csdn.net/qq_26886929/article/details/53907755 Robot Framework 内 ...
- Robot Framework + Selenium 框架,关键字封装,知识点记录
目录 框架概述: 通用关键字: 等待类关键字: 通用组件 等待 元素: 通用组件 获取 元素居中滚动像素: 通用组件 页面滚动 : 通用组件 等待包含文字: 通用组件 自动切换frame : 通用组件 ...
- Robot Framework:Web自动化之-元素处理
Robot Framework:Web自动化之-元素处理 普通元素 1 文本输入框 1.1 输入文本 Wait Until Element Is Visible xpath=//*[@id=" ...
- Robot Framework用户指南
Robot Framework用户指南 版本2.8.6 版权所有©诺基亚解决方案和网络2008-2014 根据知识共享署名3.0 Unported许可授权 目录 1开始 1.1简介 1.2版权和许可 ...
- Robot Framework 自动化测试框架核心指南-初识Robot Framework(学习笔记2)
初识Robot Framework 1.1如何创建一个自动化测试项目 1.1.2 创建测试套件 1.1.3 创建测试用例 1.2 Robot Framework基础关键字 1.2.1 如何搜索Robo ...
- robot framework
robot framework (仅作为个人笔记,如有雷同,请联系删除..) 参考:https://www.cnblogs.com/chenyuebai/p/8359577.html 1.Robot ...
- Robot Framework(十八) 支持工具
5支持工具 5.1库文档工具(libdoc) libdoc是一种用于为HTML和XML格式的测试库和资源文件生成关键字文档的工具.前一种格式适用于人类,后者适用于RIDE和其他工具.Libdoc也没有 ...
- python3.7界面设计_基于selenium+Python3.7+yaml+Robot Framework的UI自动化测试框架
前端自动化测试框架 项目说明 本框架是一套基于selenium+Python3.7+yaml+Robot Framework而设计的数据驱动UI自动化测试框架,Robot Framework 作为执行 ...
最新文章
- 黑盒测试--因果图法
- struct发送与显示中文
- C++泛型编程:template模板
- centos 安装 openfire
- 项目中常用的19条MySQL优化
- 【Python CheckiO 题解】Roman Numerals
- OSS音频编程概述(DSP部分)
- java jquery post_jquery js post变量set和get for post
- java 去系统运行时间,JAVA WEB获取系统运行时间
- mysql外键排序规则_mysql创建外键出错(注意数据库表字段排序)
- 【线程】——线程的启动和中断
- Oracle笔记(九) 表的创建及管理
- java jsonarray string_String JSONObject JSONArray 转换
- python编程师app_新技能:用 Python 写一个安卓 APP
- 局域网ip扫描工具_IP Scanner Pro——ip局域网扫描工具
- 如何用计算机管理员权限,怎么打开管理员权限,电脑怎么用管理员权限
- 【 OpenCV】——图像平移
- 三代测序数据自纠错技术 和 二代测序数据对三代测序数据纠错的技术。
- 什么是开源网络情报?有什么特点?
- 记住熊三木,一场关于文创产业“复兴十年” 的豪赌
热门文章
- boost::geometry模块多边形DP算法简化示例
- boost::coroutine2模块实现相同的边缘的测试程序
- GDCM:解析XPATH文件的测试程序
- boost::coroutine模块实现不对称echo的测试程序
- ITK:标记连接组件的轮廓
- DCMTK:创建大型(> 4 GB)增强型CT对象的测试
- VTK:PolyData之KochanekSpline
- VTK:PolyData之IterateOverLines
- VTK:相互作用之ImageClip
- OpenGL Texture Coordinate Wrapping纹理坐标包装的实例