更强大的测试框架 Pytest

不少同学做自动化测试时选择的是 Unittest 框架。Unittest 框架是 xunit 系列的测试框架 ,这类型的框架都具有很多共同的特性,都是各种语言自带的,比如 Java -> Junit, C# -> Nunit 等等。它们都是以类作为用例的基本形态,都不支持数据驱动、报告也相对比较单调。

但是相对来说,xunit 系列的框架都相对容易入门,并且结合其他的一些辅助工具也能完成我们想要的效果。但是毕竟是辅助工具,所以与原生的框架配合并不尽善尽美。比如我们结合 Selenium 或 Requests 去做自动化测试时,并发运行始终不能很好的和 HTML 结构的报告结合。

如果你的个人技术能力很强,当然可以去定制开发,但是会耗费太多的成本。

如果你有下面的需求,Pytest 将能更好的完成:

  • 更加方便的用例编写: xunit 系列的测试框架要求必须都以类作用用例的基本单元,如果你想以更灵活方便的用例编写方式;
  • 用例失败重新运行: 自动化测试时,出现用例失败很大概率可能是网络临时中断、相关服务本身的异常(比如 Appium、Selenium 等)、或者是环境不稳定等等。这种情况下通过对失败的用例重新运行几次,大概率会将这一类的问题避免掉;
  • 选择性执行用例: 在日常的自动化测试过程中,我们有很多的运行场景,比如冒烟测试、核心功能回归、线上巡检等等。这些不同的运行场景需要运行的自动化测试用例也不一样,比如冒烟测试针对主要功能、核心功能回归需要对主要流程进行较为详细的测试、线上巡检只检查用户使用频率较高的功能等等;
  • 并发执行: 为提高测试用例的运行效率,我们一般会采用多线程或者多进程机制来运行测试。但是这种情况需要熟悉 Python 的这些机制然后进行编程,并且需要修改当前的 HTML 测试报告;
  • 参数化: Unittest 本身都不具备参数化功能,需要额外引入第三方的库;
  • 更加丰富的测试固件: Unittest 只支持到模块级别的测试固件,如果你想要能够在整个测试过程只运行一次测试固件时。或者你想通过测试固件完成更加丰富的功能时;
  • 更加漂亮的测试报告: allure 是公认的漂亮且功能强大、展示丰富的测试报告,对 Python 语言的支持仅支持 Pytest 等少数的测试框架。而且 Pytest 本身也有 HTML 的插件,本身功能也很强大,如果你熟悉 CSS 还可以轻松的定制修改;
  • 苦于去记各种 assert 方法: Unittest 中提供了很多的 assert 断言方法,让人眼花缭乱不知道哪些有用哪些没用。在 Pytest 里面 ,你只需要用 assert 语句就够了;
  • 历史遗留了很多其他测试框架的用例: Pytest 支持近乎 Python 中所有测试框架编写的用例, 也就是说你用 unittest 写的用例或者是 nosetest 写的用例,Pytest 都能顺滑的执行。

不仅是以上这些 ,Pytest 通过自身强大的功能和丰富的插件,能提供各种测试需要的测试固件,并且不仅限于 setUp 和 tearDown。如果你是 Python 自动化测试的重度用户 ,迟早会加入 Pytest 的阵营。

在 Python 中有两大第三方的测试库,nosetest 和 Pytest ,nosetest 的社区已经很沉寂了,Pytest 一直保持着不断的更新维护和活跃的社区,同时 Pytest 有非常多的插件库可选择,可以让你的自动化测试更加的强大和有趣。

稍微有一点遗憾的是,Pytest 学习成本会略高于 Unittest,毕竟灵活和强大带来的副作用就是难以学习和理解。

你可能感兴趣的:(更强大的测试框架 Pytest)