RobotFramework测试框架(11)--变量文件

2024-04-06 01:36

本文主要是介绍RobotFramework测试框架(11)--变量文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Variable files包含的variables可以用于test data中(即测试用例)中。Variables可以使用Variables section或者从命令行设置。
但是也允许动态创建。

变量文件通常使用模块实现,有两种实现方式。

1、直接从模块中获取变量

变量被指定为模块的属性。在简单的情况下,语法是如此简单,以至于不需要真正的编程。例如,创建一个变量,其值为指定的文本。这种方法的一个限制是它不允许使用参数。

MY_VAR = 'my value'

${MY_VAR}

2、从特殊函数获取变量

变量文件可以有一个特殊的方法(例如 get_variablesgetVariables),它返回一个作为映射的变量。因为这个方法可以接收参数,所以这种方法非常灵活。

另一种实现变量文件的方式是作为类,由框架来实例化这些类。在这种情况下,同样可以将变量创建为属性,或者从方法中动态获取它们。此外,变量文件也可以以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)--变量文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/878675

相关文章

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

变量与命名

引言         在前两个课时中,我们已经了解了 Python 程序的基本结构,学习了如何正确地使用缩进来组织代码,并且知道了注释的重要性。现在我们将进一步深入到 Python 编程的核心——变量与命名。变量是我们存储数据的主要方式,而合理的命名则有助于提高代码的可读性和可维护性。 变量的概念与使用         在 Python 中,变量是一种用来存储数据值的标识符。创建变量很简单,

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

数据治理框架-ISO数据治理标准

引言 "数据治理"并不是一个新的概念,国内外有很多组织专注于数据治理理论和实践的研究。目前国际上,主要的数据治理框架有ISO数据治理标准、GDI数据治理框架、DAMA数据治理管理框架等。 ISO数据治理标准 改标准阐述了数据治理的标准、基本原则和数据治理模型,是一套完整的数据治理方法论。 ISO/IEC 38505标准的数据治理方法论的核心内容如下: 数据治理的目标:促进组织高效、合理地

ZooKeeper 中的 Curator 框架解析

Apache ZooKeeper 是一个为分布式应用提供一致性服务的软件。它提供了诸如配置管理、分布式同步、组服务等功能。在使用 ZooKeeper 时,Curator 是一个非常流行的客户端库,它简化了 ZooKeeper 的使用,提供了高级的抽象和丰富的工具。本文将详细介绍 Curator 框架,包括它的设计哲学、核心组件以及如何使用 Curator 来简化 ZooKeeper 的操作。 1

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟