Robot Framework(十五) 扩展RobotFramework框架——远程库接口
4.2远程库接口
远程库接口提供了在运行Robot Framework本身的机器上运行测试库的方法,以及使用除本机支持的Python和Java之外的其他语言实现库的方法。对于测试库,用户远程库看起来与任何其他测试库几乎相同,使用远程库接口开发测试库也非常接近于创建普通测试库。
4.2.1简介
使用远程库API有两个主要原因:
- 与运行Robot Framework的机器不同,可以在不同的机器上安装实际库。这为分布式测试提供了有趣的可能性
- 可以使用支持XML-RPC协议的任何语言来实现测试库 。Robot Framework 2.1包含用于Python / Jython和Ruby的通用远程服务器,计划将来为其他语言(如Java和Perl)实现通用服务器。
远程库接口由Remote库提供,Remote库是从Robot Framework 2.1开始的标准库之一。该库没有自己的任何关键字,但它作为核心框架和其他地方实现的关键字之间的代理。远程库通过远程服务器与实际库实现交互,远程库和服务器使用XML-RPC通道上的简单远程协议进行通信。所有这些的高级架构如下图所示:
机器人框架架构与远程库
4.2.2使用远程库
导入远程库
远程库需要知道远程服务器的地址,否则导入它并使用它提供的关键字与其他库的使用方式没有什么不同。如果您需要在测试套件中多次使用远程库,或者只是想为其提供更具描述性的名称,则可以使用WITH NAME语法导入它。
Setting | Value | Value | Value | Value |
---|---|---|---|---|
Library | Remote | http://localhost:8270 | WITH NAME | Example1 |
Library | Remote | http://10.0.0.42:7777 | WITH NAME | Example2 |
上面第一个示例使用的URL也是远程库在没有给出地址时使用的默认地址。同样,端口 8270是提供的远程服务器使用的默认端口。(82和70分别是字母R和F的ASCII码。)
启动和停止远程服务器
在导入远程库之前,必须启动提供实际关键字的远程服务器。如果在启动测试执行之前启动服务器,则可以使用常规 库设置,如上例所示。或者,其他关键字(例如来自OperatingSystem或SSH库)可以启动服务器,但是您可能需要使用Import Library关键字, 因为在测试执行开始时库不可用。
如何停止远程服务器取决于它的实现方式。以下方法适用于随Robot Framework分发的服务器:
- 无论使用何种库,远程服务器都提供可以从测试数据中使用的Stop Remote Server关键字。
- 远程服务器在其XML-RPC接口中具有stop_remote_server方法。
- 如果服务器在终端窗口上运行,Ctrl-C将停止服务器。不幸的是,这不适用于所有操作系统上的所有服务器。
- 可以使用操作系统提供的工具终止服务器进程(例如kill)。
注意
可以配置服务器,以便用户无法使用Stop Remote Server关键字或stop_remote_server 方法停止它 。
4.2.3支持的参数和返回值类型
由于XML-RPC协议不支持所有可能的对象类型,因此必须将远程库和远程服务器之间传输的值转换为兼容类型。这适用于远程库传递给远程服务器的关键字参数,以及返回值服务器返回远程库的关键字参数。
转换使用以下规则完成:
- 字符串,数字和布尔值无需修改即可传递。
- 在无/无值被转换为一个空字符串。
- 列表(和Python中的元组)作为列表传递,以便递归地转换它们的内容。
- 传递字典/映射,以便递归地将它们的值转换为支持的类型,并将键转换为字符串。
- 其他类型转换为字符串。
4.2.4使用远程服务器
Robot Framework 2.1包括用Python和Ruby编写的远程服务器实现。这些服务器以及下面显示的示例库和示例测试用例文件都包含在tools / remoteserver 目录下的源代码发行版中,也可以在 http://code.google.com/p/robotframework/wiki/RemoteLibrary中找到。
提供的服务器经过精心设计,因此可以轻松地使用它们创建测试库。使用这两个服务器的基本过程如下:
- 使用静态库API创建与普通测试库类似的测试库模块或类。使用Python服务器,也可以使用混合库API。
- 导入远程服务器类并创建它的实例,将库实例或模块作为参数提供给它。可能从命令行获取的侦听地址和端口可以作为可选参数给出。
这两个步骤都可以在相同的模块中完成,如下面的例子所示。从命令行执行这些模块作为脚本将启动远程服务器,以便它提供库中实现的关键字。
Python远程库示例
此示例演示如何使用远程服务器的Python版本。示例库实现关键字目录中的计数项和字符串应该相等。
- #!/usr/bin/env python
- import os
- import sys
- class ExampleRemoteLibrary:
- """Example library to be used with Robot Framework's remote server.
- This documentation is visible in docs generated by _libdoc.py_
- starting from Robot Framework 2.6.2.
- """
- def __init__(self):
- """Also this doc should be in shown in library doc."""
- def count_items_in_directory(self, path):
- """Returns the number of items in the directory specified by `path`."""
- return len([i for i in os.listdir(path) if not i.startswith('.')])
- def strings_should_be_equal(self, str1, str2):
- print "Comparing '%s' to '%s'" % (str1, str2)
- if str1 != str2:
- raise AssertionError("Given strings are not equal")
- if __name__ == '__main__':
- from robotremoteserver import RobotRemoteServer
- RobotRemoteServer(ExampleRemoteLibrary(), *sys.argv[1:])
Ruby远程库示例
此示例使用Ruby远程服务器并提供与前一个Python示例完全相同的关键字:
- #!/usr/bin/env ruby
- class ExampleRemoteLibrary
- def count_items_in_directory(path)
- Dir.entries(path).find_all{|i| not i.match('^\.')}.length
- end
- def strings_should_be_equal(str1, str2)
- puts "Comparing '#{str1}' to '#{str2}'"
- if str1 != str2
- raise RuntimeError, "Given strings are not equal"
- end
- end
- end
- if __FILE__ == $0
- require "robotremoteserver"
- RobotRemoteServer.new(ExampleRemoteLibrary.new, *ARGV)
- end
4.2.5远程协议
本节介绍远程库和远程服务器之间使用的协议。此信息主要针对想要创建新远程服务器的用户。提供的Python和Ruby服务器也可以用作示例。
远程协议是在XML-RPC之上实现的,XML-RPC是一种使用XML over HTTP的简单远程过程调用协议。大多数主流语言(Python,Java,C,Ruby,Perl,Javascript,PHP,...)都支持XML-RPC内置或扩展。
所需方法
远程服务器是XML-RPC服务器,其公共接口必须具有与动态库API相同的方法。只有 get_keyword_names和run_keyword实际需要,但get_keyword_arguments和 get_keyword_documentation还建议。请注意,目前无法在方法名称中使用camelCase格式。如何实现实际关键字与远程库无关。远程服务器可以充当真实测试库的包装器,就像提供的Python和Ruby服务器那样,或者它可以自己实现关键字。
远程服务器还应 在其公共接口中具有stop_remote_server方法,以便于停止它们。他们还应该自动将此方法公开为Stop Remote Server关键字,以便无论测试库如何都可以在测试数据中使用它。允许用户使用这些方法停止服务器并不总是可取的,服务器可以选择允许通过某些配置参数禁用它们。
提供的Python远程服务器可用作参考实现。
获取远程关键字名称和其他信息
Remote库获取远程服务器使用get_keyword_names方法提供的关键字列表。此方法必须将关键字名称作为字符串列表返回。
远程服务器可以而且应该实现 get_keyword_arguments和get_keyword_documentation 方法,以提供有关关键字的更多信息。这两个关键字都将关键字的名称作为参数。必须以与动态库相同的格式将参数作为字符串列表返回,并且必须将文档作为字符串返回。
从Robot Framework 2.6.2开始,远程服务器还可以提供 在使用libdoc工具生成文档时使用的通用库文档。
执行远程关键字
当远程库希望服务器执行某些关键字时,它会调用远程服务器的run_keyword方法并向其传递关键字名称和参数列表。基类型可以直接用作参数,但更复杂的类型可以转换为支持的类型。
服务器必须在包含下表中说明的项的结果字典(或映射,具体取决于术语)中返回执行结果。
名称 | 说明 |
---|---|
状态 | 强制执行状态。通过或失败。 |
产量 | 写入日志文件的可能输出。必须作为单个字符串给出,但可以包含多个消息和格式的 不同日志级别* INFO *第一条消息\ n * INFO *秒\ n * WARN *另一条消息。 |
返回 | 可能的返回值。必须是受支持的类型之一。 |
错误 | 可能的错误消息。仅在执行失败时使用。 |
追溯 | 执行失败时,可能使用DEBUG级别写入日志文件的堆栈跟踪。 |
Name | Explanation |
---|---|
status | Mandatory execution status. Either PASS or FAIL. |
output | Possible output to write into the log file. Must be given as a single string but can contain multiple messages and different log levels in format *INFO* First message\n*INFO* Second\n*WARN* Another message. |
return | Possible return value. Must be one of the supported types. |
error | Possible error message. Used only when the execution fails. |
traceback | Possible stack trace to write into the log file using DEBUG level when the execution fails. |
Robot Framework(十五) 扩展RobotFramework框架——远程库接口的更多相关文章
- Robot Framework(十六) 扩展RobotFramework框架——使用监听器接口
4.3使用监听器接口 Robot Framework有一个侦听器接口,可用于接收有关测试执行的通知.监听器是具有某些特殊方法的类或模块,它们可以用Python和Java实现.监听器接口的示例用法包括外 ...
- Robot Framework(十四) 扩展RobotFramework框架——创建测试库
4.1创建测试库 Robot Framework的实际测试功能由测试库提供.有许多现有的库,其中一些甚至与核心框架捆绑在一起,但仍然经常需要创建新的库.这个任务并不复杂,因为正如本章所示,Robot ...
- Robot Framework(五)使用测试库
使用测试库 测试库包含那些最低级别的关键字,通常称为 库关键字,实际上与被测系统交互.所有测试用例总是使用某些库中的关键字,通常是通过更高级别的用户关键字.本节介绍如何使用测试库以及如何使用它们提供的 ...
- Robot Framework(十七) 扩展RobotFramework框架——扩展Robot Framework Jar
4.4扩展Robot Framework Jar 使用标准JDK安装中包含的jar命令,可以非常简单地向Robot Framework jar添加其他测试库或支持代码.Python代码必须放在jar里 ...
- robotframework的学习笔记(十五)----robotframework标准库Collections
Collections库是RobotFramework用来处理列表和字典的库,官方文档是这样介绍的:A test library providing keywords for handling lis ...
- robot framework用python扩展编写自定义library
我的utils.py文件 #!/usr/bin/env python #-*- coding:utf8 -*- __version__ = '0.1' import sys reload(sys) s ...
- Android Multimedia框架总结(十五)Camera框架之Camera2补充
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52751055 前言:监于5.0之 ...
- Robot framework(RF) Builti,Screenshot和Collections标准库介绍
1.1 Builti标准类库 在学习一门编程语言的时候,大多教材都是从打印“hello world”开始.我们可以像编程语言一样来学习Robot Framework.虽然通过RIDE 提供“填表”一 ...
- Robot Framework学习笔记(四)------Screenshot 库屏幕截图
Scrennshot 同样为 Robot Framework 标准类库,我们只将它提供的其它中一个关键字"TakeScreenshot",它用于截取到当前窗口. 1.导入Scren ...
随机推荐
- 重装win7后如何恢复ubuntu引导
在重装系统之后,开机启动界面的ubuntu引导不见了,直接进入新安装的window系统中.下面是如何恢复ubuntu引导的方法: 1)准备一张ubuntu系统安装盘: 2)将ubuntu系统安装盘放入 ...
- C++ raw string literal
raw string literal 以 R"( 开头, )" 结束,是可以跨越多行的字符串字面值,转义字符如 \t\n 在raw string literal中是普通的文本 ...
- php获取客户机mac地址
@exec("arp -a",$array); //执行arp -a命令,结果放到数组$array中 foreach($array as $value){ //匹配结果放到数组$m ...
- sql语句查询结果中添加自增列
SELECT Row_Number() over ( order by getdate() ) as init , * FROM 表名
- FTP下载文件和操作系统的关系
标题不知道该怎么写了. 最近调试AGPS,嵌入式设备需要从FTP服务器上下载星历数据,星历数据是二进制数据.嵌入式设备下载完数据后和原始数据对比,发现数据量变大了(但是通过pc端的FTP软件下载下来的 ...
- 【2018-01-26】SqlServer 检查死锁和阻塞
利用sys.sysprocesses SQL进程检查是否出现死锁和阻塞 Sys.SysProcesses 系统表是一个很重要的系统视图,主要用来定位与解决Sql Server的阻塞和死锁 select ...
- Python使用selenium模拟点击,进入下一页(三)
嗯,昨天呢,我们已经实现了自动输入百度然后搜索Cgrain,然后点击按钮,进入我的页面,在这里呢,有个问题 ActionChains(seleniumGoo).move_by_offset(-480, ...
- 云服务器搭建Jupyter-主要部分为配置服务器安全组
最近在腾讯上租了一个服务器,在CSDN上看到了一个在服务器上搭建Jupyter的帖子,就跟着介绍做了一下. 参考CSDN帖子链接:https://blog.csdn.net/ds19991999/ar ...
- ZZNUOJ-2157: 水滴来袭-【干扰阅读-卡模糊精度1e-8的问题】
ZZNUOJ-2157: 水滴来袭 那是一个冷雨霏霏的秋天的下午,当罗辑拿着枪威胁三体文明的时候,如果过了三十秒三体人还没有同他展开谈判,罗辑就会扣动扳机即刻结束自己的生命,随后他身上的核弹控制器就会 ...
- Python+request 登录接口reponse中token传递给其他接口使用,小示例介绍《一》
要求: 1.调用登录login 2.调用通过登录接口返回的reponse中的token和uuid,实现test_create_todo接口的测试 实现: 1.login登录接口的调用,直接填写对应的U ...