资源和变量文件

用户关键字和变量 测试用例文件 和 测试套件 初始化文件只能用于文件在哪里 了,但 资源文件 提供一种机制来分享它们。 自 资源文件结构非常接近测试用例文件,它是 容易创建它们。

变量的文件 提供一个强大的机制来创建和分享 变量。 例如,他们允许字符串和之外的值 启用动态创建变量。 他们的灵活性来自 他们创建使用Python代码,这也使得 他们更复杂得多表变量 。

资源文件

考虑到资源文件使用

资源文件导入使用 资源 设置在 设置表。 资源文件的路径在细胞中 设置后的名字。

如果路径中给出了一个绝对的格式,它是直接使用。 在其他 情况下,首先搜索相对资源文件的目录 导入文件的位置。 如果文件没有找到, 然后从Python的目录搜索 模块搜索路径 。 路径可以包含变量,并推荐使用他们的路径 系统(例如, $ {资源} / login_resources.html 或 $ { RESOURCE_PATH } )。 另外,斜杠( )的路径 将自动改为反斜杠( \ 在Windows上)。

*** Settings ***
Resource myresources.html
Resource ../data/resources.html
Resource ${RESOURCES}/common.tsv

用户关键字和变量定义在一个资源文件 可用的文件,资源文件 使用。 同样也在所有的关键字和变量可用 库、资源文件和变量文件导入的说 资源文件。

资源文件结构

资源文件的高级结构是一样的 当然,否则测试用例文件,但是他们不能包含测试 例表。 此外,在资源文件可以设置表 只包含进口设置( 图书馆 , 资源 , 变量 ), 文档 。 变量表和 使用关键字表完全相同的方法在测试用例文件。

如果一些资源文件用户具有相同名称的关键字,他们 必须使用的吗 关键字名称前缀与资源 文件名称 没有扩展(例如, myresources.Some 关键字 和 常见的。 一些关键字 )。 此外,如果一些资源 文件包含相同的变量,一个是第一次进口 考虑使用。

记录资源文件

关键字在一个资源文件可以创建 记录 使用 (文档) 设置。 资源文件本身 文档 设置表中同样 测试套件 。

这两个 Libdoc 和 骑 使用这些文件,他们 天生对任何人打开资源文件可用。 的 第一行的文档关键字记录当它运行时, 否则测试期间的资源文件文件将被忽略 执行。

资源文件示例

*** Settings ***
Documentation An example resource file
Library Selenium2Library
Resource ${RESOURCES}/common.robot *** Variables ***
${HOST} localhost:7272
${LOGIN URL} http://${HOST}/
${WELCOME URL} http://${HOST}/welcome.html
${BROWSER} Firefox *** Keywords ***
Open Login Page
[Documentation] Opens browser to login page
Open Browser ${LOGIN URL} ${BROWSER}
Title Should Be Login Page Input Name
[Arguments] ${name}
Input Text username_field ${name} Input Password
[Arguments] ${password}
Input Text password_field ${password}

变量文件

变量文件包含 变量 在测试中,可以使用 数据。 变量也可以使用变量创建表或设置 命令行,但变量文件允许动态地创建它们 和他们的变量可以包含任何对象。

变量文件通常作为Python模块和实现 两种不同的方法来创建变量:

创建变量直接
变量指定为模块属性。 在简单的情况下, 语法非常简单,不需要真正的编程。 例如, MY_VAR = '我的价值 创建一个变量 $ { MY_VAR } 与指定的文本值。
得到特殊函数的变量
变量可以有一个特殊的文件 get_variables (或 getVariables 作为一个映射)方法,它返回变量。 这种方法,因为方法可以把参数是非常灵活的。

或者可以实现为变量文件 Python或Java类 该框架将实例化。 在这种情况下,可以创建 变量属性或让他们从一个特殊的方法。

考虑变量文件使用

设置表

所有测试数据文件可以导入变量使用 变量 设置中设置表,以同样的方式 资源文件都是进口的 使用 资源 设置。 同样的资源文件,导入的路径 变量文件被认为是相对于的目录 导入文件,如果没有找到,它是搜索的 目录 模块搜索路径 。 也可以包含路径变量, 和斜杠转换为Windows上的反斜杠。 如果一个 参数文件需要 参数 后,它们是细胞中指定的路径和也 可以包含变量。

*** Settings ***
Variables myvariables.py
Variables ../data/variables.py
Variables ${RESOURCES}/common.py
Variables taking_arguments.py arg1 ${ARG2}

所有变量从一个变量文件中可用的测试数据文件 进口。 如果几个变量文件进口和他们 包含一个变量具有相同名称的,最早的进口文件 考虑使用。 此外,表和变量中创建变量 从命令行设置覆盖从变量文件变量。

命令行

考虑变量文件使用的另一种方法是使用命令行选项 ——variablefile 。 变量引用文件使用的路径, 和可能的路径参数加入一个冒号( ):

--variablefile myvariables.py
--variablefile path/variables.py
--variablefile /absolute/path/common.py
--variablefile taking_arguments.py:arg1:arg2

从机器人框架2.8.2,变量的文件中使用 命令行也的搜索 模块搜索路径 同样作为 变量设置表中导入的文件。

如果一个变量文件作为一个绝对Windows路径,冒号后 驱动器并不认为是一个分隔符:

--variablefile C:\path\variables.py

从机器人框架2.8.7,也可以使用分号 ( )作为参数分隔符。 这是非常有用的,如果变量文件参数 包含冒号,但是需要周围的整个价值 引用在类unix操作系统:

--variablefile "myvariables.py;argument:with:colons"
--variablefile C:\path\variables.py;D:\data.xls

变量在这些变量在所有测试数据文件是全局可用 文件,同样是 单独的变量 设置的 ——变量 选择。 如果两个 ——variablefile 和 ——变量 选择和使用有变量相同 的名字,那些单独设置 ——变量 选择优先考虑。

创建变量直接

基本语法

当变量文件被使用时,他们作为Python导入 模块和全球所有属性不从一开始 下划线( )被认为是变量。 因为变量 名称不区分大小写,大写字母的名称 可能的,但一般来说,大写字母是全球的建议 变量和属性。

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}

在上面的示例中,变量 变量$ { } 另一个变量$ { } , 创建。 前两个变量是字符串,第三个是 一个整数,然后有两个列表,最后的值是一个字典。 所有这些变量可以用作 标量变量 、列表和 字典也 变量列表 就像 @ {字符串} (在字典的情况下 该变量只包含键),字典也 字典变量 就像 & {映射} 

要创建一个变量或一个字典列表变量更加明确, 是可能的前缀的变量名 LIST__ 或 DICT__ , 分别为:

from collections import OrderedDict

LIST__ANIMALS = ["cat", "dog"]
DICT__FINNISH = OrderedDict([("cat", "kissa"), ("dog", "koira")])

这些前缀不会最终变量名称的一部分,但他们的事业 机器人框架来验证实际上是类似或价值 类字典。 字典存储的实际价值也转过身 当使用到一个特殊的字典 创建字典 变量 在变量表。 这些字典的值是可访问的 等属性 $ { FINNISH.cat } 。 这些字典也下令,但是 保留源订单还需要原来的字典 命令。

变量在两个上面的例子也可以创建使用 变量下表。

*** Variables ***
${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}
@{ANIMALS} cat dog
&{FINNISH} cat=kissa dog=koira

请注意

变量不替换字符串从变量文件。 例如, VAR = " $ {例子}” 将创建 变量 $ { VAR } 文字字符串值 一个$ {例子} 无论将变量 $ { }例子 存在与否。

使用对象作为值

变量变量并不仅限于只有字符串或文件 其他基本类型变量等值表。 相反,他们 变量可以包含任何对象。 在下面的示例中,变量 $ {映射} 包含一个Java散列表(这两个值 在Jython例子只能当运行测试)。

from java.util import Hashtable

MAPPING = Hashtable()
MAPPING.put("one", 1)
MAPPING.put("two", 2)

第二个例子创建 $ {映射} 作为一个Python字典 还有两个变量从一个自定义创建对象中实现 相同的文件。

MAPPING = {'one': 1, 'two': 2}

class MyObject:
def __init__(self, name):
self.name = name OBJ1 = MyObject('John')
OBJ2 = MyObject('Jane')
创建变量动态

因为变量文件创建使用一个真正的编程语言, 他们可以动态设置变量的逻辑。

import os
import random
import time USER = 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

上面的例子使用标准Python库设置不同 变量,但是您可以使用您自己的代码构建的价值。 的 下面的例子说明了这个概念,但同样的,你的代码 从数据库中读取数据,从一个外部文件甚至问它 用户。

import math

def get_area(diameter):
radius = diameter / 2
area = math.pi * radius * radius
return area AREA1 = get_area(1)
AREA2 = get_area(2)
选择变量包括

当机器人框架流程变量文件,所有的属性 不从下划线预计将开始 变量。 这意味着即使函数或类中创建的 变量文件或从其他地方进口的是变量。 为 最后一个例子将包含的变量 $ {数学} 和 $ { get_area } 除了 $ { AREA1 } 和 $ { AREA2 } 

通常不会引起额外的变量问题,但他们 可以覆盖其他变量,导致难以调试的 错误。 一种可能忽略其他属性是前缀 下划线:

import math as _math

def _get_area(diameter):
radius = diameter / 2.0
area = _math.pi * radius * radius
return area AREA1 = _get_area(1)
AREA2 = _get_area(2)

如果有大量的其他属性,而不是加前缀 ,通常是更容易使用一个特殊的属性 __all__ 并赋予它处理属性名称的列表 作为变量。

import math

__all__ = ['AREA1', 'AREA2']

def get_area(diameter):
radius = diameter / 2.0
area = math.pi * radius * radius
return area AREA1 = get_area(1)
AREA2 = get_area(2)

请注意

的 __all__ 属性也和最初,使用 通过Python决定哪些属性导入 当使用语法 从modulename进口* 

得到特殊函数的变量

另一种方法获得变量是有一个特别的 get_variables 函数(也camelCase语法 getVariables 是可能的)在一个变量文件。 如果这样的一个函数 存在,机器人框架调用它,愿接收变量 Python字典或Java 地图 变量名称作为键 和变量值的值。 创建变量可以作为标量、 列表和字典时一模一样 创建变量直接 , 它可以使用 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 variables1
else:
return variables2

实现变量文件作为Python或Java类

从机器人Framework 2.7开始,可以实现变量文件 Python和Java类。

实现

因为变量文件总是进口使用文件系统路径创造 这些类有一些限制:

  • Python类必须有名称相同的模块。
  • 必须住在默认包的Java类。
  • Java类路径必须结束 . java 或 . class 。 类文件必须在这两种情况下存在。

不管实现语言,框架将创建一个实例 类的不使用参数和变量将得到的实例。 同样与模块,直接变量可以定义为属性 在实例或从特殊了 get_variables (或 getVariables )方法。

当变量直接定义一个实例,包含所有属性 可调用的值将被忽略,以避免创建变量从可能的方法 实例。 如果你会需要可调用的变量,你所需要的 使用其他方法来创建变量文件。

例子

第一个例子使用Python和Java创建变量的属性。 他们两人创建变量 变量$ { } 和 @ {列表} 从类 属性和 另一个变量$ { } 从一个实例属性。

class StaticPythonExample(object):
variable = 'value'
LIST__list = [1, 2, 3]
_not_variable = 'starts with an underscore' def __init__(self):
self.another_variable = 'another value'
public class StaticJavaExample {
public static String variable = "value";
public static String[] LIST__list = {1, 2, 3};
private String notVariable = "is private";
public String anotherVariable; public StaticJavaExample() {
anotherVariable = "another value";
}
}

第二个例子使用动态方法获取变量。 这两个 他们只创建一个变量 动态变量$ { } 

class DynamicPythonExample(object):

    def get_variables(self, *args):
return {'dynamic variable': ' '.join(args)}
import java.util.Map;
import java.util.HashMap; public class DynamicJavaExample { public Map<String, String> getVariables(String arg1, String arg2) {
HashMap<String, String> variables = new HashMap<String, String>();
variables.put("dynamic variable", arg1 + " " + arg2);
return variables;
}
}

变量文件作为YAML

变量也可以实现为文件 YAML 文件。 YAML是一种数据序列化的语言与一个简单的和人性化的语法。 下面的示例演示了一个简单的YAML文件:

string:   Hello, world!
integer: 42
list:
- one
- two
dict:
one: yksi
two: kaksi
with spaces: kolme

请注意

需要使用YAML文件与机器人框架 PyYAML 模块安装。 如果你有 pip安装,可以安装它只需运行 pip安装pyyaml 

YAML支持新的机器人框架2.9。 从 2.9.2版本, 独立的JAR分布 有 PyYAML包括默认情况下。

可以使用YAML变量文件完全一样正常变量文件 从命令行中使用 ——variablefile 的选项,设置 表的使用 变量 设置,并动态地使用 导入变量 关键字。 要记住的唯一路径 YAML文件必须结束 .yaml 扩展。

如果上面的YAML文件导入,它将创建完全相同的 变量如表:以下变量

*** Variables ***
${STRING} Hello, world!
${INTEGER} ${42}
@{LIST} one two
&{DICT} one=yksi two=kaksi

YAML文件用作变量文件必须在顶级映射。 上面的例子表明,键和值的映射 分别的变量名和值。 变量的值可以是任何数据 YAML的语法支持的类型。 如果名称或值包含非ascii 字符,YAML文件变量必须是utf - 8编码。

映射用作值自动转换成特殊的字典 当使用 创建字典变量 在变量表。 最重要的是,这些字典都可以访问的属性值 就像 $ { DICT.one } ,假设他们的名字是有效的Python的属性名称。 如果名称包含空格或否则不是一个有效的属性名称,它是 总是可以访问字典值使用语法 & { DICT }(空间) 语法。 创建字典也下令,但是 不幸的是在YAML文件的原始顺序不保存。

robotframework笔记15的更多相关文章

  1. Ext.Net学习笔记15:Ext.Net GridPanel 汇总(Summary)用法

    Ext.Net学习笔记15:Ext.Net GridPanel 汇总(Summary)用法 Summary的用法和Group一样简单,分为两步: 启用Summary功能 在Feature标签内,添加如 ...

  2. 斯坦福ML公开课笔记15—隐含语义索引、神秘值分解、独立成分分析

    斯坦福ML公开课笔记15 我们在上一篇笔记中讲到了PCA(主成分分析). PCA是一种直接的降维方法.通过求解特征值与特征向量,并选取特征值较大的一些特征向量来达到降维的效果. 本文继续PCA的话题, ...

  3. [Aaronyang] 写给自己的WPF4.5 笔记15[AyArc诞生-WPF版本绚丽的环状图,Ay制作,AyWindow强势预览]

    原文:[Aaronyang] 写给自己的WPF4.5 笔记15[AyArc诞生-WPF版本绚丽的环状图,Ay制作,AyWindow强势预览]  我的文章一定要做到对读者负责,否则就是失败的文章  -- ...

  4. SQL反模式学习笔记15 分组

    目标:查询得到每组的max(或者min等其他聚合函数)值,并且得到这个行的其他字段 反模式:引用非分组列 单值规则:跟在Select之后的选择列表中的每一列,对于每个分组来说都必须返回且仅返回一直值. ...

  5. JAVA自学笔记15

    JAVA自学笔记15 @例题1:共有5个学生,请把五个学生的信息存储到数组中,并遍历数组,并获取每个学生的信息 Students[] students=new Student[5]; Student ...

  6. 并发编程学习笔记(15)----Executor框架的使用

    Executor执行已提交的 Runnable 任务的对象.此接口提供一种将任务提交与每个任务将如何运行的机制(包括线程使用的细节.调度等)分离开来的方法.通常使用 Executor 而不是显式地创建 ...

  7. robotframework笔记2

    法文件和目录 层次结构安排测试用例构建如下: 在创建测试用例 测试用例文件 . 自动创建一个测试用例文件 测试套件 包含 测试用例文件. 一个目录包含测试用例文件形成一个更高级别的测试 套件. 这样一 ...

  8. tornado 学习笔记15 _ServerRequestAdapter分析

         继承于HTTPMessageDeletegate,是HTTPMessageDeletegate的一种实现,用于处理请求消息. 15.1 构造函数 def __init__(self, ser ...

  9. Hadoop学习笔记—15.HBase框架学习(基础实践篇)

    一.HBase的安装配置 1.1 伪分布模式安装 伪分布模式安装即在一台计算机上部署HBase的各个角色,HMaster.HRegionServer以及ZooKeeper都在一台计算机上来模拟. 首先 ...

随机推荐

  1. Android BroadcastReceiver广播接受者

    静态注册 配置清单表注册:只要曾经注册过哪怕关闭也能调用  方式一:sendBroadCastReceive   广播的步骤:       发送  无序广播,普通广播       (1).发送方    ...

  2. 转Masonry遇到的问题

    1,ImageView 圆角: 解决方法如下: https://github.com/SnapKit/Masonry/issues/153 2,iphone4  tableview只显示一半 加了一个 ...

  3. SqlSever基础 datepart 获取一个日期的月份

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  4. C#控制台基础 函数的参数是接口 实现接口的类都可以作为参数,很好用

    镇场诗: 大梦谁觉,水月中建博客.百千磨难,才知世事无常. 今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ 1.代 ...

  5. 我的android学习经历23

    学习fragment时遇到的问题 这几天学习fragment静态加载时遇到这样的问题: java.lang.RuntimeException: Unable to start activity Com ...

  6. .Net操作音频

    请选中您要保存的内容,粘贴到此文本框 此项目需求是针对.wav格式音频进行操作,转换成相应的.mp3格式的音频文件,对音频进行切割,最后以需求的形式输出,此篇会回顾运用到的一些知识点. 1.MDI子窗 ...

  7. Hibernate 配置

    package com.shuyinghengxie.doudou; import static org.junit.Assert.*; import org.hibernate.SessionFac ...

  8. MySQL子查询(SubQuery)

    由比较运算符引发的子查询,若括号内的子查询结果为多个,要在括号前加上ANY/SOME/ALL 由[NOT]IN引发的子查询, =ANY与IN等效       !=ALL / <>ALL与N ...

  9. Installing Python 3.5.2 from source

    Here are the procedures we are to follow, Download the source code of an official Python release. Co ...

  10. Webbrowser控件判断网页加载完毕的简单方法 (转)

    摘自:http://blog.csdn.net/cometnet/article/details/5261192 一般情况下,当ReadyState属性变成READYSTATE_COMPLETE时,W ...