跳转到主要内容

使用Python实现的Robot Framework远程服务器

项目描述

Robot Framework远程服务器允许在不同的进程或机器上托管测试库,而Robot Framework本身运行在机器上。本项目使用Python编程语言实现了一个通用的远程服务器。有关远程接口的详细信息以及其他编程语言中远程服务器的实现列表,请参阅远程库接口文档

该项目托管在GitHub上,下载可在PyPI上找到。

支持的Python版本

此远程服务器是用Python实现的,并支持Jython(JVM)、IronPython(.NET)和PyPy。远程服务器版本1.1支持Python 2.6、2.7和3.3-3.9。远程服务器版本1.1.1也支持Python 3.10和3.11。

支持的库API

从远程服务器版本1.1开始,Robot Framework的静态、混合和动态库API都得到支持。这包括使用robot.api.deco.keyword为关键字设置自定义名称和标签。较早的远程服务器版本只支持静态和混合API,并且根本不支持关键字装饰器。

对于大部分功能,这些API的使用方式与在正常使用Robot Framework时完全相同。主要限制是使用robot.api.logger或Python的logging模块进行日志记录目前尚不支持。

安装

最简单的安装方法是使用pip

pip install robotremoteserver

或者您可以从中下载源代码分装PyPI,提取它并使用以下命令安装远程服务器

python setup.py install

远程服务器配置

远程服务器作为类RobotRemoteServer实现,并在初始化时接受以下配置参数

参数

默认值

说明

library

要托管的可测试库实例或模块。必选参数。

host

'127.0.0.1'

监听地址。使用'0.0.0.0'监听所有可用的IPv4接口。

port

8270

监听端口。使用0自动选择空闲端口。可以指定为整数或字符串。默认端口8270IANA注册用于远程服务器使用。

port_file

None

写入使用的端口的文件。None(默认)表示不写入此类文件。

allow_stop

'已弃用'

自版本1.1以来已弃用。请使用allow_remote_stop代替。

serve

True

如果为True,则自动启动服务器并等待其停止。如果为False,则可以使用serve方法启动服务器。自版本1.1起引入。

allow_remote_stop

True

允许/禁止使用Stop Remote Server关键字和stop_remote_server XML-RPC方法远程停止服务器。自版本1.1起引入。

启动远程服务器

可以通过创建服务器实例并将测试库实例或模块传递给它来简单地启动远程服务器

from robotremoteserver import RobotRemoteServer
from mylibrary import MyLibrary

RobotRemoteServer(MyLibrary())

默认情况下,服务器监听地址为127.0.0.1和端口8270。如上文所述,远程服务器接受各种配置参数。其中一些在此示例中使用

from robotremoteserver import RobotRemoteServer
from examplelibrary import ExampleLibrary

RobotRemoteServer(ExampleLibrary(), host='10.0.0.42', port=0,
                  port_file='/tmp/remote-port.txt')

从版本1.1开始,可以通过使用参数serve=False来初始化服务器而不启动它。然后可以通过显式调用其serve方法来启动服务器。此示例在功能上等效于上面的示例

from robotremoteserver import RobotRemoteServer
from examplelibrary import ExampleLibrary

server = RobotRemoteServer(ExampleLibrary(), host='10.0.0.42', port=0,
                           port_file='/tmp/remote-port.txt', serve=False)
server.serve()

在后台启动服务器

将服务器分别初始化和启动的主要好处是,这使得在后台线程中启动服务器变得更加容易。在后台线程中启动的服务器与在主线程中运行的服务器工作方式完全相同,只是自动支持使用 Ctrl-C 或信号优雅地停止服务器。因此,如果需要,用户必须单独注册信号处理程序。

以下示例在功能上几乎与前面的示例相同,只是有一点不同。主要区别是并不处理所有相同的信号。

import signal
import threading
from examplelibrary import ExampleLibrary
from robotremoteserver import RobotRemoteServer

server = RobotRemoteServer(ExampleLibrary(), port=0, serve=False)
signal.signal(signal.SIGINT, lambda signum, frame: server.stop())
server_thread = threading.Thread(target=server.serve)
server_thread.start()
while server_thread.is_alive():
    server_thread.join(0.1)

获取活动服务器端口

如果服务器使用默认端口 8270 或在配置服务器时明确给出其他端口,当配置服务器时,您显然知道连接服务器时应使用哪个端口。当使用端口 0 时,服务器将自动选择一个空闲端口,但有多种方法可以找出实际的端口

  • 所使用的地址和端口将被打印到启动服务器的控制台。

  • 如果使用 port_file 参数,服务器将端口写入指定的文件,以便其他工具可以轻松读取。从远程服务器版本 1.1 开始,服务器在停止服务器时自动删除端口文件。

  • 从版本 1.1 开始,服务器具有 activate 方法,可以调用该方法激活服务器而不启动它。此方法返回服务器绑定的端口,并通过以下讨论的属性将其设置为可用。

  • 已启动或激活的服务器实例具有 server_address 属性,其中包含地址和端口的元组。从版本 1.1 开始,还有一个 server_port 属性,其中仅包含整数形式的端口。

停止远程服务器

远程服务器可以通过几种不同的方法优雅地停止

  • 在服务器运行的控制台中按 Ctrl-C。如果服务器在 后台线程 上启动,则自动不支持。

  • 发送进程信号 SIGINTSIGTERMSIGHUP。在 Windows 上不起作用,并且如果服务器在后台线程上启动,则不支持。

  • 使用“停止远程服务器”关键字。可以在 初始化服务器 时使用 allow_remote_stop=False 禁用它。

  • 使用 XML-RPC 接口中的 stop_remote_server 函数。可以通过初始化参数 allow_remote_stop=False 禁用它。

  • 运行 python -m robotremoteserver stop [uri],该命令内部使用上述 stop_remote_server XML-RPC 函数。可以通过初始化参数 allow_remote_stop=False 禁用它。

  • 使用 robotremoteserver 模块提供的 stop_remote_server 函数,类似于 测试服务器是否正在运行。它内部使用 stop_remote_server XML-RPC 函数,并且可以通过初始化参数 allow_remote_stop=False 禁用它。

  • 调用正在运行的服务器实例的 stop 方法。主要用于在 后台运行服务器 时。

测试服务器是否正在运行

从版本 1.0.1 开始,robotremoteserver 模块支持测试远程服务器是否正在运行。这可以通过以脚本形式运行模块并带有 test 参数和可选的 URI 实现

$ python -m robotremoteserver test
Remote server running at http://127.0.0.1:8270.
$ python -m robotremoteserver test http://10.0.0.42:57347
No remote server running at http://10.0.0.42:57347.

从版本 1.1 开始,robotremoteserver 模块包含 test_remote_server 函数,该函数可以用于编程

from robotremoteserver import test_remote_server

if test_remote_server('https://127.0.0.1:8270'):
    print('Remote server running!')

《robotremoteserver》模块还可以通过命令行上的stop参数或通过程序中使用stop_remote_server函数来停止远程服务器。测试和停止应也能与其他Robot Framework远程服务器实现一起工作。

列出关键字和查看文档

使用内置的Libdoc工具可以列出服务器上可用的关键字

$ python -m robot.libdoc Remote::http://127.0.0.1:8270 list
Count Items In Directory
Stop Remote Server
Strings Should Be Equal

也可以通过使用参数show在命令行上显示文档。可以通过提供输出文件名来创建HTML文档

$ python -m robot.libdoc Remote::http://127.0.0.1:8270 MyLibrary.html
/path/to/MyLibrary.html

示例

远程服务器项目包含一个示例,可以在库安装后学习和执行。您可以通过在GitHub上克隆项目来获取示例,它也包含在PyPI上提供的源分布中。

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面