自动化测试框架系列Python-unittest与pytest的区别

1. 什么是框架

框架——软件框架(software framework),通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。

——百度百科

  简单来说,框架是提供一些基本的功能与约束条件,让你去实现业务功能。举个生活栗子,给你个厨房,你可以用来做饭,烧烤和用作杂物间等,但是你不可能放张床,用来睡觉(豪宅别墅除外)。厨房提供的是厨房的框架,你必须遵从框架内的约束,去做你想做的事。超过框架之外的功能是无法实现。

2. 自动化测试框架

自动化测试框架,简单来说就是应用自动化测试的框架。这句话好像是废话。其实,就是为了解决某些特定问题和测试需求,而开发解决问题的组件。

  自动化测试框架的定义为:由一个或多个自动化测试基础模块、自动化测试管理模块、自动化测试统计模块等组成的工具集合————百度百科。

我们知道软件测试按开发阶段划分:单元测试,集成测试,系统测试,验收测试,用户测试等。这里说的单元测试,就是第一阶段,一般都是开发去做,在国内绝大部分公司都是开发去做单元测试。单元测试就是测试的对象是程序中的最小单元。程序的最小单元可以是一个函数,一个类,也可以是函数的组合,类的组合。 

python的单元测试框架很多unittest、pytest、nose等,这里主要对比unittest 和pytest。

3、Unittest

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

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

unittest不需要单独去下载安装,python内置单元测试框架直接使用。

执行结果:


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

 

4. Pytest

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

pytest的特性有:

支持用简单的assert语句实现丰富的断言,无需复杂的self.assert*函数

自动识别测试模块和测试函数

模块化夹具用以管理各类测试资源

对 unittest 完全兼容,对 nose基本兼容

支持Python3和PyPy3

 

示例:

执行结果:

5. Unittest vs Pytest

5.1 用例编写规则

5.2 用例前置与后置条件 

 

 

 5.3 断言

 5.4 测试报告

5.5 失败重跑机制

5.6 参数化

5.7 用例分类执行

 

5.8 表格形式 

unittestpytest
用例编写规则

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://blog.csdn.net/zhusongziye/article/details/103963042

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值