从小白到测试专家:掌握Pytest的实用技巧和优秀实践

news2024/11/23 4:02:33

  pytest是一个功能丰富且易于使用的Python测试框架,它建立在Python标准库的unittest模块之上,提供了更简洁、灵活和可读性强的测试代码编写方式。下面,我将按照步骤引导您学习pytest。

  步骤1:安装pytest

  首先,您需要安装pytest。您可以使用pip包管理器来安装它。打开终端(或命令提示符)并执行以下命令:

  pip install pytest

  步骤2:编写测试函数

  在学习如何编写测试之前,让我们先了解一下pytest测试的基本结构。

  在pytest中,测试函数以test_开头,例如test_addition()。这些函数是用来测试代码的不同部分,每个测试函数应该只关注一个特定的功能或行为。

  让我们创建一个简单的示例来说明。在您的项目目录下,创建一个名为test_calculator.py的文件,并在其中编写以下代码:

  def add(a, b):

      return a + b

  def test_addition():

      result = add(3, 5)

      assert result == 8

  在上面的示例中,我们定义了一个add()函数来执行加法运算,并编写了一个test_addition()函数来测试这个加法函数。在测试函数中,我们调用add(3, 5)并使用assert语句来验证结果是否等于8。

  步骤3:运行测试

  现在,我们已经编写了一个简单的测试函数,让我们运行它并查看结果。在终端中,导航到项目目录,并执行以下命令:

  pytest

  pytest将会自动查找项目中以test_开头的测试函数,并执行它们。您应该会看到一个类似于以下内容的输出:

  ============================= test session starts ==============================

  platform linux -- Python 3.x.y, pytest-x.y.z, py-x.y.z, pluggy-x.y.z

  rootdir: /path/to/your/project

  collected 1 item                                                               

  test_calculator.py .                                                      [100%]

  ============================== 1 passed in 0.01s ===============================

  从上面的输出中,我们可以看到测试会话开始并显示了平台信息,然后显示了一个进度条,最后显示了测试结果。在这种情况下,一个测试通过,没有任何错误或失败。

  步骤4:使用更多的断言

  在步骤2中的示例中,我们只使用了一个简单的assert语句来断言测试结果。然而,pytest提供了许多其他有用的断言函数,让我们可以编写更复杂的断言逻辑。

  例如,我们可以使用assert语句来检查值是否相等、不相等、大于、小于等等。此外,pytest还提供了许多其他的断言函数,如assert_raises()用于检查异常,assert_in()用于检查元素是否在集合中等等。

  以下是一些常用的断言函数示例:

  def test_assertions():

      assert 5 == 5  # 检查相等

      assert 10 != 5  # 检查不相等

      assert 3 < 10  # 检查小于

      assert 20 > 10  # 检查大于

      assert 5 <= 5  # 检查小于等于

      assert 10 >= 5  # 检查大于等于

      assert_raises(ValueError, int, 'string')  # 检查是否引发特定异常

      assert 'hello' in 'hello world'  # 检查子字符串是否在字符串中

      assert_in(3, [1, 2, 3, 4, 5])  # 检查元素是否在列表中

  步骤5:测试夹具(Fixtures)

  测试夹具是pytest中非常强大且常用的概念。它们提供了一种方便的方式来准备测试环境、共享测试数据和执行重复的操作。

  在pytest中,使用@pytest.fixture装饰器来定义测试夹具。然后,在测试函数中通过参数来使用这些夹具。

  以下是一个简单的夹具示例:

  import pytest

  @pytest.fixture

  def setup():

      # 在测试之前的准备工作

      data = [1, 2, 3, 4, 5]

      return data

  def test_fixture_example(setup):

      # 使用setup夹具

      assert len(setup) == 5

      assert 3 in setup

  在上面的示例中,我们定义了一个名为setup的夹具。该夹具返回一个包含5个元素的列表。然后,我们在test_fixture_example()测试函数中使用了这个夹具,并编写了一些断言来验证夹具的功能。

  步骤6:使用参数化测试

  参数化测试是pytest的另一个强大功能。它允许您以一种简洁的方式运行多个测试用例,只需在测试函数上应用一个装饰器。

  使用@pytest.mark.parametrize装饰器,您可以为测试函数提供一个或多个参数组合,并定义每个参数的值。

  以下是一个参数化测试的示例:

  import pytest

  def add(a, b):

      return a + b

  @pytest.mark.parametrize('a, b, expected', [

      (2, 3, 5),

      (4, 5, 9),

      (-1, 1, 0),

  ])

  def test_addition(a, b, expected):

      result = add(a, b)

      assert result == expected

  在上面的示例中,我们使用@pytest.mark.parametrize装饰器为test_addition()测试函数提供了三个参数组合。每个参数组合都包含两个输入参数a和b,以及预期结果expected。pytest将自动为每个参数组合运行测试,并使用断言验证结果。

  步骤7:其他pytest功能

  除了上述步骤中提到的功能外,pytest还提供了许多其他强大的功能和插件,以帮助您更好地编写和组织测试代码。

  ·标记(Markers):您可以使用标记来选择性地运行测试集合,例如只运行特定的标记测试。

  · 测试跳过和跳过失败:您可以使用@pytest.mark.skip装饰器来跳过某些测试,以及使用@pytest.mark.xfail装饰器来标记预期失败的测试。

  · 测试覆盖率:pytest可以与覆盖率工具集成,以帮助您评估代码的测试覆盖率。

  · 测试重试:有时测试可能会因为外部因素而失败,例如网络故障。pytest可以通过使用@pytest.mark.flaky装饰器来自动重试测试,以提高稳定性。

这只是pytest的一小部分功能,它还有许多其他功能可以探索和学习。通过阅读pytest的官方文档和参考资料,您可以进一步了解这些功能并在实际项目中应用它们。

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

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

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

相关文章

python3.8及以上版本绑定gdal库的一个注意事项

作者&#xff1a;朱金灿 来源&#xff1a;clever101的专栏 为什么大多数人学不会人工智能编程&#xff1f;>>> gdal和python绑定参考文章&#xff1a;windows环境下python和gdal绑定方法   值得注意的是绑定python3.8及以上版本后在python程序中初始化gdal库时会出…

自媒体项目详述

总体框架 本项目主要着手于获取最新最热新闻资讯&#xff0c;以微服务构架为技术基础搭建校内仅供学生教师使用的校园新媒体app。以文章为主线的核心业务主要分为如下子模块。自媒体模块实现用户创建功能、文章发布功能、素材管理功能。app端用户模块实现文章搜索、文章点赞、…

Qt QTableWidget表格的宽度

默认值 QTableWIdget的表格宽度默认是一个给定值&#xff0c;可以手动调整每列的宽度&#xff0c;也不填满父窗口 MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) {this->resize(800,600);QStringList contents{"11","111111111111",&…

ios 对话框 弹框,输入对话框 普通对话框

1 普通对话框 UIAlertController* alert [UIAlertController alertControllerWithTitle:"a" message:"alert12222fdsfs" pr…

Springboot自动装配(SPI技术、@Import动态加载配置类)

SpringBoot原理 起步依赖 依赖传递&#xff0c;a依赖b&#xff0c;b依赖c 自动配置 Springboot的自动配置就是当Spring容器启动后&#xff0c;一些配置类、bean对象就自动存入到了IOC容器中&#xff0c;不用手动配置了 Springboot采用的是EnableXXXX注解&#xff0c;分装…

带你一分钟看懂 “Docker”

2010年&#xff0c;几个搞IT的年轻人&#xff0c;在美国旧金山成立了一家名叫“dotCloud”的公司。 这家公司主要提供基于PaaS的云计算技术服务。具体来说&#xff0c;是和LXC有关的容器技术。 后来&#xff0c;dotCloud公司将自己的容器技术进行了简化和标准化&#xff0c;并…

腾讯云优惠券是什么?详细介绍及领取攻略来了!

1、腾讯云优惠券介绍 腾讯云优惠券是腾讯云推出的一种优惠活动&#xff0c;包括代金券和折扣券。代金券是可抵扣费用的优惠券&#xff0c;可以在结算时使用代金券抵扣订单金额。折扣券可以在结算时使用享受一定的折扣优惠。 2、腾讯云优惠券领取 领取入口&#xff1a;txy.in…

Bond配置文件配置

1、选择2个自己需要的网口&#xff0c;查看有哪些网口 [roothostname ~]# ifconfig -a [roothostname ~]#systemctl disable NetworkManager 开机不启动图形化网络服务 2、编辑网口的配置文件 [roothostname ~]# cd /etc/sysconfig/network-scripts [roothostname n…

GPT最佳实践:五分钟打造你自己的GPT

前几天OpenAI的My GPTs栏目还是灰色的&#xff0c;就在今天已经开放使用了。有幸第一时间体验了一把生成自己的GPT&#xff0c;效果着实惊艳&#xff01;&#xff01;&#xff01;我打造的GPT模型我会放到文章末尾&#xff0c;大家感兴趣也可以自己体验一下。 打造自己的GPT模型…

竞赛选题 深度学习疲劳检测 驾驶行为检测 - python opencv cnn

文章目录 0 前言1 课题背景2 相关技术2.1 Dlib人脸识别库2.2 疲劳检测算法2.3 YOLOV5算法 3 效果展示3.1 眨眼3.2 打哈欠3.3 使用手机检测3.4 抽烟检测3.5 喝水检测 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习加…

RedisDesktopManager连接不上redis的解决方法

RedisDesktopManager连接不上redis的解决方法 RedisDesktopManager是一款连接redis数据库的客户端。 当连接不上redis的时候&#xff0c;解决方案&#xff1a; 第一步&#xff1a;在自己的本机外面试下&#xff0c;能不能连接上虚拟机 打开cmd,使用ping 虚拟机ip地址。如果…

[PyTorch][chapter 61][强化学习-免模型学习 off-policy]

前言&#xff1a; 蒙特卡罗的学习基本流程&#xff1a; Policy Evaluation : 生成动作-状态轨迹,完成价值函数的估计。 Policy Improvement: 通过价值函数估计来优化policy。 同策略&#xff08;one-policy&#xff09;&#xff1a;产生 采样轨迹的策略 和要改…

ros1 基础学习10 -全局字典参数的定义,获取,改值

全局字典参数的定义&#xff0c;获取&#xff0c;改值 一、参数模型二、 创建功能包三、参数命令行的使用(rosparam)四、使用程序来使用参数&#xff08;C&#xff09;4.1创建代码4.2编译4.3 编译文件 测试 在ROS Master中&#xff0c;存在一个参数服务器&#xff08;Parameter…

MPSO-WPA

MPSO-WPA算法 DCAP means ’ discretized Cauchy’s argument principle’ 辅助信息 作者未提供代码

使用github copilot

现在的大模型的应用太广了&#xff0c;作为程序员我们当然野可以借助大模型来帮我们敲代码。 下面是自己注册使用github copilot的过程。 一、注册github copilot 1. 需要拥有github账号 &#xff0c;登录github之后&#xff0c;点右侧自己的头像位置&#xff0c;下面会出现…

【Linux网络】手把手实操Linux系统网络服务DHCP

目录 一、什么是dhcp 二、详解dhcp的工作原理 三、dhcp的实操 第一步&#xff1a;3台机器的防火墙和安全机制都需要关闭&#xff01;&#xff01;&#xff01; 第二步&#xff1a;Linux下载dhcp软件&#xff0c;并查看配置文件位置 第三步&#xff1a;读配置文件&#xf…

(二十七)ATP应用测试平台——基于mybatisplus和aop切面实现数据权限隔离的案例实战

前言 在实际项目开发中&#xff0c;我们经常会用到俩种权限&#xff0c;一种是功能权限&#xff0c;一种是数据权限。功能权限主要是用来限制用户的操作&#xff0c;而数据权限是限制用户能查看到哪些数据。功能权限我们可以使用流行的框架shiro或者spring-security实现&#…

智慧在线拜佛上供品花供果祈福求愿公众号开发

智慧在线拜佛上供品花供果祈福求愿公众号开发 在线点灯祈福&#xff1a;用户可以在线选择点灯祈福的数量和供养的香灯类型&#xff0c;进行祈福祈愿。 上供品花&#xff1a;用户可以选择不同的鲜花供养&#xff0c;包括鲜花种类、数量和价值&#xff0c;以及写上心愿祝福语。 …

VEX —— Intrinsic attribute

目录 查看 使用 PackedGeometry Intrinsic attribute 内在属性是已经被计算的值&#xff08;从几何体派生出来的&#xff09;&#xff0c;可像属性一样访问&#xff1b; 查看 ginfo -I&#xff0c;打印所有内在属性&#xff1b;geometry spreadsheet&#xff0c;查看内在属性…

Windows 10 下使用Visual Studio 2017 编译CEF SDK

1.下载CEF SDK 由于需要跑在32位的机器&#xff0c;所以选择下载32位的SDKCEF Automated Builds 选择 Current Stable Build (Preferred) &#xff0c;这是当前稳定版本&#xff0c;CEF版本118 下载成功解压 2.下载编译工具 CMake 下载地址&#xff1a;CMake 配置CMake指向…