在设计测试套件时使用 Class 继承

Using Class inheritance while designing test suite

我需要为多个函数实现一个测试套件。 我正在尝试找出利用现有 pytest 设计模式的最佳实践。

我目前的设计:

 /utils
    logic.py
 /tests 
    Test_Regression.py
    Sedan/
        Test_Sedan.py
    SUV/
        Test_SUV.py
    Hatchback/
        Test_Hatchback.py
 /config
    Configuration.py

当前文件夹结构

对于具有 class 继承性的测试套件来说,这是一个好的设计实践吗

   class Regression:
    @pytest.parameterize(x, utils.logic_func())
    @pytest.mark.testengine
    def test_engine(x,self):
        #validates logic
        assert x == 0
    @pytest.parameterize(y, utils.logic_func())    
    @pytest.mark.testheadlight
    def test_headlight(y,self):
        #validates logic
        assert y == 0
        
        
class Test_SUV(Test_Regression):
    
    def get_engine_values():
        # calls program logic
        return x
.
.
.
.

或者是否有更好的方法来构建这些测试用例。

  1. Preconditions 函数可以用 @pytest.fixture 注释,并且可以用作测试方法的参数而不是实用函数。您可以定义这些夹具功能的范围(功能、class、模块、包或会话):有关夹具的更多详细信息:https://docs.pytest.org/en/6.2.x/fixture.html
  2. Pytest 优于 unittest - 一个原因是您可以避免隐含的 class 要求并使您的测试简单且不那么冗长。如果你为 pytest 添加 class,那么我们将失去这个好处。恕我直言,您可以将常用测试保留在回归模块中并避免回归 class 和测试 Class 继承,因为这将很难在 long 运行.
  3. 中维护
  4. 您的测试应该相互独立。如果有一个你想共享或继承的通用功能,你可以通过固定装置来实现,并将它们保存在一个名为 conftest.py 的模块中,然后 conftest.py 中的所有这些功能将可供所有模块使用包和子包
  5. 的更多详细信息