RF导入变量文件

在Setting中导入

Setting中导入变量文件时,和导入外部资源文件类似。变量文件的路径可以包含参数,如果一个变量文件接受参数,那么它们也可以是变量。

Path最好使用相对路径,如下:

*** Settings ***
Resource     ../../eRes.txt
Variables    ../test.py
Variables    ../comVar.py    product    ${arg2}
Variables    ${RESOURCES}/common.py

Ride 中导入变量文件:

Ride how to import variable file

命令行导入

pybot --help 查看相关帮助信息如下:

import variable file

从命令行导入的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"  #导入多个变量文件
powershell

如果多个文件导入时存在变量重名的情况,则最先导入的变量有效 。

创建变量文件

直接创建

基本语法

在变量文件中直接给变量赋值,语法非常简单,变量名大小写不敏感。

# -*- 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)
Ride log

补充几点:

  1. 变量文件中创建的所有以下划线开头的变量不会被RF导入,如 ''_pykey'' ;除此之外,也可以使用''__all__'' (双下滑线)将真正要被RF导入的Variables的加为一个lis;比如上面的例子中,就只有pyuser和pytags被认为是variable,而pyparams将会被忽略;
  2. 为了更明确的定义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
  1. 变量文件中创建的Set类型或Tuple类型的变量,应该避免在RF中引用,否则可能会报语法错误;
  2. 通常来说,全局变量名称应该大写,非全局变量小写;

使用对象最为变量的值

变量文件中的变量不限于只有字符串或其他基本类型作为值。相反,它们的变量可以包含任何对象。在下面的示例中,变量$ {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中打印变量的值如下:

rf log

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相关推荐

  1. 【转】Robot Framework 快速入门

    目录 介绍 概述 安装 运行demo 介绍样例应用程序 测试用例 第一个测试用例 高级别测试用例 数据驱动测试用例 关键词keywords 内置关键词 库关键词 用户定义关键词 变量 定义变量 使用变 ...

  2. Robot Framework 内置变量

    Robot Framework 内置变量 转自:https://blog.csdn.net/qq_26886929/article/details/53907755 Robot Framework 内 ...

  3. Robot Framework + Selenium 框架,关键字封装,知识点记录

    目录 框架概述: 通用关键字: 等待类关键字: 通用组件 等待 元素: 通用组件 获取 元素居中滚动像素: 通用组件 页面滚动 : 通用组件 等待包含文字: 通用组件 自动切换frame : 通用组件 ...

  4. Robot Framework:Web自动化之-元素处理

    Robot Framework:Web自动化之-元素处理 普通元素 1 文本输入框 1.1 输入文本 Wait Until Element Is Visible xpath=//*[@id=" ...

  5. Robot Framework用户指南

    Robot Framework用户指南 版本2.8.6 版权所有©诺基亚解决方案和网络2008-2014 根据知识共享署名3.0 Unported许可授权 目录 1开始 1.1简介 1.2版权和许可 ...

  6. Robot Framework 自动化测试框架核心指南-初识Robot Framework(学习笔记2)

    初识Robot Framework 1.1如何创建一个自动化测试项目 1.1.2 创建测试套件 1.1.3 创建测试用例 1.2 Robot Framework基础关键字 1.2.1 如何搜索Robo ...

  7. robot framework

    robot framework (仅作为个人笔记,如有雷同,请联系删除..) 参考:https://www.cnblogs.com/chenyuebai/p/8359577.html 1.Robot ...

  8. Robot Framework(十八) 支持工具

    5支持工具 5.1库文档工具(libdoc) libdoc是一种用于为HTML和XML格式的测试库和资源文件生成关键字文档的工具.前一种格式适用于人类,后者适用于RIDE和其他工具.Libdoc也没有 ...

  9. python3.7界面设计_基于selenium+Python3.7+yaml+Robot Framework的UI自动化测试框架

    前端自动化测试框架 项目说明 本框架是一套基于selenium+Python3.7+yaml+Robot Framework而设计的数据驱动UI自动化测试框架,Robot Framework 作为执行 ...

最新文章

  1. 黑盒测试--因果图法
  2. struct发送与显示中文
  3. C++泛型编程:template模板
  4. centos 安装 openfire
  5. 项目中常用的19条MySQL优化
  6. 【Python CheckiO 题解】Roman Numerals
  7. OSS音频编程概述(DSP部分)
  8. java jquery post_jquery js post变量set和get for post
  9. java 去系统运行时间,JAVA WEB获取系统运行时间
  10. mysql外键排序规则_mysql创建外键出错(注意数据库表字段排序)
  11. 【线程】——线程的启动和中断
  12. Oracle笔记(九) 表的创建及管理
  13. java jsonarray string_String JSONObject JSONArray 转换
  14. python编程师app_新技能:用 Python 写一个安卓 APP
  15. 局域网ip扫描工具_IP Scanner Pro——ip局域网扫描工具
  16. 如何用计算机管理员权限,怎么打开管理员权限,电脑怎么用管理员权限
  17. 【 OpenCV】——图像平移
  18. 三代测序数据自纠错技术 和 二代测序数据对三代测序数据纠错的技术。
  19. 什么是开源网络情报?有什么特点?
  20. 记住熊三木,一场关于文创产业“复兴十年” 的豪赌

热门文章

  1. boost::geometry模块多边形DP算法简化示例
  2. boost::coroutine2模块实现相同的边缘的测试程序
  3. GDCM:解析XPATH文件的测试程序
  4. boost::coroutine模块实现不对称echo的测试程序
  5. ITK:标记连接组件的轮廓
  6. DCMTK:创建大型(> 4 GB)增强型CT对象的测试
  7. VTK:PolyData之KochanekSpline
  8. VTK:PolyData之IterateOverLines
  9. VTK:相互作用之ImageClip
  10. OpenGL Texture Coordinate Wrapping纹理坐标包装的实例