远程库接口
远程库接口提供了对在测试库 比机器人框架本身是在不同的机器上运行, 同时实现图书馆使用其他语言比 本机支持Python和Java。 为一个测试库用户远程 library看起来几乎一样的其他测试库,和 开发测试库使用远程库接口也 非常接近创造 正常测试库 。
介绍准备
有两个主要原因使用远程库API:
- 可以实际库在不同的机器上 在机器人运行框架。 这允许有趣 分布式测试的可能性。
- 测试库可以使用任何语言,支持实现 xml - rpc 协议。 在撰写本文时 有现成的 远程服务器 对于Python、Java、Ruby。 净,Clojure、Perl和node . js。
远程库接口提供的远程库 其中的一个 标准库 。 这个库没有任何自己的关键字,但它的工作原理 作为一个核心框架和关键字实现之间的代理 其他地方。 远程库与实际库 通过远程服务器实现,远程库和 服务器使用一个简单的交流 远程协议 最重要的一个 xml - rpc通道。 所有这一切的高级体系结构 下图所示:
机器人与远程库体系结构框架
请注意
远程客户端使用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框架。