Python测试框架之unittest和pytest

目前搜狗商城接口测试框架用的是unittest+HTMLTestRunner,case数有1097条,目前运行一次自动化测试,时长约为30分钟,期望控制在10分钟或者更短的时间内。近期打算重新优化框架,着重解决运行效率低的问题。最近调研了一下另一种主流测试框架Pytest,Pytest是一个非常成熟的全功能的Python测试框架,本文主要对比了Unittest和Pytest这两种较为流行的Python测试框架。

一、Unittest

Unittest是Python标准库中自带的单元测试框架,Unittest有时候也被称为PyUnit,就像JUnit是Java语言的标准单元测试框架一样,Unittest则是Python语言的标准单元测试框架。

Unittest支持自动化测试,测试用例的初始化、关闭和测试用例的聚合等功能,它有一个很重要的特性:它是通过类(class)的方式,将测试用例组织在一起。

示例:

执行结果:

注:unittest有一个关联模块unittest2,但unittest2仅适用于Python 2.4-2.6。这是由于从Python 2.7开始,unittest增加一些新的特性。为了在老的版本中支持这些特性,所以提供了unittest2这个库。但对于Python 2.7及之后的版本,unittest是唯一的。本次示例中使用的为python2.7。

二、Pytest

Pytest是Python的另一个第三方单元测试库。它的目的是让单元测试变得更容易,并且也能扩展到支持应用层面复杂的功能测试。

pytest的特性有:

  • 支持用简单的assert语句实现丰富的断言,无需复杂的self.assert*函数
  • 自动识别测试模块和测试函数
  • 模块化夹具用以管理各类测试资源
  • 对 unittest 完全兼容,对 nose基本兼容
  • 支持Python3和PyPy3
  • 丰富的插件生态,已有300多个各式各样的插件,社区繁荣

示例:

执行结果:

三、Unittest vs Pytest

 
unittest


pytest


用例编写规则


1)测试文件必须先import unittest

2)测试类必须继承unittest.TestCase

3)测试方法必须以“test_”开头

4)测试类必须要有unittest.main()方法


1)测试文件名必须以“test_”开头或者"_test"结尾(如:test_ab.py)

2)测试方法必须以“test_”开头

3)测试类命名以"Test"开头


用例分类执行

 


默认执行全部用例,也可以通过加载testsuit,执行部分用例


可以通过@pytest.mark来标记类和方法,pytest.main加入参数("-m")可以只运行标记的类和方法


用例前置和后置


提供了setUp/tearDown,只能针对所有用例


pytest中的fixture显然更加灵活。可以任意自定义方法函数,只要加上@pytest.fixture()这个装饰器,那么被装饰的方法就可以被使用


参数化


需依赖ddt库


使用@pytest.mark.parametrize装饰器


断言


很多断言格式(assertEqual、assertIn、assertTrue、assertFalse)


只有assert一个表达式,用起来比较方便


报告


使用HTMLTestRunnerNew库


有pytest-HTML、allure插件


失败重跑


无此功能


pytest支持用例执行失败重跑,pytest-rerunfailures插件

总结:总体来说,unittest用例格式复杂,兼容性无,插件少,二次开发方便。pytest更加方便快捷,用例格式简单,可以执行unittest风格的测试用例,无须修改unittest用例的任何代码,有较好的兼容性。pytest插件丰富,比如flask插件,可用于用例出错重跑,还有xdist插件,可用于设备并行执行,效率更高。

原文地址:https://www.cnblogs.com/gcgc/p/12219243.html

时间: 2024-10-11 22:12:07

Python测试框架之unittest和pytest的相关文章

转 python测试框架最全资源汇总

转自: http://www.testclass.net/list/python_list_1/ xUnit frameworks(单元测试框架) frameworks 框架 unittest - python自带的单元测试库,开箱即用 unittest2 - 加强版的单元测试框架,适用于Python 2.7以及后续版本 pytest - 成熟且功能强大的单元测试框架 plugincompat - pytest的执行及兼容性插件 nosetests - 让python测试更容易一点 slash 

python测试框架&&数据生成&&工具最全资源汇总

xUnit frameworks 单元测试框架frameworks 框架unittest - python自带的单元测试库,开箱即用unittest2 - 加强版的单元测试框架,适用于Python 2.7以及后续版本pytest - 成熟且功能强大的单元测试框架plugincompat - pytest的执行及兼容性插件nosetests - 让python测试更容易一点slash - python实现的单元测试框架 extensions 扩展proboscis - 仿TestNG扩展了unit

[python测试框架学习篇] 分享一个和adb相关的测试框架

https://testerhome.com/topics/7106   (user: zteandallwinner     password: same to qq ) 264768502 · #1 · 2017年01月13日 小小的建议 没缩进不能看,不如贴gist 单纯的adb的封装有很多人写了 比如我(#厚脸皮) https://github.com/264768502/adb_wrapper 比如这贴: https://testerhome.com/topics/6938 如果要处理

python测试框架--nose

最近再浏览Python自动化测试框架,之前接触过unittest,看了篇文章,发现nose貌似更牛逼一些,于是安装试了试,分享一下心得. nose 项目是于 2005 年发布的,也就是 py.test 改名后的一年.它是由 Jason Pellerin 编写的,支持与 py.test 相同的测试习惯做法,但是这个包更容易安装和维护.尽管 py.test 在某些方面有所进步,目前也很容易安装,但是 nose 仍然保持了易用性方面的声誉. 首先安装nose,当然前提是已经安装部署完成python,从

Python单元测试框架 :unittest

unittest是xUnit系列框架中的一员,如果你了解xUnit的其他成员,那你用unittest来应该是很轻松的,它们的工作方式都差不多. unittest核心工作原理 unittest中最核心的四个概念是:test case, test suite, test runner, test fixture. 下面我们分别来解释这四个概念的意思,先来看一张unittest的静态类图(下面的类图以及解释均来源于网络,原文链接): 一个TestCase的实例就是一个测试用例.什么是测试用例呢?就是一

Python单元测试框架:unittest(一)

主要介绍了Python单元测试框架unittest使用方法讲解,本文讲解了unittest概述.命令行接口.测试案例自动搜索.创建测试代码.构建测试套件方法等内容 概述 1.测试脚手架(test fixture) 测试准备前要做的工作和测试执行完后要做的工作.包括setUp()和tearDown(). 2.测试案例(test case) 最小的测试单元. 3.测试套件(test suite) 测试案例的集合. 4.测试运行器(test runner) 测试执行的组件. 命令行接口 可以用命令行运

[python测试框架] http接口测试框架

https://testerhome.com/topics/5631 Http 接口测试框架 (思路 + 实现中 + 开源 + 可能难产) Http 接口测试框架疑问解答 Fiddler 保存会话 (请求) 说明 由于部分内容涉及公司机密,已用字母替换,不影响阅读 实际效果 验证1000个接口平均耗时6s(看机器配置及网速) 第一次投入使用,马上发现5个接口异常并且该验证过程不到30s的时间 框架的下一步 目前已兼容我们公司所有app response body全字段验证(含字段类型) 已有思路

Python测试框架doctest

doctest是python自带的一个模块.本博客将介绍doctest的两种使用方式:一种是嵌入到python源码中,另外一种是放到一个独立文件. doctest 的概念模型 在python的官方文档中,对doctest是这样介绍的: doctest模块会搜索那些看起来像是python交互式会话中的代码片段,然后尝试执行并验证结果. 从名字上是否会让你联想到docstring呢? doctest的编写过程就像你在一个交互式shell中导入了一个被测试模块,然后一条一条执行被测试模块里面的函数一样

python测试框架nose(一)

nose可以理解为是uittest扩张,不是pyhton自带框架,需要通过pip安装,结合allure框架,达到测试报告更加美观 a.通过pip安装 b.测试是否安装成功,通过输入  nosetests 命令 c.第一个demo: import nose def test_demo1(): print 'I am demo1' def test_demo2(): print 'I am demo2' if __name__ == '__main__': nose.main() 通过打开执行窗口,