RobotFramework测试框架(11)--变量文件
Variable files包含的variables可以用于test data中(即测试用例)中。Variables可以使用Variables section或者从命令行设置。
但是也允许动态创建。
变量文件通常使用模块实现,有两种实现方式。
1、直接从模块中获取变量
变量被指定为模块的属性。在简单的情况下,语法是如此简单,以至于不需要真正的编程。例如,创建一个变量,其值为指定的文本。这种方法的一个限制是它不允许使用参数。
MY_VAR = 'my value'
${MY_VAR}
2、从特殊函数获取变量
变量文件可以有一个特殊的方法(例如 get_variables
或 getVariables
),它返回一个作为映射的变量。因为这个方法可以接收参数,所以这种方法非常灵活。
另一种实现变量文件的方式是作为类,由框架来实例化这些类。在这种情况下,同样可以将变量创建为属性,或者从方法中动态获取它们。此外,变量文件也可以以YAML和JSON格式创建。例如,可以使用get_variables
方法来获取这些变量。
使用变量文件
Setting section
所有的测试用例文件,可以在Setting section中使用Variables setting来导入变量文件。
*** Settings ***
Variables myvariables.py
Variables ../data/variables.py
Variables ${RESOURCES}/common.yaml
命令行
--variablefile myvariables.py
--variablefile path/variables.py
--variablefile /absolute/path/common.py
--variablefile variablemodule
--variablefile arguments.py:arg1:arg2
--variablefile rootmodule.Variables:arg1:arg2
Getting variables directly from a module
基础语法
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}
Using objects as values
变量文件中的变量不仅限于只包含字符串或其他基本类型作为值,就像变量部分一样。相反,它们的变量可以包含任何对象。在下面的示例中,变量包含一个Python字典,并且还有两个从同一文件中实现的自定义对象创建的变量。
MAPPING = {'one': 1, 'two': 2}class MyObject:def __init__(self, name):self.name = nameOBJ1 = MyObject('John')
OBJ2 = MyObject('Jane')
Creating variables dynamically
import os
import random
import timeUSER = os.getlogin() # current login name
RANDOM_INT = random.randint(0, 10) # random integer in range [0,10]
CURRENT_TIME = time.asctime() # timestamp like 'Thu Apr 6 12:45:21 2006'
if time.localtime()[3] > 12:AFTERNOON = True
else:AFTERNOON = False
Selecting which variables to include
当Robot Framework处理变量文件时,它期望所有不以下划线开头的属性都是变量。这意味着在变量文件中创建或从其他地方导入的函数或类也被视为变量。例如,在之前的示例中,除了MY_DICT、MY_PERSON、MY_INT、MY_FLOAT和MY_LIST这些变量之外,如果变量文件中还定义了math函数或get_area函数,以及AREA1和AREA2变量,它们也会被当作变量处理。
通常,这些额外的变量不会造成问题,但它们可能会覆盖其他变量,导致难以调试的错误。为了避免这种情况,一种可能的做法是给不想作为变量的属性加上下划线前缀。这样,Robot Framework就会忽略这些以下划线开头的属性,不会将它们当作变量来处理。
import math as _mathdef _get_area(diameter):radius = diameter / 2.0area = _math.pi * radius * radiusreturn areaAREA1 = _get_area(1)
AREA2 = _get_area(2)
Getting variables from a special function
另一种获取变量的方法是在变量文件中定义一个特殊函数(也可以使用驼峰命名法)。如果这样的函数存在,Robot Framework会调用它,并期望它返回一个Python字典,其中键是变量名,值是变量值。创建的变量可以像直接从模块中获取变量一样,作为标量、列表和字典使用。此外,还可以使用LIST__和DICT__前缀来更明确地创建列表和字典变量。下面的示例在功能上等同于第一个直接从模块获取变量的示例。
def get_variables():variables = {"VARIABLE ": "An example string","ANOTHER VARIABLE": "This is pretty easy!","INTEGER": 42,"STRINGS": ["one", "two", "kolme", "four"],"NUMBERS": [1, 42, 3.14],"MAPPING": {"one": 1, "two": 2, "three": 3}}return variables
get_variables 函数也可以接受参数,这有助于改变实际创建的变量。函数的参数就像任何 Python 函数的参数一样设置。当使用变量文件时,参数在变量文件路径之后指定,在命令行中它们用冒号或分号与路径分隔。
以下是一个简单的示例,展示了如何使用带参数的变量文件。在一个更实际的例子中,参数可能是指向外部文本文件或数据库的路径,从中读取变量。
variables1 = {'scalar': 'Scalar variable','LIST__list': ['List','variable']}
variables2 = {'scalar' : 'Some other value','LIST__list': ['Some','other','value'],'extra': 'variables1 does not have this at all'}def get_variables(arg):if arg == 'one':return variables1else:return variables2
Implementing variable file as a class
变量文件总是使用文件系统路径来导入,因此类必须与它所在的模块具有相同的名称。
框架将使用无参数的方式创建类的一个实例,并从该实例中获取变量。与模块类似,变量可以直接定义为实例的属性,或者从特殊方法 get_variables 中获取。
当变量直接在实例中定义时,所有包含可调用值的属性都会被忽略,以避免从实例可能具有的方法中创建变量。如果你确实需要可调用的变量,你需要使用其他方法来创建变量文件。
在实践中,这意味着如果你的变量文件名为 example_variables.py,那么它应该包含一个名为 ExampleVariables 的类。当 Robot Framework 导入这个变量文件时,它会创建一个 ExampleVariables 类的实例,并从该实例中读取变量。
如果你选择使用 get_variables 方法来返回变量字典,你可以在该方法内定义任何逻辑来生成变量,包括读取外部文件、查询数据库或执行其他计算。然而,直接在类实例中定义变量通常更简单直接,但需要注意避免将方法作为变量暴露出来。
以下是一个简单的例子,展示了如何在变量文件的类实例中直接定义变量
The first examples create variables from attributes. It creates variables and from class attributes and from an instance attribute. V A R I A B L E @ L I S T {VARIABLE}@{LIST} VARIABLE@LIST{ANOTHER VARIABLE}
class StaticExample:variable = 'value'LIST__list = [1, 2, 3]_not_variable = 'starts with an underscore'def __init__(self):self.another_variable = 'another value'
The second examples utilizes dynamic approach for getting variables. It creates only one variable .${DYNAMIC VARIABLE}
class DynamicExample:def get_variables(self, *args):return {'dynamic variable': ' '.join(args)}
Variable file as YAML
string: Hello, world!
integer: 42
list:- one- two
dict:one: yksitwo: kaksiwith spaces: kolme
*** Variables ***
${STRING} Hello, world!
${INTEGER} ${42}
@{LIST} one two
&{DICT} one=yksi two=kaksi with spaces=kolme
Variable file as JSON
变量文件也可以实现为 JSON 文件。与上一节讨论的 YAML 类似,JSON 是一种数据序列化格式,旨在供人类和机器使用。它基于 JavaScript 语法,虽然不如 YAML 那么易于人类阅读,但仍然相对容易理解和修改。以下示例包含与前面 YAML 示例完全相同的数据:
{"string": "Hello, world!","integer": 42,"list": ["one","two"],"dict": {"one": "yksi","two": "kaksi","with spaces": "kolme"}
}
JSON 变量文件因其 .json
扩展名而自动被识别,并且它们可以像 YAML 变量文件一样使用。它们在结构、编码等方面的要求也完全相同。与 YAML 不同,Python 内置了对 JSON 的支持,因此无需安装任何额外的模块。
使用 JSON 变量文件时,你只需创建一个包含所需变量的 JSON 对象,并确保该文件具有 .json
扩展名。然后,在 Robot Framework 的命令行中指定该文件的路径,Robot Framework 将自动加载该文件,并将 JSON 对象中的键值对解析为可在测试用例中使用的变量。
例如,假设你有一个名为 variables.json
的 JSON 变量文件,内容如下:
{"USERNAME": "robot_user","PASSWORD": "secret_password","SERVER": "http://example.com"
}
你可以通过以下命令在 Robot Framework 中使用它:
robot --variablefile variables.json my_test_suite.robot
在 my_test_suite.robot
测试用例中,你可以直接使用 ${USERNAME}
、${PASSWORD}
和 ${SERVER}
这些变量。
由于 JSON 是一种广泛使用的数据交换格式,它非常适合用于在不同系统和工具之间传递变量。同时,由于其简单性和明确性,JSON 文件也更容易被非开发人员阅读和编辑。然而,如果你需要更复杂的逻辑或动态生成变量,Python 变量文件可能更加合适。
相关文章:
RobotFramework测试框架(11)--变量文件
Variable files包含的variables可以用于test data中(即测试用例)中。Variables可以使用Variables section或者从命令行设置。 但是也允许动态创建。 变量文件通常使用模块实现,有两种实现方式。 1、直接从模块中获取变量 变量被指定为模块…...
java八股——常见设计模式
上一篇传送门:点我 有哪些设计模式? 按照模式的应用目标分类,可以分为创建型模式、结构型模式、行为型模式三类。 创建型模式: 对象实例化的模式,创建型模式用于解耦对象的实例化过程。 单例模式:某个类…...
机器学习 - metric评估方法
有一些方法来评估classification model。 Metric name / Evaluation methodDefinitionCodeAccuracyOut of 100 predictions, how many does your model get correct? E.g. 95% accuracy means it gets 95/100 predictions correct.torchmetrics.Accuracy() or sklearn.metric…...

书生·浦语大模型趣味Demo作业( 第二节课)第二期
文章目录 基础作业进阶作业 基础作业 进阶作业 熟悉 huggingface 下载功能,使用 huggingface_hub python 包,下载 InternLM2-Chat-7B 的 config.json 文件到本地(需截图下载过程) 完成 浦语灵笔2 的 图文创作 及 视觉问答 部署&…...
VScode使用持续更新中。。。
VScode 安装 Ubuntu18.04安装和使用VScode 使用 Vscode如何设置成中文...

YUM仓库和编译安装
目录 一.YUM仓库搭建 1.简介: 2.搭建思路: 3.实验:单机yum的创建 二.编译安装 1.简介 2.安装过程 3.实验:编译安装nginx 一.YUM仓库搭建 1.简介: yum是一个基于RPM包(是Red-Hat Package Manager红…...
IPv4子网判断
有时候,服务后端需要对客户端的所属组进行判断,以决定何种访问策略权限。而客户端IP所在子网是一种很简单易实现的分组方法。 虽然现在早已经进入IPv6时代,不过IPv4在局域网仍广泛使用,它的定义规则相对简单,本文介绍的…...

CSS 实现航班起飞、飞行和降落动画
CSS 实现航班起飞、飞行和降落动画 效果展示 航班起飞阶段 航班飞行阶段 航班降落 CSS 知识点 animation 属性的综合运用:active 属性的运营 动画分解 航班滑行阶段动画 实现航班的滑行阶段动画,需要使用两个核心物件,一个是跑动动画&#x…...

设计模式——建造者模式03
工厂模式注重直接生产一个对象,而建造者模式 注重一个复杂对象是如何组成的(过程),在生产每个组件时,满足单一原则,实现了业务拆分。 设计模式,一定要敲代码理解 组件抽象 public interface …...
【机器学习】《机器学习算法竞赛实战》思考练习(更新中……)
文章目录 第2章 问题建模(一)对于多分类问题,可否将其看作回归问题进行处理,对类别标签又有什么要求?(二)目前给出的都是已有的评价指标,那么这些评价指标(分类指标和回归…...

机场数据治理系列介绍(5)民用机场智慧能源系统评价体系设计
目录 一、背景 二、体系设计 1、评价体系设计维度 2、评价体系相关约定 3、评价指标体系框架设计 4、能源利用评价指标 5、环境友好评价指标 6、智慧管控评价指标 7、安全保障评价指标 三、具体落地措施 一、背景 在“双碳”国策之下,各类机场将能源系统建…...
[LeetCode][LCR190]加密运算——全加器的实现
题目 LCR 190. 加密运算 计算机安全专家正在开发一款高度安全的加密通信软件,需要在进行数据传输时对数据进行加密和解密操作。假定 dataA 和 dataB 分别为随机抽样的两次通信的数据量: 正数为发送量负数为接受量0 为数据遗失 请不使用四则运算符的情况…...

Linux: linux常见操作指令
目录 01.ls 指令 02. pwd命令 03. cd 指令 04. touch指令 05.mkdir指令(重要) 06.rmdir指令 && rm 指令(重要) 07.man指令(重要) 07.cp指令(重要) 08.mv指令&#…...
【BPNN】BP神经网络代码
主代码 %function main() clc clear close all %% 1.原始数据 %输入 SR1[20.55 22.44 25.37 27.13 29.45 30.10 30.96 34.06 36.42 38.09 39.13 39.99 ...41.93 44.59 47.30 52.89 55.73 56.76 59.17 60.63]; SR2[0.6 0.75 0.85 0.9 1.05 1.35 1.45 1.6 1.7 1.85 2.15 2.2 2.2…...
基于mqtt的物联网控制移动应用程序开发
具体实现问题 MQTT模型、特点、服务质量、报文、消息类型表 java实现mqtt两种方式:Paho Java原生库、spring boot MQTT与HTTP:哪一个最适合物联网? mqtt协议和http协议区别 应用是如何实现mqtt协议 通过调用安卓的MQTT库来实现MQTT协议&…...

MPLS-基础、LSR、LSP、标签、体系结构
MPLS技术 MPLS基础 MPLS:转发数据时,只在网络边缘分析IP报文头,不在每一跳都分析,节约了转发时间。 MPLS:Multiprotocol Label Switching,多协议标签交换骨干网技术。主要应用:VPN、流量工程…...
【RV1126】Ubuntu22.04下sdk编译问题汇集
对于新版本Ubuntu系统来编译SDK,尤其是buildroot ,是一个巨大考验,发现问题如下: 1. c-stack.c的SIGSTKSZ错误 buildroot 报错:c-stack.c:55:26:error:missing binary operator before token “(“55 在buildroot目录中找到c-s…...

51单片机使用uart串口和助手简单调试
基础知识 参考 特殊功能寄存器PCON(控制波特率是否加倍SMOD)、TMOD(T0,T1计时器的功能方式)、TCON(T0,T1计时器的控制)、串口中断、SCON(串口数据控制寄存器) 关闭定时器1中断&…...
Python网络爬虫(五):b站弹幕
上一篇对b站的视频评论爬取进行了探讨,这一篇是弹幕。直接上代码: import csv import json import re import chardet import requestsheaders = {user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Saf…...
Docker环境安装Postgresql数据库Posrgresql 15.6
宿主机是ubuntu 22.04版本 ubuntu宿主机上安装docker,参见官方文档https://docs.docker.com/engine/install/ubuntu/, docker-ce是社区版 docker-ee是企业版 1、检查Docker是否安装 rootODS1SPGOFSDEV:~# docker Command docker not found, but can be installed …...

龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...

Xela矩阵三轴触觉传感器的工作原理解析与应用场景
Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知,帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量,能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度,还为机器人、医疗设备和制造业的智…...

《Docker》架构
文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器,docker,镜像,k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...

生信服务器 | 做生信为什么推荐使用Linux服务器?
原文链接:生信服务器 | 做生信为什么推荐使用Linux服务器? 一、 做生信为什么推荐使用服务器? 大家好,我是小杜。在做生信分析的同学,或是将接触学习生信分析的同学,<font style"color:rgb(53, 1…...