Pytest框架中的测试用例执行方式!

前言

    本文将针对pytest的核心特性之一——测试用例的执行方式展开深入探讨,并通过详尽的实战示例展示如何在不同环境下灵活操控测试运行,同时全面解析pytest中常见的且极具实用价值的命令行选项。

一、从基础到进阶:pytest在命令行下的测试用例执行控制

1. 自动化测试发现与默认执行策略

    pytest采用智能的基于目录结构的测试发现机制,自动识别并执行以下类型的测试单元:

  • 文件名以test_开头或包含__test__.py结尾的模块。

  • 类名以Test开头的类(遵循unittest.TestCase风格或pytest自己的类装饰器定义)。

  • 函数名以test_开头的方法。

只需简单地在命令行下输入pytest命令,pytest即会递归查找当前工作目录及其子目录下的所有符合上述命名规则的测试文件并执行其中的测试用例。

pytest  # 默认搜索并执行所有找到的测试用例

2. 精准定位并执行特定测试组件
  • 指定特定测试模块执行:

pytest path/to/module.py  # 执行指定模块内的所有测试用例

  • 直接运行某个测试类及其中的所有方法:

pytest path/to/test_class.py::TestClass  # 执行指定测试类内全部测试方法

  • 单独执行一个测试方法:

pytest path/to/test_class.py::TestClass::test_functionality  # 运行单个测试方法

3. 利用标记(Markers)进行精细化分类与筛选

    pytest支持自定义标记功能,帮助开发者轻松管理、分组和选择性执行测试用例:

  • 添加标记到测试函数:

@pytest.mark.speed('slow')
def test_slow_operation():...

  • 根据标记筛选执行:

pytest -m "speed:slow"  # 只执行标记为'speed:slow'的测试用例
pytest -m "not db_integration"  # 执行排除了'db_integration'标记的所有测试用例

4. 输出控制与调试模式调整

    pytest提供了一系列输出控制选项,以便在不同的开发阶段灵活调整日志级别和信息量:

  • 控制详细度等级:

    • -v:verbose模式,显示每个测试的基本信息,如测试名称和结果。

    • -vv:加倍详细模式,额外展示断言细节和失败消息。

    • -q:quiet模式,仅显示最终的测试汇总信息,隐藏成功案例的输出。

  • 标准输出流处理:

    • -s:禁用标准输出捕获,允许print语句等直接打印到终端。

    • --capture=sys:捕获系统标准输出流而不捕获标准错误流。

  • 错误报告格式增强:

    • -rA:使用详细的报告格式,包括失败原因、堆栈跟踪和潜在未捕获异常的信息。

5. 测试名称匹配与正则表达式筛选

    利用-k参数可以实现强大的正则表达式匹配来挑选需要执行的测试用例:

pytest -k "login or logout functionality"  # 包含关键字的测试用例将会被执行
pytest -k "not slow and not deprecated"  # 排除含有某些关键字的测试用例

6. 并发执行与性能优化

    借助pytest-xdist插件,可以实现跨多进程或多线程并发执行测试,从而显著提升测试效率:

# 使用CPU核心数作为并发任务数量
pytest -n auto  # 自动根据硬件资源分配并发进程数# 按文件分发负载,更适用于I/O密集型测试
pytest -n 8 --dist=loadfile  # 使用8个进程并发执行,并按文件平衡负载# 配合-j选项,还可以控制线程并发执行
pytest -n 4 -j 2  # 使用4个工作进程,每个进程中2个并发线程

7. 覆盖率分析与生成报告

    结合pytest-cov插件,可生成详尽的代码覆盖率报告:

pytest --cov=path/to/project --cov-report html  # 生成HTML格式的覆盖率报告
pytest --cov-config=.coveragerc --cov-fail-under=90  # 设置最低覆盖率要求,并指定配置文件
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:691998057【暗号:csdn999】

二、PyCharm集成开发环境中的pytest整合与操作详解

1. 创建与配置pytest运行配置

  • 在PyCharm顶部菜单栏选择“Run” -> “Edit Configurations…”。

    图片

  • 添加一个新的pytest运行/调试配置,设置主脚本路径(通常无需修改),并在"Additional Arguments"区域添加对应的命令行选项,例如 -s 或 -k 筛选条件,以及任何其他需要传递给pytest的参数。

  • 正确设定"Working directory"属性,确保相对路径引用的测试模块能够正确被解析。

2. 实时执行与调试测试

  • PyCharm中可以直接点击工具栏上的绿色三角形按钮启动预设的pytest配置,执行所有或部分选定的测试用例。

  • 对于单个测试函数或类,可在源码内右键点击,选择"Run 'pytest in '"或"Debug 'pytest in '",精确执行选定的测试单元,并开启实时调试功能。

三、高级应用场景与技巧分享

  • 参数化测试:运用@pytest.mark.parametrize装饰器构建数据驱动测试,为单个测试函数提供多个输入值集,以覆盖多种场景下的行为验证。

@pytest.mark.parametrize("input, expected", [(1, 2), (2, 3), (3, 4)])
def test_add_one(input, expected):assert input + 1 == expected

  • 依赖注入与共享资源管理:通过定义fixtures并在conftest.py文件中注册全局fixture,实现测试间的资源共享和生命周期管理。fixture能确保资源初始化、清理的一致性和高效性。

# conftest.py
import pytest@pytest.fixture
def shared_database_connection():conn = establish_db_connection()yield connconn.close()# test_module.py
def test_something(shared_database_connection):# 使用已建立好的数据库连接执行查询操作...

  • 兼容unittest.TestCase:pytest不仅完美兼容unittest模块中的测试类和方法,还允许在其基础上扩展新的特性,例如混用pytest特有的fixture和unittest.TestCase的setUp/tearDown方法。

  • 生命周期钩子定制:通过编写setup/teardown函数、fixture的setup/teardown方法以及session级的开始和结束钩子,用户可以根据需求在测试前后进行复杂的环境准备、状态恢复以及整体测试流程的前置后置处理。

总结

    深入理解和熟练掌握pytest测试用例的执行策略及命令行选项,是提高测试质量、加速迭代周期、维护项目稳定的关键步骤。

    无论是通过命令行终端高效地批量执行测试,还是在IDE环境中无缝结合代码编辑与调试功能,pytest都能够凭借其强大的灵活性与功能性,满足各种规模项目的多样化测试需求。此外,进一步研究pytest的各种插件与扩展功能,将有助于更好地适应不同项目背景下的具体测试挑战。

下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

最后: 可以在公众号:程序员小濠 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决岗位招聘、绩效管理及员工培训问题,这样做

许多企业在发展过程中,会遇到一系列的管理问题,比如优秀人才匮乏、人才流失严重、人才素质整体水平较低等,这些管理问题严重影响了企业的进一步发展。如何解决这些问题成为企业管理者关注的重点。我们一起来看看华恒智信提供的针对性解决思路…

【力扣精选算法100道】——判定是否互为字符重排(哈希专题)

目录 🚩了解题意 🚩算法原理 第一种:排序 第二种方法:哈希 🚩实现代码 面试题 01.02. 判定是否互为字符重排 - 力扣(LeetCode) 🚩了解题意 我们输入俩个字符串,当俩…

如何在服务器上建立国外私有云存储

随着数字化时代的到来,数据备份和存储成为了我们生活与工作中不可或缺的一部分。私有云存储,以其灵活性、安全性和便捷性,受到了越来越多用户的青睐。特别是对于需要在国外服务器上建立私有云存储的用户来说,这一需求更加迫切。下…

超详细Prometheus入门教程!(内含141页可复制官方文档下载方式)

141页的Prometheus官方中文文档,由于内容过多,在此只以截图展示部分内容,详细完整版的文档请见文末。 这份Prometheus官方中文文档既适合小白入门也适合有一定基础的同学进阶提升。这份文档共分为7大部分,从最基础的Prometheus介绍…

倾斜三维模型OSGB路径漫游——DasViewer

背景 有时候我们需要查看倾斜三维模型效果的效果,虽然也有很多软件可以用,比如CC、超图等等,但是这些软件都比较大,安装也比较麻烦,DasViewer这个软件就比较轻量,安装也简单,功能强大&#xff…

uniapp实现进度条组件

首先&#xff0c;在uniapp项目中创建一个自定义组件&#xff0c;可以命名为Progress.vue。在Progress.vue中&#xff0c;编写如下代码&#xff1a; <template><view class"progress"><view class"progress-bar" :style"{width: progr…

拿到年终奖马上离职,厚道吗?

拿到年终奖马上离职&#xff0c;厚道吗&#xff1f; 大家好&#xff0c;我是銘&#xff0c;全栈开发程序员。 今天在知乎上看到一个问题&#xff1a;拿到年终奖后马上辞职&#xff0c;厚道吗&#xff1f; image-20240229232132786 我的答案是&#xff1a;厚道&#xff0c;非常厚…

7.1.2 Selenium的用法1

目录 1. 初始化浏览器对象和访问页面 2. 查找节点及节点交互 2.1 查找单个节点 &#xff08;1&#xff09;获取方法1——特定方法 &#xff08;2&#xff09;通用方法 2.2 查找多个节点 2.3 节点交互 3. 动作链 4. 执行 JavaScript 之下拉进度条 5. 获取节点信息 5.…

视觉slam十四讲学习笔记(七)视觉里程计 2

介绍直接法的原理&#xff0c;并利用 g2o 实现直接法中的一些核心算法。 前言 1. 理解光流法跟踪特征点的原理。 2. 理解直接法是如何估计相机位姿的。 3. 使用 g2o 进行直接法的计算。 哔哩哔哩课程连接&#xff1a;视觉SLAM十四讲ch7_2_哔哩哔哩_bilibili 一、直接法…

小程序分销系统怎么开发_开启您的智能营销新时代

小程序分销系统&#xff1a;开启您的智能营销新时代 随着移动互联网的迅猛发展&#xff0c;微信小程序以其轻便、快捷的特性赢得了广大用户的喜爱。而在激烈的市场竞争中&#xff0c;如何借助小程序这一工具&#xff0c;实现产品的快速传播和销售&#xff0c;成为了众多商家关…

面试问答总结之Java进阶

文章目录 &#x1f412;个人主页&#x1f3c5;JavaEE系列专栏&#x1f4d6;前言&#xff1a;&#x1f380;注解Annotaion &#xff08;java标注&#xff09;&#x1f415;内置注解&#x1f415;元注解 &#x1f380;对象克隆&#x1f415;如何实现克隆&#x1f415;如何实现深克…

Vue+SpringBoot打造医院门诊预约挂号系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 功能性需求2.1.1 数据中心模块2.1.2 科室医生档案模块2.1.3 预约挂号模块2.1.4 医院时政模块 2.2 可行性分析2.2.1 可靠性2.2.2 易用性2.2.3 维护性 三、数据库设计3.1 用户表3.2 科室档案表3.3 医生档案表3.4 医生放号…