【问题标题】:How to run all pytest tests with extra function calls using class如何使用类通过额外的函数调用运行所有 pytest 测试
【发布时间】:2021-03-25 07:19:50
【问题描述】:

我有一个名为 BaseTest 的基类,我的所有测试用例都继承自它。

每个 TestCase 都有 X 个测试和一个方法 - different_configuration()

而不是为每个测试创建 test_xyz 和 test_xyz_different(这意味着我在代码中的测试加倍,如果我有 x 个不同的配置,甚至更多)

有没有办法让基类有一些东西,甚至是一个固定装置,每个现有测试将创建/运行另一个测试,但会在开始时调用 self.different_configuration()。

额外信息 - 我有一个 dict 作为具有配置的属性,并且有一个配置,对于每个测试,我想测试两个可用选项。

self.different_configuration() 只是在测试之前更改配置值。

插图 -

    def test_x(self):
        self.run_and_verify()

    def test_x_different_configuration(self):
        self.different_configurations()
        self.run_and_verify()

所以对于每个现有的测试,我都会在开始时使用这个函数调用创建另一个测试,难道没有更简洁的方法来实现它吗?

【问题讨论】:

  • 您尝试过使用pytest.mark.parametrize 吗? docs.pytest.org/en/stable/parametrize.html 如果这对您的用例来说还不够,我认为您需要编写一个插件来修改测试集合。
  • 如果你想试试测试采集路线,也许你可以使用这个钩子docs.pytest.org/en/stable/…
  • 我可以使用参数化来做到这一点,但是对于每个测试我都必须使用相同的值进行参数化,这会很丑陋,这似乎是重复不必要的代码。
  • 如何使用那个钩子?我读了一点,但不太明白它对我有什么帮助。
  • 您可以将钩子函数放在您的conftest.py 中,它将使用参数session, config, items 调用。 items 是将要执行的测试列表,您可以在其中添加新项目。例如,您可以轻松地复制该列表中的项目,并且测试将被执行多次。但是,我不确定您是否真的可以从那里拨打您的different_configurations

标签: python pytest python-unittest


【解决方案1】:

你可以parametrize a fixture

不过,您必须将配置值从字典中提取到一个列表中,才能在 params 参数上使用它。

import pytest

@pytest.fixture(scope="module", params=[config1, config2])
def different_configuration(request):
    return request.param

然后,在您的测试中,您可以使用每个配置值以某种方式根据需要更改配置:

def test_x(self, different_configuration):
    self.different_configurations(different_configuration)
    self.run_and_verify()

或者类似的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    • 1970-01-01
    • 2019-02-14
    • 2020-04-08
    • 2019-11-17
    • 2020-08-04
    • 1970-01-01
    相关资源
    最近更新 更多