许多pytest固定装置与一个大型“容器”固定装置

时间:2018-12-16 07:59:51

标签: python unit-testing pytest

我们有一个大型的python项目,目前已使用pytest进行了测试,目前已使用unittest样式类,然后开始将其迁移到基于模块的功能样式测试中。

我们正在辩论是否应该:

  1. 将我们的大型测试基础类拆分为许多小型独立的pytest固定装置;
  2. 维护一个大型灯具,懒惰地导入所有其他灯具。

许多灯具的优点:

  • 模块化并且可能易于维护
  • 每个测试仅使用所需的内容

一种大型灯具的优点:

  • 更少的样板代码,每个测试只有一个额外的关键字arg

我们该怎么办?只要有解释,任何意见都是值得欢迎的。谢谢:)

1 个答案:

答案 0 :(得分:4)

使用专用灯具比大型灯具有很多优势。归功于pytest的流行。

  1. 不同的灯具可以再现被测系统的各种互斥状态。当您要测试系统行为的各种情况时,这很有用。单个夹具不能提供这样的灵活性。
  2. Pytest可让您灵活地组合对灯具when one fixture uses the results of the execution of another的调用。分解是一种有效的编程模式,测试也不例外。
  3. Fixtures in pytest can be parameterized,这是一个非常有用的功能,但是如果您为所有测试设定一个固定的夹具,那么它的应用将是不可能的。
  4. Conftest.py is a directory specific in pytest.因此pytest中的装置可以是全局的(位于conftest中),局部的(位于test模块内部)和中间的(位于conftest处在程序包级别)。这样一来,您就可以重用通用代码,而又不会在特定情况下失去灵活性。
  5. Fixtures have scope(函数,类,模块,会话),可提供更大的灵活性。

pytest框架的根本思想是在必要时在这些级别使用固定装置。与xUnit样式相比,这是一个很大的优势,但是如果您不使用这些优势,则过渡到pytest毫无意义。