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