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分别是字母RF的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框架——远程库接口的更多相关文章

  1. Robot Framework(十六) 扩展RobotFramework框架——使用监听器接口

    4.3使用监听器接口 Robot Framework有一个侦听器接口,可用于接收有关测试执行的通知.监听器是具有某些特殊方法的类或模块,它们可以用Python和Java实现.监听器接口的示例用法包括外 ...

  2. Robot Framework(十四) 扩展RobotFramework框架——创建测试库

    4.1创建测试库 Robot Framework的实际测试功能由测试库提供.有许多现有的库,其中一些甚至与核心框架捆绑在一起,但仍然经常需要创建新的库.这个任务并不复杂,因为正如本章所示,Robot ...

  3. Robot Framework(五)使用测试库

    使用测试库 测试库包含那些最低级别的关键字,通常称为 库关键字,实际上与被测系统交互.所有测试用例总是使用某些库中的关键字,通常是通过更高级别的用户关键字.本节介绍如何使用测试库以及如何使用它们提供的 ...

  4. Robot Framework(十七) 扩展RobotFramework框架——扩展Robot Framework Jar

    4.4扩展Robot Framework Jar 使用标准JDK安装中包含的jar命令,可以非常简单地向Robot Framework jar添加其他测试库或支持代码.Python代码必须放在jar里 ...

  5. robotframework的学习笔记(十五)----robotframework标准库Collections

    Collections库是RobotFramework用来处理列表和字典的库,官方文档是这样介绍的:A test library providing keywords for handling lis ...

  6. robot framework用python扩展编写自定义library

    我的utils.py文件 #!/usr/bin/env python #-*- coding:utf8 -*- __version__ = '0.1' import sys reload(sys) s ...

  7. Android Multimedia框架总结(十五)Camera框架之Camera2补充

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52751055 前言:监于5.0之 ...

  8. Robot framework(RF) Builti,Screenshot和Collections标准库介绍

    1.1  Builti标准类库 在学习一门编程语言的时候,大多教材都是从打印“hello world”开始.我们可以像编程语言一样来学习Robot Framework.虽然通过RIDE 提供“填表”一 ...

  9. Robot Framework学习笔记(四)------Screenshot 库屏幕截图

    Scrennshot 同样为 Robot Framework 标准类库,我们只将它提供的其它中一个关键字"TakeScreenshot",它用于截取到当前窗口. 1.导入Scren ...

随机推荐

  1. 移动端 H5 上拉刷新,下拉加载

    http://www.mescroll.com/api.html#options 这里有几个重要的设置 1.down 下不启用下拉刷新是因为再手机端有默认的下拉刷新,会冲突,待解决 2.up 中的 a ...

  2. js判断是哪种浏览器和阻止页面加载

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  3. Unable to open nested entry '********.jar' 问题解决

    今天把现网版本的task的jar拖回来然后用7-zip打开拖了一个jar进去替换mysql-connector-java-5.1.47.jar  为  mysql-connector-java-5.1 ...

  4. K2 BPM_快消零售连锁行业门店选址解决方案_十年专注业务流程管理系统

    >>>业务流程管理软件选型攻略  快消零售连锁行业门店选址解决方案   业内有句名言:“门店最重要的是什么?第一是选址,第二是选址,第三还是选址” 选址是一个很复杂的综合性商业决策过 ...

  5. CSS属性margin、padding的区别

    原始状态 不设置margin和padding的状态 margin 设置外边距之后的状态 padding 设置内边距之后的状态 ,注意是撑开,外框高宽由300px变成450px. 说明:本文为原创作品, ...

  6. SpringDataJPA第二天讲义

    第1章     Spring Data JPA的概述 1.1    Spring Data JPA概述 Spring Data JPA 是 Spring 基于 ORM 框架.JPA 规范的基础上封装的 ...

  7. Dephi 10.3.3试用报告

    官方没有正式发布,但出了下载及keygen,具体内容我在这篇内容写了:Delphi 10.3.3最新消息 . 也可以去Delphi多层开发交流QQ群:209321818找相关的keygen. 今早来就 ...

  8. apidoc 工具的使用

    使用rest framerok时,需要写API接口文档,此时就需要用到 apidoc(个人觉得这个用的比较顺手) 需要安装nodejs,,, windows 下 1 然后验证是否安装成功  node ...

  9. macro 标签,和静态文件,以及templates

    1 模板 -Templates 1 什么是模板 模板,在Flask中就是允许响应给用户看的网页在模板中,允许包含“占位变量”来表示动态的内容 模板最终也会被解析成字符串再响应给客户端,这一过程通常称为 ...

  10. IT基础架构