使用 pytest 在单独的进程中连续(不是并行)运行每个测试用例

问题描述 投票:0回答:1

请问有人可以帮助我吗?

我有 11 个 Python 测试用例。这些测试用例检查框架中的功能。问题是我不能在单个测试套件中多次使用此函数。我想也许我可以在单独的进程中连续运行每个测试用例(而不是并行),因为测试用例是相互依赖的。

我尝试过这种方法,但没有成功:

import multiprocessing

def test_case_1():
    # code
    pass

def test_case_2():
    # code
    pass

if __name__ == '__main__':
    test_cases = [test_case_1, test_case_2]

    for test_case in test_cases:
        process = multiprocessing.Process(target=test_case)
        process.start()
        process.join()
python unit-testing automation pytest testcase
1个回答
0
投票

您当前的方法未按预期工作的原因是

join()
方法会阻塞,直到该过程完成,从而有效地等待第一个 test_case 完成,然后再开始下一个 test_case。由于您想要连续运行测试用例(而不是并行),因此您不应该使用
multiprocessing
模块,因为它是为并行处理而设计的。

相反,您可以简单地在循环中一个接一个地调用测试用例,而不需要进行多重处理。 Python 单元测试框架提供了一种创建测试套件并按顺序运行测试用例的方法。以下是如何实现此目标的示例:

import unittest

def test_case_1():
    # code for test case 1
    pass

def test_case_2():
    # code for test case 2
    pass

class MyTestSuite(unittest.TestCase):
    def test_case_1(self):
        test_case_1()

    def test_case_2(self):
        test_case_2()

if __name__ == '__main__':
    suite = unittest.TestLoader().loadTestsFromTestCase(MyTestSuite)
    unittest.TextTestRunner().run(suite)

在此示例中,我们创建一个测试套件

MyTestSuite
,其中包含两个测试用例:
test_case_1
test_case_2
。正如您在原始代码中提到的,测试用例被编写为单独的函数。
unittest.TextTestRunner().run(suite)
将按照在
MyTestSuite
类中定义的顺序运行测试用例,一个接一个,无需多重处理。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.