Robot Framework(五)使用测试库
使用测试库
测试库包含那些最低级别的关键字,通常称为 库关键字,实际上与被测系统交互。所有测试用例总是使用某些库中的关键字,通常是通过更高级别的用户关键字。本节介绍如何使用测试库以及如何使用它们提供的关键字。创建测试库在单独的部分中描述。
2.4.1使用测试库
下面的小节给出了使用测试库的说明。
使用库设置
通常使用“ 设置”表中的“ 库”设置导入测试库,并在后续列中具有库名称。库名称区分大小写(它是实现库的模块或类的名称,并且必须完全正确),但忽略其中的任何空格。使用模块中的Python库或包中的Java库,必须使用包括模块或包名称的全名。
在库需要参数的情况下,它们列在库名后面的列中。与关键字的参数类似,可以在测试库导入中使用默认值,可变数量的参数和命名参数。可以使用变量设置库名称和参数。
| Setting | Value | Value | Value |
|---|---|---|---|
| Library | OperatingSystem | ||
| Library | com.company.TestLib | ||
| Library | MyLibrary | arg1 | arg2 |
| Library | ${LIBRARY} |
可以在测试用例文件, 资源文件和测试套件初始化文件中导入测试库。在所有这些情况下,导入库中的所有关键字都可在该文件中使用。对于资源文件,这些关键字也可以在使用它们的其他文件中使用。
使用Import Library关键字
采取测试库投入使用另一种可能性是使用关键字导入库从内建库。此关键字与库设置类似地获取库名称和可能的参数。导入库中的关键字在测试套件中可用,其中使用了Import Library关键字。如果在测试执行开始时库不可用并且只有其他一些关键字使其可用,则此方法很有用。
| Test Case | Action | Argument | Argument | Argument |
|---|---|---|---|---|
| Example | Do Something | |||
| Import Library | MyLibrary | arg1 | arg2 | |
| KW From Mylibrary |
库搜索路径
指定要导入的测试库的最常用方法是使用其名称,就像在本节的所有示例中一样。在这些情况下,Robot Framework尝试从库搜索路径中查找实现库的类或模块。基本上,这意味着库代码及其所有可能的依赖项必须在PYTHONPATH中,或者在Jython上运行测试时,必须在 CLASSPATH中。设置库搜索路径在其自身的一节中进行了解释。库还可以自动设置搜索路径,或者有关于如何执行此操作的特殊说明。例如,所有 标准库都自动位于库搜索路径中。
这种方法的最大好处是,当配置库搜索路径时,通常使用自定义启动脚本,普通用户不需要考虑实际安装库的位置。缺点是将您自己的,可能非常简单的库放入搜索路径可能需要一些额外的配置。
使用到库的路径
指定要导入的库的另一种机制是在文件系统中使用它的路径。此路径被认为是相对于当前测试数据文件所在的目录,与资源和变量文件的路径类似。这种方法的主要好处是无需配置库搜索路径。
如果库是文件,则其路径必须包含扩展名。对于Python库,扩展名自然是.py,对于Java库,它可以是.class或.java,但类文件必须始终可用。如果将Python库实现为目录,则其路径必须具有正斜杠(/)。以下示例演示了这些不同的用法。
| Setting | Value | Value | Value |
|---|---|---|---|
| Library | PythonLib.py | ||
| Library | /absolute/path/JavaLib.java | ||
| Library | relative/path/PythonDirLib/ | possible | arguments |
| Library | ${RESOURCES}/Example.class |
这种方法的局限性在于,作为Python类实现的库必须位于与类同名的模块中。此外,使用此机制无法导入以JAR或ZIP包分发的库。
2.4.2给测试库设置自定义名称
库名称显示在关键字名称之前的测试日志中,如果多个关键字具有相同的名称,则必须使用它们,以便 关键字名称以库名称为前缀。库名通常来自实现它的模块或类名,但在某些情况下需要更改它:
- 需要使用不同的参数多次导入同一个库。否则这是不可能的。
- 库名称不方便长。例如,如果Java库具有长包名称,则可能发生这种情况。
- 您希望使用变量在不同环境中导入不同的库,但请使用相同的名称引用它们。
- 库名称具有误导性或其他差异性。在这种情况下,更改实际名称当然是更好的解决方案。
指定新名称的基本语法是在库名后面加上文本 WITH NAME(不区分大小写),然后在下一个单元格中使用新名称。指定的名称显示在日志中,并且在使用关键字的全名(LibraryName.Keyword Name)时必须在测试数据中使用。
| Setting | Value | Value | Value |
|---|---|---|---|
| Library | com.company.TestLib | WITH NAME | TestLib |
| Library | ${LIBRARY} | WITH NAME | MyName |
库的可能参数放在原始库名称和WITH NAME文本之间的单元格中。以下示例说明了如何使用不同的参数多次导入相同的库:
| Setting | Value | Value | Value | Value | Value |
|---|---|---|---|---|---|
| Library | SomeLibrary | localhost | 1234 | WITH NAME | LocalLib |
| Library | SomeLibrary | server.domain | 8080 | WITH NAME | RemoteLib |
| Test Case | Action | Argument | Argument |
|---|---|---|---|
| My Test | LocalLib.Some Keyword | some arg | second arg |
| RemoteLib.Some Keyword | another arg | whatever | |
| LocalLib.Another Keyword |
将自定义名称设置为测试库既可以在“设置”表中导入库,也可以在使用“ 导入库”关键字时使用。
2.4.3标准库
一些测试库与Robot Framework一起分发,这些库称为标准库。这些是可用的标准库:
BuiltIn库是特殊的,因为它自动使用,因此它的关键字始终可用。其他标准库需要以与任何其他库相同的方式导入,但不需要安装它们。此外,它们在使用Python和Jython运行测试时也起作用(将Screenshot库作为例外)。
将来可以并且将来添加新的标准库。如果您对新标准库有所了解,或者甚至可以立即合并,请联系Robot Framework开发人员。通常,如果库是通用的,则可以将库添加到标准库中,在没有任何外部依赖性的情况下在Python和Jython上工作,并且经过充分的测试和记录。
BuiltIn库
BuiltIn库提供了一组经常需要的通用关键字。它会自动导入,因此始终可用。提供的关键字可用于例如验证(例如,应该等于,应该包含),转换(例如转换为整数)和用于各种其他目的(例如,日志,睡眠,运行关键字如果,设置全局变量)。
BuiltIn库中的关键字名称已在Robot Framework 1.8版中重命名。所有旧关键字仍然有效,但不推荐使用的关键字的长名称(日志文件中可见的名称)以DeprecatedBuiltIn开头。(例如, DeprecatedBuiltIn.Equals)。强烈建议使用关键字的新名称,因为旧版本将来会被删除。
有关更多信息,请参阅BuiltIn库文档。
OperatingSystem库
OperatingSystem库允许在运行Robot Framework的系统中执行各种与操作系统相关的任务。除其他外,它可以执行命令(例如运行),创建和删除文件和目录(例如创建文件,删除目录),检查文件或目录是否存在或包含某些内容(例如文件应该存在,目录应该为空)和操纵环境变量(例如设置环境变量)。
OperatingSystem库中的关键字名称已在Robot Framework 1.8中重命名,类似于BuiltIn关键字的名称。
有关更多信息,请参阅OperatingSystem库文档。
Telnet库
Telnet库可以连接到Telnet服务器并在打开的连接上执行命令。
有关更多信息,请参阅Telnet库文档。
Collections 集合库
Collections库提供了一组用于处理Python列表和字典的关键字。该库具有关键字,例如,用于修改和获取列表和词典中的值(例如,附加到列表,从词典中获取)以及用于验证其内容(例如,列表应该相等, 词典应该包含值)。
有关更多信息,请参阅集合库文档。
String 字符串库
字符串库可以操作字符串(例如,使用Regexp替换字符串,拆分为行)并验证其内容(例如,应该是字符串)。
有关更多信息,请参阅字符串库文档。该库是Robot Framework 2.1中的新增功能。
Dialogs 对话框库
Dialogs库提供暂停测试执行和从用户获取输入的方法。对话框略有不同,具体取决于在Python或Jython上运行的测试,但它们提供相同的功能。
有关更多信息,请参阅Dialogs库文档。该库是Robot Framework 2.1中的新增功能。
ScreenShot 截图库
屏幕截图库具有捕获和存储整个桌面的屏幕截图的关键字。该库使用Java AWT API实现,因此只有在Jython上运行Robot Framework时才能使用它。
有关更多信息,请参阅屏幕截图库文档。
Remote 远程库
远程库与其他标准库完全不同。它没有自己的任何关键字,但它作为Robot Framework和实际测试库实现之间的代理。这些库可以在除核心框架之外的其他机器上运行,甚至可以使用Robot Framework本身不支持的语言来实现。
有关该概念的更多信息,请参见单独的远程库接口部分。该库是Robot Framework 2.1中的新增功能。
2.4.4外部库
根据定义,任何不属于标准库的测试库都是外部库。Robot Framework开发人员提供了一些通用库,例如SeleniumLibrary和SwingLibrary,它们不与框架本身打包在一起,因为它们需要外部依赖项。通用库也可以由其他方提供,大多数团队也只为自己提供一些自定义库。
不同的外部库可以使用完全不同的机制来安装和引入它们。通常,它们还需要单独安装其他一些依赖项。所有库都应该有明确的说明,并最好自动化安装。
有关如何为自己的或一般用法创建新测试库的更多信息,请参阅创建测试库部分。
Robot Framework(五)使用测试库的更多相关文章
- Robot Framework - 2 - 创建测试库
04- 创建测试库--基础概念 Robot Framework 实际的测试能力是由测试库提供的. ***** 支持的编程语言 Robot Framework 自身是用 Python 编写的,能使用 P ...
- Robot Framework - 建立本地测试环境
注意:本文内容是以“在Window7系统中安装本地RobotFrmamework自动化测试环境”为例. Robot Framework简介 HomePage:http://robotframework ...
- Robot Framework - 基础关键字 BuiltIn 库(二)
本篇教程,我们继续接着上篇内容进行讲解,我们本节教程讲解的是Robot Framework 机器人框架中的变量中使用判断.字符串的拼接.Evaluate的用法.调用Python文件.条件分支语句.以及 ...
- Robot Framework - 基础关键字 BuiltIn 库(一)
今天给大家分享的是Robot Framework 机器人框架中 BuiltIn 基础库的使用...BuiltIn 库里面提供了很多基础方法助力于我们在自动化测试领域中做的更好!——本系列教程是教会大家 ...
- Robot Framework常用的操作库列表
标准库是Robot Framework可以直接导入使用的库,包含以下几类: Builtin:包含经常需要的关键字.自动导入无需import,因此总是可用的 Dialogs:提供了暂停测试执行和从用户的 ...
- 学习Robot Framework必须掌握的库—-BuiltIn库
作为一门表格语言,为了保持简单的结构,RF没有像别的高级语言那样提供类似if else while等内置关键字来实现各种逻辑功能,而是提供给了用户BuiltIn库.如果用户想在测试用例中实现比较复杂的 ...
- robotframework的学习笔记(十四)------学习Robot Framework必须掌握的库—-BuiltIn库
作为一门表格语言,为了保持简单的结构,RF没有像别的高级语言那样提供类似if else while等内置关键字来实现各种逻辑功能,而是提供给了用户BuiltIn库.如果用户想在测试用例中实现比较复杂的 ...
- 【转】学习Robot Framework必须掌握的库—-BuiltIn库
作为一门表格语言,为了保持简单的结构,RF没有像别的高级语言那样提供类似if else while等内置关键字来实现各种逻辑功能,而是提供给了用户BuiltIn库.如果用户想在测试用例中实现比较复杂的 ...
- 用Robot Framework+python来测试基于socket通讯的C/S系统(网络游戏)
项目终于换了方案,改用socket来实现而不是之前的http了,所以测试工具就不能用以前的了,因为测试人手少,逼不得已的必须要挖掘更多的自动化方案来弥补.于是先研究了下python的socket解决方 ...
随机推荐
- Sencha Toucha 2.1 文件上传
javascript代码: Ext.onReady(function() { Ext.create('Ext.form.Panel', { title: 'Upload a Photo', width ...
- 球的序列(formation.*)
N个编号为1-n的球,每个球都有唯一的编号.这些球被排成两种序列,分别为A.B序列,现在需要重新寻找一个球的序列l,对于这个子序列l中任意的两个球,要求j,k(j<k),都要求满足lj在A中 ...
- Servlet3.0中使用getPart进行文件上传
这个先进些,简单些,但书上提供的例子不能使用,到处弄了弄才行. servlet代码: package cc.openhome; import java.io.InputStream; import j ...
- Clojure:添加gzip功能
利用现有的插件,在Clojure中添加gzip的功能是很方便的.1. 在project.clj中添加对bk/ring-gzip插件的依赖.:dependencies [bk/ring-gzip ...
- PHP array_intersect()
定义和用法 array_intersect() 函数返回两个或多个数组的交集数组. 结果数组包含了所有在被比较数组中,也同时出现在所有其他参数数组中的值,键名保留不变. 注释:仅有值用于比较. 语法 ...
- linux sh 脚本调用外部命令
参考:http://blog.csdn.net/lhb_blog/article/details/22083649 ------------------------------------------ ...
- oracle capability i/o(压力測试数据库serveri/o性能)
今天是2014-04-21,今天简单仅仅说明一下怎么影响重做数据的一个因素,那就是i/o吞吐量,oracle的介质恢复依赖于i/o,假设i/o存在瓶颈,那么势必会影响备库的介质恢复. 那么i/o st ...
- UIView 的图层关系
个人认为用字母取代这样的比較好理解,.给新人学习 addSubview是一层一层往上加,新加的仅仅能放到父视图的最上层, insertSubView能够控制它加入到父视图的哪一层 A addSubv ...
- UVALive - 6910 (离线逆序并查集)
题意:给处编号从1~n这n个节点的父节点,得到含有若干棵树的森林:然后再给出k个操作,分两种'C x'是将节点x与其父节点所连接的支剪短:'Q a b'是询问a和b是否在同一棵树中. 题解:一开始拿到 ...
- js获取单独一个checkbox是否被选中
<script language=javascript> function check(){ var xz=document.getElementById("xz"); ...