python - 从 Windows 主机在远程 Linux 机器上运行部分 Python 单元测试

标签 python linux windows pytest xdist

我的情况是这样的:

  • 我有一个基于 windows 的服务器程序和一个基于 linux 的客户端。
  • 我对在本地 linux 机器上运行并且需要在本地 linux 机器上运行的 linux 客户端进行了许多测试
  • 我需要从 windows 服务器机器运行一些代码,这将向 linux 客户端发送一些消息。然后,应在 linux 客户端机器上执行测试,以验证这些消息的效果

所以一个典型的测试用例看起来像这样,在 windows 主机上运行:

test_example_message(self):
    # has to be executed locally on windows server
    send_message(EXAMPLE, hosts)
    # has to be executed locally on linux clients
    for host in hosts:
        verify_message_effect(EXAMPLE, host)

我发现 pytest-xdist 以某种方式能够做到这一点。

关于如何使用它有什么好的教程或代码示例吗?

最佳答案

我的最终设计使用 ssh 和多处理而不是 xdist(在 execute_tc() 函数中):

import multiprocessing
import test_functions

def test_example_message(self):
"""Example test case"""
    # to get IPs, usernames, passwords, other required data
    config = get_test_config('example_message')
    # will take care of threading and executing parts
    result_dict = execute_tc(config)
    # to fail or not to fail. take care of proper reporting
    process_results(result_dict)

def execute_tc(config):
"""Execute test code in parallel"""
    # create shared results dictionary
    manager = multiprocessing.Manager()
    result_dict = manager.dict({})
    # create processes
    processes = []
    for func, platform, args in config:
        function = getattr(test_functions, func)
        worker = multiprocessing.Process(target=function, args=[result_dict, platform, args])
        worker.daemon = True
        worker.start()
        processes.append(worker)

    for process in processes:
        process.join()

    return result_dict

关于python - 从 Windows 主机在远程 Linux 机器上运行部分 Python 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32089605/

相关文章:

python - 如何在python中完成相对导入

linux - gnutls 配置错误 : checking for libgcrypt. .. 没有

python - 在 Ubuntu 18.04 上安装最新版本的 QGis

linux - 给定与之关联的 ip 地址,如何获取 NIC 卡的逻辑名称?

windows - 跨机器 UI 自动化框架?

python - 如何在python中运行并行程序

python - 使用 CRAM-MD5 的 SMTP 身份验证

windows - 如何在窗外画画?

python - Python中等效的构建器模式

mysql - Seafile 服务器的 SQlite 到 MySQL 迁移