py.test在特定的testSuite中运行测试

时间:2013-02-27 19:36:46

标签: parameterized pytest

我是py.test的新手。到目前为止,我喜欢我所看到的并希望将其集成到我们的CI流程中。

目前我们为测试使用了不同类型的参数化方案,我将简要解释一下:

  • 而不是按测试参数化,我们按类
  • 进行参数化
  • params是元组中的一个元组,每个元组代表不同的参数集。
  • 我们为每个这样的tupla创建了一些TestCaseWithParameters的{​​{1}}类的不同实例。这样的事情:
unittest.TestCase
  • 这些类中的每一个都注入 for test_parameters in params: parameterized_test_suite.addTest(ParametrizedTestCase.parametrize(TestCaseWithParameters,param=test_parameters)) 并运行所有测试,并使用这些不同的参数。
  • 这意味着如果我们在self.paramsparams中有数百个元组有几十个测试,那么总共有很多测试。

我的问题:我如何将其翻译成py.test?

我已经阅读了有关TestSomethingWithParameters挂钩的this文章,但似乎它为每个测试函数注入依赖项,我需要每个TestCase ...

最简单的方法是告诉py.test运行我已创建的特定pytest_generate_tests,但我找不到办法这样做......

另一种方法是在TestCase类级别执行类似的依赖注入,但我还没有找到办法。

1 个答案:

答案 0 :(得分:2)

您可以使用@pytest.mark.parametrize标记轻松地对整个类进行参数化:

import pytest

@pytest.mark.parametrize('n', [0, 1])
class TestFoo:

    def test_42(self, n):
        assert n == 42

    def test_7(self, n):
        assert n == 7

有关如何传递多个参数等的详细信息,请参阅documentation on the parameterize marker。另请参阅apply markers to classes and modules了解有关此问题的详细信息。