我有一个像下面这样的python单元测试,我想要运行整个测试N次
class Test(TestCase)
def test_0(self):
.........
.........
.........
Test.Run(name=__name__)
任何建议?
答案 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)