https://github.com/robotframework/PythonRemoteServer

  允许在不同于 Robot Framework 本身运行的进程或机器上托管测试库。

安装

  pip install robotremoteserver   ||  python setup.py install

配置

远程服务器被实现为一个类RobotRemoteServer,它在初始化时接受以下配置参数:

ArgumentDefaultExplanation
library   Test library instance or module to host. Mandatory argument.(测试库实例或模块
host '127.0.0.1' Address to listen. Use '0.0.0.0' to listen to all available interfaces.
port 8270 Port to listen. Use 0 to select a free port automatically. Can be given as an integer or as a string. The default port 8270 is registered by IANA for remote server usage.
port_file None File to write the port that is used. None (default) means no such file is written.
allow_stop 'DEPRECATED' Deprecated since version 1.1. Use allow_remote_stop instead.
serve True If True, start the server automatically and wait for it to be stopped. If False, server can be started using the serve method. New in version 1.1.
allow_remote_stop True Allow/disallow stopping the server remotely using Stop Remote Server keyword and stop_remote_server XML-RPC method. New in version 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或在配置服务器时明确给出其他端口,您显然知道连接服务器时使用哪个端口。使用 port 时0,服务器会自动选择一个空闲端口,但有多种方法可以找到实际

  • 使用的地址和端口打印到启动服务器的控制台中。
  • 如果使用port_file参数,服务器将端口写入指定文件,其他工具可以轻松读取它。从远程服务器版本 1.1 开始,当服务器停止时,服务器会自动删除端口文件。
  • 从 1.1 版本开始,服务器具有activate无需启动即可调用以激活服务器的方法。此方法返回服务器绑定的端口,并通过下面讨论的属性将其设置为可用。
  • 启动或活动的服务器实例具有server_address包含地址和端口作为元组的属性。从版本 1.1 开始,还有一个server_port属性只包含作为整数的端口。

停止远程服务器

  方法

  • 点击Ctrl-C运行服务器的控制台。如果服务器在后台线程上启动,则不自动支持
  • 发送的过程SIGINTSIGTERMSIGHUP信号。如果服务器在后台线程上启动,则不适用于 Windows 并且不受支持。
  • 使用Stop Remote Server关键字。可以allow_remote_stop=False初始化服务器使用禁用 
  • stop_remote_server在 XML-RPC 接口中使用函数。可以使用allow_remote_stop=False初始化参数禁用
  • 运行python -m robotremoteserver stop [uri]它采用上述stop_remote_server内部XML-RPC功能。可以使用allow_remote_stop=False初始化参数禁用
  • 使用模块stop_remote_server提供功能 robotremoteserver测试服务器运行时类似stop_remote_server内部使用XML-RPC 功能,可以通过allow_remote_stop=False初始化参数禁用
  • 调用stop正在运行的服务器实例方法。在后台运行服务器时主要有用 

测试远程服务器是否运行

$ 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可以以编程方式使用的功能

robotremoteserver模块还可用于通过stop在命令行上使用参数或以stop_remote_server编程方式使用该 函数来停止远程服务器测试和停止也适用于其他 Robot Framework 远程服务器实现

 

from robotremoteserver import test_remote_server

if test_remote_server('http://localhost:8270'):
    print('Remote server running!')

 

列出远程服务器关键字和查看文档

使用内置的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

 

Example

#!/usr/bin/env python

from __future__ import print_function

import os
import sys

from robotremoteserver import RobotRemoteServer


try:
    basestring
except NameError:   # Python 3
    basestring = str


class ExampleLibrary(object):
    """Example library to be used with Robot Framework's remote server.

    This documentation is visible in docs generated by `Libdoc`.
    """

    def count_items_in_directory(self, path):
        """Returns the number of items in the directory specified by `path`."""
        items = [i for i in os.listdir(path) if not i.startswith('.')]
        return len(items)

    def strings_should_be_equal(self, str1, str2):
        print("Comparing '%s' to '%s'." % (str1, str2))
        if not (isinstance(str1, basestring) and isinstance(str2, basestring)):
            raise AssertionError("Given strings are not strings.")
        if str1 != str2:
            raise AssertionError("Given strings are not equal.")


if __name__ == '__main__':
    RobotRemoteServer(ExampleLibrary(), *sys.argv[1:])

启动和查看文档

D:\Document\py\workspace\PythonRemoteServer-master\example>python examplelibrary.py

Robot Framework remote server at 127.0.0.1:8270 started.
C:\Users\Administrator>python -m robot.libdoc Remote::http://127.0.0.1:8270 MyLibrary.html
C:\Users\Administrator\MyLibrary.html

 

 

 查看关键字

C:\Users\Administrator>python -m robot.libdoc Remote::http://127.0.0.1:8270 list

Count Items In Directory
Stop Remote Server
Strings Should Be Equal

 

test.robot

*** Settings ***
Library       Remote    http://${ADDRESS}:${PORT}

*** Variables ***
${ADDRESS}    127.0.0.1
${PORT}       8270

*** Test Cases ***
Count Items in Directory
    ${items1} =    Count Items In Directory    ${CURDIR}
    ${items2} =    Count Items In Directory    ${TEMPDIR}
    Log    ${items1} items in '${CURDIR}' and ${items2} items in '${TEMPDIR}'

Failing Example
    Strings Should Be Equal    Hello    Hello
    Strings Should Be Equal    not      equal

测试结果

Starting test: Tests.Count Items in Directory
20211110 11:00:54.938 :  INFO : ${items1} = 3
20211110 11:00:54.952 :  INFO : ${items2} = 4580
20211110 11:00:54.953 :  INFO : 3 items in 'D:\Document\py\workspace\RtfDistributedSys\workspace\Mdoule\RobotServer' and 4580 items in 'C:\Users\ADMINI~1\AppData\Local\Temp'
Ending test:   Tests.Count Items in Directory

Starting test: Tests.Failing Example
20211110 11:00:54.958 :  INFO : Comparing 'Hello' to 'Hello'.
20211110 11:00:54.961 :  INFO : Comparing 'equal' to 'equal'.
Ending test:   Tests.Failing Example
posted on 2021-11-10 11:09  Old-Kang  阅读(389)  评论(0编辑  收藏  举报