如何运行python unittest N次

时间:2017-08-06 06:43:34

标签: python python-3.x unit-testing

我有一个像下面这样的python单元测试,我想要运行整个测试N次

class Test(TestCase)

    def test_0(self):
            .........
            .........
            .........

Test.Run(name=__name__)

任何建议?

2 个答案:

答案 0 :(得分:0)

  

为什么因为... test_0方法包含一个随机选项..所以每次运行时都会根据这些配置选择随机数量的配置和测试。所以我不是多次测试同样的东西..

测试中的随机性使其不可重现。有一天你可能会在100中失败,当你再次运行它时,它已经消失了。

使用现代测试工具使用序号对参数进行参数化,然后使用random.seed为序列中的每个数字设置一个随机的但可重现的测试用例。

portusato建议鼻子,但pytest是一个更现代和流行的工具:

import random, pytest

@pytest.mark.parametrize('i', range(100))
def test_random(i):
    orig_state = random.getstate()
    try:
        random.seed(i)
        data = generate_random_data()
        assert my_algorithm(data) == works
    finally:
        random.setstate(orig_state)

pytest.mark.parametrize将您的单个test_random“爆炸”成100个单独的测试 - test_random[0]test_random[99]

$ pytest -q test.py
....................................................................................................
100 passed in 0.14 seconds

这些测试中的每一项都会为您的算法生成不同的,随机的,可重现的输入data。如果test_random[56]失败,则每次都会失败,因此您就可以对其进行调试。

答案 1 :(得分:0)

如果您不想在第一次失败后停止测试,可以使用 subTest

class Test(TestCase):
    def test_0(self):
        for i in [1, 2, 3]:
            with self.subTest(i=i):
                self.assertEqual(squared(i), i**2)

Docs