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



我需要为多个函数实现一个测试套件。我正试图找出利用现有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
.
.
.
.

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

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

最新更新