robotframework笔记23

远程库接口

远程库接口提供了对在测试库 比机器人框架本身是在不同的机器上运行, 同时实现图书馆使用其他语言比 本机支持Python和Java。 为一个测试库用户远程 library看起来几乎一样的其他测试库,和 开发测试库使用远程库接口也 非常接近创造 正常测试库 

介绍准备

有两个主要原因使用远程库API:

  • 可以实际库在不同的机器上 在机器人运行框架。 这允许有趣 分布式测试的可能性。
  • 测试库可以使用任何语言,支持实现 xml - rpc 协议。 在撰写本文时 有现成的 远程服务器 对于Python、Java、Ruby。 净,Clojure、Perl和node . js。

远程库接口提供的远程库 其中的一个 标准库 。 这个库没有任何自己的关键字,但它的工作原理 作为一个核心框架和关键字实现之间的代理 其他地方。 远程库与实际库 通过远程服务器实现,远程库和 服务器使用一个简单的交流 远程协议 最重要的一个 xml - rpc通道。 所有这一切的高级体系结构 下图所示:

src/ExtendingRobotFramework/remote.png

机器人与远程库体系结构框架

请注意

远程客户端使用Python的标准 xmlrpclib 模块。 它 不支持自定义xml - rpc扩展的xml - rpc实现 服务器。

考虑远程库使用

导入远程库

远程库需要知道远程服务器的地址 否则进口和使用它提供的关键字是“不” 不同于其他库是如何使用的。 如果你需要使用远程 图书馆多次测试套件,或者只是想给它一个 描述性的名称,您可以使用进口 与名语法 

*** Settings ***
Library    Remote    http://127.0.0.1:8270       WITH NAME    Example1
Library    Remote    http://example.com:8080/    WITH NAME    Example2
Library    Remote    http://10.0.0.2/example    1 minute    WITH NAME    Example3

上面的第一个例子所使用的URL也默认地址 远程库使用如果没有地址。 同样的港口 8270年 是远程服务器的端口将使用默认情况下。 

请注意

当连接到本地机器上,建议使用 地址 127.0.0.1 而不是 本地主机 。 这就避免了 地址解析,可以极其缓慢 至少在Windows上 。 之前机器人框架2.8.4远程库本身使用了 可能会慢 本地主机 默认情况下。

请注意

注意,如果不包含URI路径服务器地址后, xmlrpclib模块 使用的远程库将使用 / RPC2 默认路径。 在实践中使用 http://127.0.0.1:8270 因此相同的使用吗 http://127.0.0.1:8270 RPC2 。 根据远程服务器 这可能是也可能不是一个问题。 不附加额外的路径 地址有一个路径即使路径是公正的 。 为 例子中,既不 http://127.0.0.1:8270 也不 http://127.0.0.1:8270 /我/路径 将被修改。

上面的最后一个例子展示了如何给远程库自定义超时 作为一个可选的第二个参数。 最初连接的超时时使用 到服务器,如果意外关闭的连接。 超时可 在机器人框架 时间格式 就像 60年代 或 2分钟10秒 

默认超时时间通常是几分钟,但这取决于 操作系统及其配置。 注意,设置 一个超时,比关键字执行时间短会中断 关键字。

请注意

支持超时2.8.6机器人框架中的一个新特性。 超时不与IronPython Python / Jython 2.5也不工作。

启动和停止远程服务器

在远程库可以被导入之前,远程服务器提供 实际的关键词必须启动。 如果服务器已经启动 发射测试执行,可以正常使用 图书馆 就像在上面的例子中。 或者其他 关键字,例如 过程或 SSH 库,可以开始 服务器,但是你可能需要使用 导入库关键字 因为图书馆测试执行开始时不可用。

如何停止远程服务器取决于它是如何 实现的。 通常服务器支持以下方法:

  • 不管使用图书馆、远程服务器应该提供 停止 远程服务器 所使用的关键字,可以很容易地执行测试。
  • 远程服务器应该 stop_remote_server 在他们的方法 xml - rpc接口。
  • 打 ctrl - c 在控制台服务器正在运行 停止服务器。
  • 服务器进程可以使用提供的工具被终止 操作系统(如。 杀了 )。

请注意

服务器可以被配置,以便用户不能阻止它 停止远程服务器 关键字或 stop_remote_server 方法。

支持参数和返回值类型

因为xml - rpc协议不支持所有可能的对象 类型、值之间传输和远程远程库 服务器必须转换为兼容的类型。 这适用于 关键字参数传递给远程服务器和远程库 返回值的服务器回馈到远程库。

远程服务器远程库和Python处理Python值 根据以下规则。 其他远程服务器应该有类似的表现。

  • 字符串、数字和布尔值是通过没有修改。
  • Python 没有一个 转化为一个空字符串。
  • 所有列表、元组和其他iterable(除了字符串和对象 字典)传递列表以便其内容被转换 递归。
  • 字典和其他映射是通过字典,这样他们的钥匙 转换为字符串和递归地值转换为支持的类型。
  • 词典转换为所谓的返回 dot-accessible字典 允许访问密钥作为属性使用 扩展变量语法 就像 $ { result.key } 。 这个作品也与嵌套的字典 $ { root.child.leaf } 
  • 字符串包含ASCII字节的,不能用 发送XML(如零字节) 二进制对象 在内部使用 xml - rpc base64数据类型。 收到二进制对象会自动转换 字节的字符串。
  • 其他类型转换为字符串。

请注意

机器人框架2.8.3之前,只有列表、元组和字典 根据上述规则处理。 一般iterable和 映射不支持。 此外二进制支持是新的 机器人框架2.8.4并返回dot-accessible新字典 在机器人框架2.9。

远程协议

本节解释之间的远程使用的协议 图书馆和远程服务器。 这些信息主要是针对 那些想要创建新的远程服务器。 提供的Python和 红宝石服务器也可以作为例子。

远程协议的基础上实现 xml - rpc ,这是一个 简单的远程过程调用协议使用XML / 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 方法减轻停止他们的公共接口。 他们应该 也自动暴露了这一方法 停止远程服务器 关键字允许使用它的测试数据的测试 图书馆。 允许用户停止服务器并不总是可取的, 和服务器可以支持禁用此功能。 方法,也暴露出关键字,应该回报 真正的 或 假 根据停止被允许。 这使得它 外部工具可以知道并停止服务器成功。

获取远程关键字名称和其他信息

远程库远程服务器的关键字列表 提供使用 get_keyword_names 方法。 这个方法必须 返回关键字名称作为一个字符串列表。

远程服务器可以,而且应该,也实现 get_keyword_arguments 和 get_keyword_documentation 方法提供更多有关关键字的信息。 这两个 关键字关键字的名称作为参数。 参数必须 返回一个字符串的列表 相同的格式与动态 库 和文档必须返回 作为一个字符串 

远程服务器也可以提供 通用库文档 来 当生成文档 Libdoc 工具。

执行远程关键字

当远程库希望服务器来执行一些关键字,它 调用远程服务器上的 run_keyword 方法和通过它 关键字名称、参数的列表,和可能的字典 免费的关键字参数 。 可以使用基本类型 直接的论据,但更复杂的类型 转换为支持 类型 

服务器必须返回结果的执行结果字典 (或地图,根据术语)包含项的解释 下表。 请注意,只有 状态 入口是强制性的, 其他人可以省略,如果他们不适用。

字典条目在遥远的结果
的名字解释
状态 强制执行状态。 通过或失败。
输出 可能的输出写入日志文件。 必须有 作为一个单独的字符串,但可以包含多个消息 不同的 日志级别 在格式 *信息*第一 HTML消息 n * * < b > < / b > 2 n *警告*另一个消息 。 它 还可以嵌入 时间戳 的日志消息 就像 *信息:1308435758660 *消息的时间戳 
返回 可能的返回值。 必须的吗 支持 类型 
错误 可能的错误消息。 只有当使用执行失败。
回溯 可能的堆栈跟踪 写入日志文件 使用 执行失败时调试水平。
可持续 当设置为 真正的 ,或任何价值考虑 真正的 在Python中,发生故障 可持续 。 新机器人2.8.4框架。
致命的 就像 可持续 ,但表示,发生 失败是 致命的 。 在机器人框架2.8.4也新。

不同的参数语法

远程库是一个 动态库 ,一般来说它处理 不同的参数语法 根据相同的规则 和其他 动态库。 这包括强制参数,默认值,可变参数 作为 命名参数的语法 

还免费的关键字参数( * * kwargs )主要工作 同样的方式 与其他动态库 。 首先, get_keyword_arguments 必须返回一个参数规范 包含 * * kwargs 就像任何其他动态库。 主要的区别在于, 远程服务器的 run_keyword 方法必须有可选的第三个参数 获取指定用户kwargs。 第三个参数必须是可选的 因为,为了向后兼容的原因,通过kwargs远程库 到 run_keyword 方法只有当他们已经使用的测试数据。

在实践中 run_keyword 类似于下面的吗 Python和Java的例子,这取决于语言处理可选的 参数。

def run_keyword(name, args, kwargs=None):
    # ...
public Map run_keyword(String name, List args) {
    // ...
}

public Map run_keyword(String name, List args, Map kwargs) {
    // ...
}

请注意

远程库支持 * * kwargs 从 机器人2.8.3框架。

原文地址:https://www.cnblogs.com/kuihua/p/5400150.html