2

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

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

  • 我们不是对每个测试进行参数化,而是对每个类进行参数化
  • sayparams是一组元组,每个元组代表不同的参数集。
  • 我们为每个这样的 tupla 创建一个类的不同TestCaseWithParameters实例unittest.TestCase。像这样的东西:
    for test_parameters in params:
        parameterized_test_suite.addTest(ParametrizedTestCase.parametrize(TestCaseWithParameters,param=test_parameters))
  • 这些类中的每一个self.params都使用这些不同的参数注入并运行所有测试功能。
  • 这意味着如果我们有数百个元组params并且TestSomethingWithParameters有几十个测试,那么总共会有很多测试。

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

我已经阅读了这篇关于pytest_generate_tests钩子的文章,但它似乎为每个测试函数注入了依赖项,我需要每个 TestCase ......

最简单的方法是告诉 py.test 运行parameterized_tes_suite我已经创建的特定内容,但我没有找到这样做的方法......

另一种方法是在 TestCase 类级别进行类似的依赖注入,但我也没有找到这样做的方法。

4

1 回答 1

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

有关如何传递多个参数等的详细信息,请参阅参数化标记的文档。还可以查看如何将标记应用于类和模块以获取更多信息。

于 2013-03-20T13:47:14.477 回答