pytest自动化测试框架和unittest自动化测试框架的区别

news2024/11/17 7:31:33

目录

Unittest vs Pytest

  用例编写规则

用例前置与后置条件

断言

测试报告

失败重跑机制

参数化

用例分类执行

实例演示

前后置区别

参数化区别

总结


python的单元测试框架经常使用的是unittest,因为它比较基础,并且可以进行二次开发,如果你的开发水平很高,集成开发自动化测试平台也是可以的接下来主要讲unittest与pytest的区别,pytest相对unittest而言,代码简洁,使用便捷灵活,并且插件很丰富。

Unittest vs Pytest

主要从用例编写规则、用例的前置和后置、参数化、断言、用例执行、失败重运行和报告这几个方面比较unittest和pytest的区别

  用例编写规则

 

用例前置与后置条件

 pytest自动化测试框架:3天学会Pytest自动化测试框架,哭着都要给我看完_哔哩哔哩_bilibiliicon-default.png?t=N4N7https://www.bilibili.com/video/BV1oX4y1Z7yw/?spm_id_from=333.999.0.0

           

 断言

 

测试报告

失败重跑机制

参数化

用例分类执行

 

如果不好看,可以看下面表格:

unittestpytest

用例编写方法

1)测试文件必须导入unittest包

2)测试必须继承unittest.TestCase

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

4)测试方法必须要以test_ 打头

1)测试文件名要以test_打头,或者_test结尾

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一个表达式,用起来比较方便

生成测试报告使用HTMLTestRunnerpytest-HTML、allure插件

失败重跑无pytest-rerunfailures插件可支持失败重跑

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

实例演示

前后置区别

  这里抽用例前置与后置的区别来讲,先看unittest的前后置使用:

import unittest
 
 
class TestFixtures01(unittest.TestCase):
    # 所有用例执行前执行
    def setUp(self) -> None:
        print("setUp开始")
    def tearDown(self) -> None:
        print("tearDown结束")
 
    # 每条用例执行前执行
    @classmethod
    def setUpClass(cls) -> None:
        print("setUpClass开始")
 
    @classmethod
    def tearDownClass(cls) -> None:
        print("tearDownClass结束")
 
    # 测试用例
    def test_001(self):
        print("测试用例001")
 
class TestFixtures02(unittest.TestCase):
    def test_002(self):
        print("测试类2")
 
# 每个模块执行前执行
def setUpModule():
    """
    在所有测试类在调用之前会被执行一次,函数名是固定写法,会被unittest框架自动识别
    """
    print('集成测试 >>>>>>>>>>>>>>开始')
def tearDownModule():
    print("集成测试 >>>>>>>>>>>>>>结束")
 
 
 
if __name__ == '__main__':
    unittest.main()

  运行结果:

 

从结果上得知, 三个方法的逻辑优先级: setUp()&tearDown() < setUpClass()&tearDownClass() < setUpModule()&tearDownModule()

接下来看pytest的前后置:

1、我们都知道在自动化测试中都会用到前后置,pytest 相比 unittest 无论是前后置还是插件等都灵活了许多,还能自己用 fixture 来定义。

首先了解一下,用例运行前后置级别如下:

  1.模块级:全局的,整个模块开只运行一次,优先于测试用例。

  2.类级别:定义在类里面,只针对此类生效。类似unittest的cls装饰器

  3.函数级:只对函数生效,类下面的函数不生效。

  4.方法级:定义在类里面,每个用例都执行一次

def setup_module():
    print('\n整个模块 前 只运行一次')
 
def teardown_module():
    print('\n整个模块 后 只运行一次')
 
def setup_function():
    print('\n不在类中的函数,每个用例 前 只运行一次')
 
def teardown_function():
    print('\n不在类中的函数,每个用例 后 只运行一次')
 
def test_ab():
    b = 2
    assert b < 3
 
def test_aba():
    b = 2
    assert b < 3
 
 
class Test_api():
 
    def setup_class(self):
        print('\n此类用例 前 只执行一次')
    def teardown_class(self):
        print('\n此类用例 后 只执行一次')
 
    def setup_method(self):
        print('\n此类每个用例 前 只执行一次')
 
    def teardown_method(self):
        print('\n此类每个用例 后 执行一次')
 
    def test_aa(self):
        a = 1
        print('\n我是用例:a')       # pytest -s 显示打印内容
        assert a > 0
 
    def test_b(self):
        b = 2
        assert b < 3

运行结果:

 pytest自动化测试框架:3天学会Pytest自动化测试框架,哭着都要给我看完_哔哩哔哩_bilibiliicon-default.png?t=N4N7https://www.bilibili.com/video/BV1oX4y1Z7yw/?spm_id_from=333.999.0.0

                

 

2、这是原始用法,下面看使用Fixture,Fixture 其实就是自定义 pytest 执行用例前置和后置操作,首先创建 conftest.py 文件 (规定此命名),导入 pytest 模块,运用 pytest.fixture 装饰器,默认级别为,函数级:

                 

 

其它用例文件调用即可,如下定义一个函数,继承 conftest.py 文件里的 login 函数即可调用:

# conftest.py配置需要注意以下点:
# conftest.py配置脚本名称是固定的,不能改名称
# conftest.py与运行的用例要在同一个pakage下,并且有__init__.py文件
# 不需要import导入 conftest.py,pytest用例会自动查找
 
import pytest
 
def test_one(login):
    print("登陆后,操作111")
 
# def test_two():
#   print("操作222")
#
# def test_three(login):
#   print("登陆后,操作333")

运行结果:

 

3、扩展用法,多个自定义函数和全局级别展示:(全局的比如用于登录获取到token其他用例模块就不需要再登录了)

import pytest
 
def test_one(login):
    print("登陆后,操作111")
 
def test_two(login,open_page):
    print("测试用例2")
 
def test_three(open_page):
    print("测试用例3")

 

运行结果:

细心的人应该可以知道,测试用例2并没有调用login函数,因为前置设置的是共享模式,类似全局函数。

参数化区别

参数化应用场景,一个场景的用例会用到多条数据来进行验证,比如登录功能会用到正确的用户名、密码登录,错误的用户名、正确的密码,正确的用户名、错误的密码等等来进行测试,这时就可以用到框架中的参数化,来便捷的完成测试。

参数化 就是数据驱动思想,即可以在一个测试用例中进行多组的数据测试,而且每一组数据都是分开的、独立的。

unittest参数化其实是:ddt,叫数据驱动。

pytest数据驱动,就是参数化,使用@pytest.mark.parametrize

1.先看unittest如何进行参数化:

test_data = [1,2,3]
 
@ddt.ddt
class Testddt(unittest.TestCase):
    @ddt.data(*test_data)
    def test_001(self,get_data):
        print(get_data)
if __name__ == '__main__':
    unittest.main()

运行结果:

2.pytest中参数化的用法

在测试用例的前面加上:
@pytest.mark.parametrize("参数名",列表数据)
参数名:用来接收每一项数据,并作为测试用例的参数。
列表数据:一组测试数据。

@pytest.mark.parametrize("参数1,参数2",[(数据1,数据2),(数据1,数据2)])
示例:
@pytest.mark.parametrize("a,b,c",[(1,3,4),(10,35,45),(22.22,22.22,44.44)])
def test_add(a,b,c):
res = a + b
assert res == c

实例:

@pytest.mark.parametrize('data',[1,2,3])
class Testddt(object):
 
    def test_001(self,data):
        print(data)
if __name__ == '__main__':
    pytest.main(['-sv'])

 

运行结果:

总结

以上就是unittest与pytest测试框架的区别,七大主要区别,这里已讲了两个区别的实例,其他五个有时间再补充。

pytest自动化测试框架:3天学会Pytest自动化测试框架,哭着都要给我看完_哔哩哔哩_bilibiliicon-default.png?t=N4N7https://www.bilibili.com/video/BV1oX4y1Z7yw/?spm_id_from=333.999.0.0

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/563760.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式事务的21种武器 - 3

在分布式系统中&#xff0c;事务的处理分布在不同组件、服务中&#xff0c;因此分布式事务的ACID保障面临着一些特殊难点。本系列文章介绍了21种分布式事务设计模式&#xff0c;并分析其实现原理和优缺点&#xff0c;在面对具体分布式事务问题时&#xff0c;可以选择合适的模式…

时间序列预测 | Matlab基于最小二乘支持向量机LSSVM时间序列预测,LSSVM时间序列预测

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 基于最小二乘支持向量机LSSVM多维时间序列预测LSSVM多变量时间序列预测,matlab代码 评价指标包括:MAPE、MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %----------------…

如何落地中台架构

大家好&#xff0c;我是易安&#xff01;今天我分享下如何落地中台架构。 前台和后台 讲中台之前&#xff0c;我们先来理解下前台和后台&#xff0c;这样&#xff0c;你才能更清楚中台的定位。 前台 比较好理解&#xff0c;指的是 面向C端的应用&#xff0c;比如像微信、淘宝这…

数字音频接口I2S-PDM-TDM-PCM

主要分类&#xff1a;模拟、数字&#xff08;I2S、PCM、PDM、TDM&#xff09; 模拟音频&#xff0c;就是功放输出的&#xff0c;驱动音箱和喇叭的音频。模拟麦克风采样回来的数据也是模拟音频。通常会有单端或差分两种信号。 数字音频&#xff0c;不能直接驱动喇叭&#xff0…

混剪功能开发——抖音账号矩阵系统源码解析

抖音是目前国内非常流行的短视频平台之一&#xff0c;用户数量庞大&#xff0c;更是吸引了许多企业和个人在上面开设账号&#xff0c;通过发布内容来进行流量变现。但是&#xff0c;在一个账号发布内容的同时&#xff0c;管理员又需要同时关注多个账号&#xff0c;对账号的管理…

vs code 配置net 开发环境.并搭配vs相似的解决方案面板

由于在本人在Linux22.04下安装Rider 一直处于卡死系统状态.不得不使用该方式 以下为安装步骤 安装 VS code https://code.visualstudio.com/Download 安装 mono https://www.mono-project.com/download/stable/#download-lin 安装 NET SDK https://learn.microsoft.com/zh…

目录层次结构中区分不同功能的RPM包,同时只有一份共享的repodata

使用本地的yum源有几个潜在的好处&#xff1a; 更快的下载速度&#xff1a; 本地yum源通常位于本地网络上&#xff0c;因此可以通过局域网快速获取软件包&#xff0c;而不需要依赖互联网连接。这样可以提供更快的下载速度&#xff0c;节省时间和带宽消耗。 离线访问&#xff1…

实验12 卷积神经网络

1. 实验目的 ①掌握深度学习的基本原理&#xff1b; ②能够使用TensorFlow实现卷积神经网络&#xff0c;完成图像识别任务。 2. 实验内容 ①设计卷积神经网络模型&#xff0c;实现对Mnist手写数字数据集的识别&#xff0c;并以可视化的形式输出模型训练的过程和结果&#xf…

Qt--事件过滤器

写在前面 Qt中的事件过滤器(Event Filter)是一种机制&#xff0c;用于拦截并处理特定类型的事件。但和Qt–事件分发器一文中提到的事件分发器有些区别。 事件过滤器的工作原理 这里同样使用一个简单的示例图帮助理解&#xff1a; 这里假设有一个Widget父窗口&#xff0c;该…

服务间的通信(RestTemplate +Ribbon+Feign):

服务之间的依赖&#xff1a; 其实根据上图我们发现会员管理服务其实是依赖于我们图书的这个服务的&#xff0c;那么为什么要依赖于图书这个服务呢&#xff0c;因为会员服务想要进行借阅图书的时候&#xff0c;必须要对图书模块的图书的库存等做校验才可以&#xff0c;所以membe…

在 Kubernetes 上实现高速应用交付

原文作者&#xff1a;NGINX 原文链接&#xff1a;在 Kubernetes 上实现高速应用交付 转载来源&#xff1a;NGINX 官方网站 NGINX 唯一中文官方社区 &#xff0c;尽在 nginx.org.cn 运行于 Kubernetes 之上的应用需要一个经过验证的生产级应用交付解决方案。NGINX Ingress Cont…

边缘计算AI硬件智能分析网关V1版的接入流程与使用步骤

我们的AI边缘计算网关硬件——智能分析网关目前有两个版本&#xff1a;V1版与V2版&#xff0c;两个版本都能实现对监控视频的智能识别和分析&#xff0c;支持抓拍、记录、告警等&#xff0c;在AI算法的种类上和视频接入上&#xff0c;两个版本存在些许的区别。V1的基础算法有人…

【ChatGPT】《吴恩达 x OpenAI Prompt Engineering教程中文笔记》- 知识点目录

《吴恩达 x OpenAI Prompt Engineering教程中文笔记》 &#x1f433; 在开始编写提示词之前的一些设置 不同的temperature会影响模型的理性和想象力&#xff0c;这里告诉我们&#xff1a; Low&#xff1a;例如GPT4&#xff0c;更加适合确定性的问答任务Hight&#xff1a;例如…

non-protected broadcast场景分析及解决

non-protected broadcast场景分析及解决 在两个app之间互相送消息使用BroadcastReceiver&#xff0c;有时在运行过程中在logcat工具中会发现大片的飘红消息。 要消除这些错误信息&#xff0c;需要在广播的 Sender 和 Receiver 做部分的修改。 错误信息分析 由于 发送端 的 M…

忆享聚焦|ChatGPT、AI、网络数字、游戏……近期热点资讯一览

“忆享聚焦”栏目第十四期来啦&#xff01;本栏目汇集近期互联网最新资讯&#xff0c;聚焦前沿科技&#xff0c;关注行业发展动态&#xff0c;筛选高质量讯息&#xff0c;拓宽用户视野&#xff0c;让您以最低的时间成本获取最有价值的行业资讯。 目录 行业资讯 1.科技部部长王志…

上海亚商投顾:沪指跌1.28%失守年线 大金融板块集体走弱

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 三大指数今日继续调整&#xff0c;沪指超1%逼近3200点&#xff0c;尾盘失守年线&#xff0c;创业板指较为抗跌。大…

你收藏了那些实用工具类网站?

今天来给大家分享几个众多网友们推荐的&#xff0c;宝藏工具类网站 uIGradients https://uigradients.com/#Flickr 专业的渐变色配色工具网站&#xff0c;配色什么的非常全&#xff0c;也可以按照自己的想法来选择搭配&#xff0c;还能直接获得对应渐变配色的CSS代码&#xff…

水表自动抄表系统有什么功能

水表自动抄表系统是一种新型的智能化管理系统&#xff0c;它可以自动采集水表的数据&#xff0c;并且实时上传到管理平台&#xff0c;实现了水表的实时监测和管理。该系统具有以下几个主要功能&#xff1a; 1.自动抄表功能 水表自动抄表系统可以实现自动采集水表的数据&#x…

【学习笔记】Windows 下线程同步之互斥锁

目录 前言环境简介相关函数CreateMutex Wait 函数ReleaseMutexCloseHandle 其他互斥锁的名字未命名互斥锁的同步互斥锁的意外终止临界区对象 参考 前言 本文所涉及的同步主要描述在 Windows 环境下的机制&#xff0c;和 Linux 中的同步机制有一定的联系&#xff0c;但注意并不…

小猫踩球-第14届蓝桥杯省赛Scratch中级组真题第2题

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第137讲。 小猫踩球&#xff0c;本题是2023年5月7日举行的第14届蓝桥杯省赛Scratch图形化编程中级组真题第2题&#xf…