pytest的交错重复

时间:2018-07-31 10:28:13

标签: pytest

我有一些测试,我想重复几次。我尝试了pytest-repeat插件

pip3 install pytest-repeat

import pytest
@pytest.mark.repeat(2)
class TestDemo():
    def test_demo1(self):
        pass
    def test_demo2(self):
        pass

这有效

test_class_repeat.py::TestDemo::test_demo1[1/2] PASSED
test_class_repeat.py::TestDemo::test_demo1[2/2] PASSED
test_class_repeat.py::TestDemo::test_demo2[1/2] PASSED
test_class_repeat.py::TestDemo::test_demo2[2/2] PASSED

除了我希望以交错的顺序运行所有测试,然后再次运行所有测试

test_class_repeat.py::TestDemo::test_demo1[1/2] PASSED
test_class_repeat.py::TestDemo::test_demo2[1/2] PASSED
test_class_repeat.py::TestDemo::test_demo1[2/2] PASSED
test_class_repeat.py::TestDemo::test_demo2[2/2] PASSED

有一种简单的方法吗?

3 个答案:

答案 0 :(得分:0)

不是一个很干净的解决方案,只是天真地定义了一个测试函数,该函数在跳过定义本身的同时执行交错的测试,并对此重复执行:

import pytest

@pytest.mark.skip(reason='Definition only')
class TestDemo():
    def test_demo1(self):
        print('In Test 1')
        assert 1 == 1
    def test_demo2(self):
        print('In Test 2')
        assert 2 == 2


@pytest.mark.repeat(2)
def test_all():
    demo = TestDemo()
    demo.test_demo1()
    demo.test_demo2()

执行(在jupyter笔记本中)给出:

Test.py::TestDemo::test_demo1 SKIPPED
Test.py::TestDemo::test_demo2 SKIPPED
Test.py::test_all[1/2] 
In Test 1
In Test 2
PASSED
TestProject.py::test_all[2/2] 
In Test 1
In Test 2
PASSED

侧面说明:如果两个嵌套测试之一未通过test_all也未通过,那么交错测试是否有希望?

答案 1 :(得分:0)

您可以通过保管箱使用pytest-flakefinder软件包。运行完成后,它将重复测试。

用法:@Input() placeholder: string;

答案 2 :(得分:0)

如果函数具有参数,则可以使用pytest.mark.parametrize完成。下面是一个示例。

FROM wurstmeister/kafka:latest