长春网站建设硕成传媒,wordpress 登陆后查看,广州电力建设有限公司,建设企业网站可信度Variable files包含的variables可以用于test data中#xff08;即测试用例#xff09;中。Variables可以使用Variables section或者从命令行设置。 但是也允许动态创建。
变量文件通常使用模块实现#xff0c;有两种实现方式。
1、直接从模块中获取变量
变量被指定为模块…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:arg2Getting 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 FalseSelecting 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 variablesget_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 variables2Implementing 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} VARIABLELIST{ANOTHER VARIABLE}
class StaticExample:variable valueLIST__list [1, 2, 3]_not_variable starts with an underscoredef __init__(self):self.another_variable another valueThe 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} oneyksi twokaksi with spaceskolmeVariable 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 变量文件可能更加合适。