测试 运行 来自导入 class

Tests being run from imported class

我有一个基础 class,其中包含一些与此类似的测试:

class TestA:
    def test_something(self):
        data = self._generate_some_data()
        assert something_about_data

    def _generate_some_data(self)
        return some_data

另一个 class 在 TestA 中重复使用测试逻辑但提供不同的数据:

# This is the line that is giving me a problem
from somemodule import TestA

class TestB(TestA):
     def _generate_some_data(self)
        return some_other_data

请注意,我这样做并不是简单地在 TestA 中创建另一个测试,因为它们各自测试不同的 class AB(尽管 classes 具有相同的接口)

我 运行 遇到的问题是,在 TestB 模块中导入 TestA 时,名称是在模块的命名空间中声明的,因此它被 pytest 搜索测试时。

这导致 TestA 测试被 运行 两次:一次是找到并扫描其模块,另一次是扫描 TestB 模块。

我想到了两个解决方案:

  1. 一个简单的解决方法:在导入时重命名 TestA 以便 pytest 扫描找不到它:
from somemodule import TestA as BaseTestA

class TestB(BaseTestA):
    ...
  1. 我可以将通用逻辑提取到抽象 class 中,其名称与 pytest 搜索不匹配,并且可以安全地导入并由两个测试 class 继承。

第一个选项,我不喜欢,因为它看起来很老套。关于第二个选项,我真的不想将逻辑提取到另一个 class.

有没有其他方法可以解决我没有看到的这个问题?

只需使用:

import somemodule

class TestB(somemodule.TestA):
    ...