Pytest框架和Unittest框架的区别

Pytest框架和Unittest框架区别

1、Unittest

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

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

2、Pytest

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

3、区别

3.1、用例编写规则

3.1.1、Unittest测试框架

1、提供test.cases,test suites,test fixtures,test rurner相关类,让测试更加明确、方便、可控。

2、测试文件编写前,必须先导入Unittest测试框架,import unittest。

3、测试类必须继承unittest.TestCase类,且测试类要Test_开头。(可去掉横线,下同)

4、测试方法要以test_开头。

5、测试类必须要用unittest.main()方法执行。

3.1.2、Pytest测试框架

1、基于Unittest的扩展框架,比Unittest更简洁、更高效。

2、测试文件必须test_开头。

3、测试类命名必须以test_开头。

4、测试方法必须test_开头(函数也一样)。

(规则可自定义。)

3.1.3、总结:

Unittest:用例格式复杂,不能兼客Pytest用例。

Pytest:用例格式简单,可以兼容Unittest用例。

3.2、用例的前置和后置

3.2.1、Unittest测试框架

提供了setUp/tearDowm方法,只能针对所有用例。

3.2.2、Pytest测试框架:

1、Pytest提供了模块级、函数级、类级、方法级的setup/teardown,比Unittest的setup/tearDowm方法更活。

模块级setup_module/teardown_module:开始于模块始末,全局。

类级setup_class/teardown_class:只在类中前后运行一次(类中)。

函数级setup_function/teardow_function:只对函数用例生效(不在类中)。

方法级setup_method/teardown_method:开始于方法始末(在类中)。

类里面的setup/teardown:运行在调用方法的前后。

2、函数前加@pytest.fixtures()装饰器,在测试用例中使用Fixture函数。

可作用于function\module\class\session中。

fixture相对于setup/teardown来说的优势,如下:

命名方式灵活,不局限于setup/teardown。

conftest.py配置里可以实现数共享,无需import就可自动找到配置数据,可供多个.py文件调用。

scope="module",可以实现多个.py文件跨文件共享前置。

scope="session",可以实现多个.py文件跨文件使用一个session来完成用例。

使用yeild返回,相当于teardown的作用。

3.3、参数化

Unittest测试框架:结合DDT实现参数化。

Pytest测试框架:直接使用@pytest.mark.parametrize装饰器。

3.4、断言

Unittest测试框架:可使用提供的assertEqual,assertIn、assertTrue,assertFalse断言方法。

Pytest测试框架:直接使用Python语言内置的assert表达式。

3.5、用例分类执行

Unittest测试框架:默认执行全部用例,可以通过加载testsuite执行部分模块的用例。

Pytest测试框架:可以通过@pytest.mark来标记测试用例,执行命令前加上参数"-m",即可运行标记的用例。

3.6、失败重运行

Unittest测试框架:无。

Pytest测试框架:支持用例执行失败重跑,提供了pytest-rerunfailures插件。

3.7、报告

Unittest测试框架:使用HTMLTestRunnerNew库生成测试报告。

Pytest测试框架:使用pytest-HTML、allure插件生成测试报告。

相关推荐
B站计算机毕业设计超人3 分钟前
计算机毕业设计SparkStreaming+Kafka旅游推荐系统 旅游景点客流量预测 旅游可视化 旅游大数据 Hive数据仓库 机器学习 深度学习
大数据·数据仓库·hadoop·python·kafka·课程设计·数据可视化
IT古董27 分钟前
【人工智能】Python在机器学习与人工智能中的应用
开发语言·人工智能·python·机器学习
湫ccc1 小时前
《Python基础》之pip换国内镜像源
开发语言·python·pip
hakesashou1 小时前
Python中常用的函数介绍
java·网络·python
菜鸟的人工智能之路1 小时前
极坐标气泡图:医学数据分析的可视化新视角
python·数据分析·健康医疗
菜鸟学Python1 小时前
Python 数据分析核心库大全!
开发语言·python·数据挖掘·数据分析
小白不太白9501 小时前
设计模式之 责任链模式
python·设计模式·责任链模式
喜欢猪猪1 小时前
Django:从入门到精通
后端·python·django
糖豆豆今天也要努力鸭1 小时前
torch.__version__的torch版本和conda list的torch版本不一致
linux·pytorch·python·深度学习·conda·torch
何大春2 小时前
【弱监督语义分割】Self-supervised Image-specific Prototype Exploration for WSSS 论文阅读
论文阅读·人工智能·python·深度学习·论文笔记·原型模式