python—在设计测试套件时使用类继承

kyks70gy  于 2021-09-13  发布在  Java
关注(0)|答案(1)|浏览(471)

我需要为多个功能实现一个测试套件。我试图找出利用现有pytest设计模式的最佳实践。
所有功能都有2-3个通用测试用例
每个功能需要不同的预设条件
我目前的设计:

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

当前文件夹结构
repression.py:这个类包含常见的测试用例
test_suv.py:该类继承test_回归类测试用例,并具有特定于suv的测试用例
utils:此文件夹存储程序逻辑
对于具有类继承的测试套件来说,这是一种良好的设计实践吗

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
.
.
.
.

或者有没有更好的方法来构造这些测试用例。

gfttwv5a

gfttwv5a1#

前置条件函数可以用 @pytest.fixture 这可以作为测试方法的参数,而不是效用函数。您可以定义这些装置功能的范围(功能、类、模块、包或会话):有关装置的更多详细信息:https://docs.pytest.org/en/6.2.x/fixture.html
pytest优于unittest——一个原因是您可以避免隐式类需求,并保持测试简单且不太冗长。如果您正在为pytest添加类,那么我们将失去这一优势。imho,您可以将通用测试保留在回归模块中,并避免回归类和测试类继承,因为从长远来看,这将很难维护。
您的测试应该相互独立。如果您想要共享或继承一个公共功能,可以通过fixture来实现,并将其保存在名为 conftest.py 所有这些功能 conftest.py 然后将向包和子包中的所有模块提供有关conftest的更多详细信息

相关问题