1

我的情况是这样的:

  • 我有一个基于 Windows 的服务器程序和一个基于 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以某种方式能够做到这一点。

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

4

2 回答 2

1

我的最终设计使用 ssh & multiprocessing 而不是 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
于 2015-08-24T07:39:13.663 回答
0
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

我认为您已经更改了执行测试用例方法来执行特定的测试用例。

于 2015-08-25T11:39:03.543 回答