我需要为多个函数实现一个测试套件。我正试图找出利用现有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
当前文件夹结构
Regression.py:这个类包含常见的测试用例
Test_SUV.py:该类继承Test_Regression类测试用例,并具有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
.
.
.
.
或者有没有更好的方法来构建这些测试用例。
- Preconditions函数可以用
@pytest.fixture
进行注释,并且可以用作测试方法的参数,而不是实用程序函数。您可以定义这些fixture函数的范围(函数、类、模块、包或会话(:有关fixture的更多详细信息:https://docs.pytest.org/en/6.2.x/fixture.html - 基于单元测试的Pytest——其中一个原因是您可以避免隐含的类需求,并保持测试的简单性和不那么冗长。如果您正在为pytest添加类,那么我们将失去这一优势。IMHO,您可以将常见测试保留在回归模块中,并避免回归类和测试类继承,因为从长远来看,这将很难维护
- 你的测试应该相互独立。如果有一个通用功能要共享或继承,您可以通过fixture来实现,并将它们保存在名为
conftest.py
的模块中,然后conftest.py
中的所有这些功能将可用于包和子包中的所有模块。有关conftest的更多详细信息