硅谷最爱的测试框架:详解PyTest

news2025/1/15 8:07:55

Python中有许多测试框架,但其中最受欢迎的就是PyTest。PyTest是一个强大而灵活的测试框架,它提供了许多先进的功能,可以让你的测试更加简洁、易读。

一、PyTest 简介

PyTest是一个开源的Python测试框架,用于编写简单而丰富的测试套件。它的功能特性包括:参数化、设置/拆解函数、假对象和钩子函数等。PyTest也被设计用来支持大型的测试集合,特别是适合进行回归测试。

二、PyTest 示例

接下来,我将通过以下10个示例,详细介绍如何使用PyTest。

1. 基础测试

PyTest的测试是通过编写函数并使用assert关键字进行断言的。以下是一个简单的测试示例

def test_addition():    assert 1 + 1 == 2

2. 测试异常

如果你希望一个特定的异常被抛出,可以使用pytest.raises上下文管理器:

import pytest
def test_zero_division():    with pytest.raises(ZeroDivisionError):        1 / 0

3. 参数化测试

如果你有多组输入和期望的输出,可以使用pytest.mark.parametrize装饰器:​​​​​​​

import pytest
@pytest.mark.parametrize("a,b,expected", [(1, 2, 3), (4, 5, 9), (7, 8, 15)])def test_addition(a, b, expected):    assert a + b == expected

4. 使用setup和teardown

对于需要前置和后置操作的测试,你可以使用setup和teardown函数:​​​​​​​

def setup_function(function):    if function == test_needs_resource_a:        setup_resource_a()
def teardown_function(function):    if function == test_needs_resource_a:        teardown_resource_a()
def test_needs_resource_a():    assert use_resource_a()

5. 使用fixtures

PyTest的fixtures功能允许你定义一些设置代码,这些代码可以被多个测试函数重用:​​​​​​​

import pytest
@pytest.fixturedef resource_a():    setup_resource_a()    yield use_resource_a()    teardown_resource_a()
def test_needs_resource_a(resource_a):    assert resource_a

6. 使用mocks

你可以使用PyTest的unittest.mock模块创建假的对象,模拟函数或对象的行为:​​​​​​​

from unittest.mock import MagicMock
def test_with_mock():    my_mock = MagicMock(return_value=3)    assert my_mock(1, 2, 3) == 3    my_mock.assert_called_once_with(1, 2, 3)

7. 测试私有函数

虽然一般来说我们应该避免测试私有函数,但有时这也是有用的:​​​​​​​

def test__private_function():    from my_module import _private_function    assert _private_function(1, 2) == 3

在这个示例中,我们测试了一个名为_private_function的私有函数。这个函数接受两个参数并返回它们的和。我们使用了assert语句来确认返回的结果是否与预期的结果相符。注意,这个例子仅作为示例,实际上我们应尽量避免对私有函数进行单独测试,因为它们的实现可能会随着时间而改变。在大多数情况下,我们应该专注于测试公共接口,这样可以保证即使实现细节发生改变,测试仍然有效。

8. 跳过某些测试

如果有些测试你不希望执行,你可以使用pytest.mark.skippytest.mark.skipif来跳过这些测试:​​​​​​​

import pytest
@pytest.mark.skip(reason="This test is currently being debugged.")def test_in_debugging():    assert 1 + 1 == 2

9. 使用pytest的命令行参数

PyTest提供了许多命令行参数,可以帮助你更有效地运行测试。例如,你可以使用-k参数来运行名称匹配某个模式的测试:​​​​​​​

pytest -k "addition"

10. 分组测试

你可以使用pytest.mark来给你的测试分组:​​​​​​​

import pytest
@pytest.mark.slowdef test_slow_function():    # This is a slow test...    pass
@pytest.mark.fastdef test_fast_function():    # This is a fast test...    pass

然后你可以只运行某个分组的测试:

pytest -m slow

11. 使用assert进行多种条件检查

PyTest的assert可以被用来进行多种条件检查。例如,我们可以使用assert来检查是否一个值在一个列表中:​​​​​​​

def test_in_list():    assert 1 in [1, 2, 3]

12. 使用xfail标记预期失败的测试

如果你知道某个测试目前不能通过,但你仍然希望执行它并记录结果,可以使用pytest.mark.xfail:​​​​​​​

import pytest
@pytest.mark.xfail(reason="This test is expected to fail.")def test_failing():    assert 1 == 2

13. 使用capsysfixture捕获标准输出

如果你的函数会打印到标准输出,你可以使用capsysfixture来捕获这些输出,然后在你的测试中进行检查:​​​​​​​

def test_print_output(capsys):    print("Hello")    captured = capsys.readouterr()    assert captured.out == "Hello\n"

14. 使用tmp_pathfixture创建临时文件

如果你的测试需要创建临时文件,你可以使用tmp_pathfixture:​​​​​​​

def test_create_file(tmp_path):    d = tmp_path / "sub"    d.mkdir()    p = d / "hello.txt"    p.write_text("Hello, World!")    assert p.read_text() == "Hello, World!"

15. 与doctest结合

如果你的函数或者模块包含doctest,PyTest可以直接运行这些doctest:​​​​​​​

def add(a, b):    """    This function adds two numbers.
    >>> add(1, 2)    3    """    return a + b

然后你可以使用pytest --doctest-modules命令来运行这些doctest。

三、结论

以上就是PyTest的一些基本功能和示例。总的来说,PyTest是一个非常强大的测试框架,无论你是在编写简单的单元测试,还是复杂的集成测试,都可以使用PyTest来简化你的工作。通过学习和掌握PyTest,你将能够更有效地编写和维护你的测试代码。

 END配套学习资源分享

最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

加入我的软件测试交流群:110685036免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

全套资料获取方式:

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

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

相关文章

FreeRTOS_任务基础知识

目录 1. 什么是多任务系统? 2. FreeRTOS 任务与协程 2.1 任务 (Task) 的特性 2.2 协程(Co - routine)的特性 3. 任务状态 4. 任务优先级 5. 任务实现 6. 任务控制块 7. 任务堆栈 RTOS 系统的核心就是任务管理,FreeRTOS 也…

软件测试想要高薪资,不仅要卷还要学会跳槽

都说00后躺平了,但是有一说一,该卷的还是卷。 这不,前段时间我们公司来了个00后,工作都没两年,跳槽到我们公司起薪20K,都快接近我了。后来才知道人家是个卷王,从早干到晚就差搬张床到工位睡觉了…

C++ new和delete的使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、new和delete介绍二、简单使用1.new和delete2.自定义对象3.new[]和delete[]4.主存耗尽5.try&catch6.nothrow7.看下源代码 前言 new和delete是C里非常重…

【运维】服务器系统安装

目录 一、环境 二、ubuntu 三、启动u盘制作 Stage 1:下载balena,制作U盘启动工具 Stage 2:下载Ubuntu 系统镜像(参考上一节:Ubuntu 22.04.2 LTS ) Stage 3:将镜像写入到U盘 四、设置开启…

6 面阿里、5 面字节、4 面腾讯,可算是入坑了····

8 年前,BAT 冲到了风口浪尖,美国上市的阿里成为中国体量最大的互联网公司,腾讯借助微信成为移动互联网的霸主,外企开始撤离中国,国企的光环也慢慢褪去。 到了近年,应届毕业生心中最炙手可热的公司换成了 T…

共话出海、布局全球,融云WICC2023 · 泛娱乐出海嘉年华广州收官!

(移步公众号点击图片三折购买《社交泛娱乐出海作战地图》) 6 月 2 日,“WICC 泛娱乐出海嘉年华”在广州成功举办,圆满收官。关注【融云全球互联网通信云】了解更多 本届嘉年华由高端峰会、圆桌会议、露营派对三部分组成&#xf…

资深8年测试,全链路压测与性能的优化详解,一文通透...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 什么是全链路压测…

了解CPU瓶颈原因,掌握代码优化、TOP命令及缓存技术,让服务器不再为性能瓶颈所困扰。

目录 前言: 一、CPU瓶颈原因分析 1. CPU使用率过高 2. 进程使用CPU过多 3. 磁盘I/O读写速度过慢 二、CPU瓶颈调优方案 1. 使用top命令查看CPU使用率 2. 优化程序设计 3. 使用缓存技术 总结: 前言: 在服务器运行过程中,…

干货 | 实战演练基于加密接口测试测试用例设计

如果接口测试仅仅只是掌握一些requests或者其他一些功能强大的库的用法,是远远不够的,还需要具有根据公司的业务以及需求去定制化一个接口自动化测试框架能力。所以在这个部分,会主要介绍接口测试用例分析以及通用的流程封装是如何完成的。 首…

GitHub 竟然有这些骚操作,真是涨姿势

GitHub 竟然有这些骚操作,真是涨姿势 GitHub,不用过多介绍。一个面向开源及私有软件项目的托管平台,因为只支持 git 作为唯一的版本库格式进行托管,故名 GitHub。 作为「全球最大的程序员“交友”社区」,程序员的你&am…

入门AI从谷歌这10门独立课程开始

​ 谷歌最近发布了一个名为"Generative AI learning path"的学习路径,该路径专为初学者设计,共包含10门独立课程。通过这个学习路径,初学者可以从基础概念开始学习,并逐步深入到更复杂的主题,帮助他们了解生…

NLP实战:调用Gensim库训练Word2Vec模型

目录 一、准备工作 1. 安装Gensim库 2. 对原始语料分词 二、训练Word2Vec模型 三、模型应用 1.计算词汇相似度 ​编辑 2. 找出不匹配的词汇 3. 计算词汇的词频 四、总结 🍨 本文为[🔗365天深度学习训练营]内部限免文章(版权归 *K同学…

第7章:SpringMVC的HttpMessageConverter

1. HttpMessageConverter简介 ①HttpMessageConverter,报文信息转换器,将请求报文转换为java对象,或将java对象转换为响应报文 ②HttpMessageConverter提供了两个注解和两个类型 RequestBody,ResponseBody,RequestEntity,ResponseEntity …

深入详解CFS任务放置代码

一、前言 本文出现的内核代码来自Linux5.10.61,为了减少篇幅,我们对引用的代码进行了删减(例如去掉了NUMA的代码,毕竟手机平台上我们暂时不关注这个特性),如果有兴趣,读者可以配合完整的源代码…

Spring Boot JAVA 统一返回的信息

现在的项目是前后端开发的居多,那么,后端的开发只需要返回相关的接口就行了。那么,我们怎么定义接口返回的数据,怎么使用 Spring Boot 来统一处理返回的信息呢? 开发环境如下: IntelliJ IDEA 2021.2.2 (U…

linuxOPS基础_linux权限管理

权限概述 什么是权限 ​ 在多用户计算机系统的管理中,权限是指某个特定的用户具有特定的系统资源使用权利。 在Linux 中分别有读、写、执行权限 \权限针对文件权限针对目录读r(read)表示可以查看文件内容;cat、less…表示可以(ls)查看目录中存在的文…

无人机+ AI 图像分析:里斯本大学高效检测林业害虫

内容一览:早期发现虫害对于因地制宜采取防控措施至关重要。尽管遥感技术可用于快速扫描大面积区域,但面对低强度信号或难以检测的物体,其效果并不尽如人意。因此,里斯本大学研究人员将无人机与 AI 图像分析相结合,在此…

如何对自动化测试工具选型?这4个因素必须要拿捏好

测试开发工程师再做自动化时避免不了针对每个工具进行选型。今天就来看下工具选型的方法。 一:工具选型方法 在作为一名自动化测试开发工程师时,选择合适的 Web 自动化工具非常关键。以下是一些评估和选择工具的依据和方法: 1.支持的语言和…

接口测试介绍以及用例编写

6.1 接口 6.1.1 接口概述 定义: 接口就是API(Application Programming Interface,应用程序接口),是一个软件或服务对外提供的接口,别人只要调用这接口,而内部如何实现,不需要关心。…

608教室使用方法

一、教室平面图 608教室的布局如下,重要的设备已经在图中标出。总开关、一体机和机柜。   二、使用方法 2.1 房间机器上电 进门后首先走到“总开关位置”,将电匝闭合。 原来的开关如图所示,有3组开关,1号组开关用于控制插座、…