在设计测试套件时使用 Class 继承
Using Class inheritance while designing test suite
我需要为多个函数实现一个测试套件。
我正在尝试找出利用现有 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 :这个class包含常见的测试用例
Test_SUV.py : 这个class继承了Test_Regressionclass测试用例并且有SUV特定测试案例
Utils : 该文件夹存放程序逻辑
对于具有 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
.
.
.
.
或者是否有更好的方法来构建这些测试用例。
- Preconditions 函数可以用
@pytest.fixture
注释,并且可以用作测试方法的参数而不是实用函数。您可以定义这些夹具功能的范围(功能、class、模块、包或会话):有关夹具的更多详细信息:https://docs.pytest.org/en/6.2.x/fixture.html
- Pytest 优于 unittest - 一个原因是您可以避免隐含的 class 要求并使您的测试简单且不那么冗长。如果你为 pytest 添加 class,那么我们将失去这个好处。恕我直言,您可以将常用测试保留在回归模块中并避免回归 class 和测试 Class 继承,因为这将很难在 long 运行.
中维护
- 您的测试应该相互独立。如果有一个你想共享或继承的通用功能,你可以通过固定装置来实现,并将它们保存在一个名为
conftest.py
的模块中,然后 conftest.py
中的所有这些功能将可供所有模块使用包和子包 的更多详细信息
我需要为多个函数实现一个测试套件。 我正在尝试找出利用现有 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 :这个class包含常见的测试用例
Test_SUV.py : 这个class继承了Test_Regressionclass测试用例并且有SUV特定测试案例
Utils : 该文件夹存放程序逻辑
对于具有 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
.
.
.
.
或者是否有更好的方法来构建这些测试用例。
- Preconditions 函数可以用
@pytest.fixture
注释,并且可以用作测试方法的参数而不是实用函数。您可以定义这些夹具功能的范围(功能、class、模块、包或会话):有关夹具的更多详细信息:https://docs.pytest.org/en/6.2.x/fixture.html - Pytest 优于 unittest - 一个原因是您可以避免隐含的 class 要求并使您的测试简单且不那么冗长。如果你为 pytest 添加 class,那么我们将失去这个好处。恕我直言,您可以将常用测试保留在回归模块中并避免回归 class 和测试 Class 继承,因为这将很难在 long 运行. 中维护
- 您的测试应该相互独立。如果有一个你想共享或继承的通用功能,你可以通过固定装置来实现,并将它们保存在一个名为
conftest.py
的模块中,然后conftest.py
中的所有这些功能将可供所有模块使用包和子包 的更多详细信息