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.mzph.cn/news/721328.shtml

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

相关文章

苹果电脑专业的Mac垃圾清理工具CleanMyMac X4.14.7

CleanMyMac X是一款专业的Mac清理工具,它具有强大的功能和易用的界面,可以帮助用户快速清理Mac上的无用文件和垃圾,优化系统性能,提升电脑运行速度。 该软件的核心功能包括智能扫描与清理、应用程序管理、隐私保护和系统维护等。…

LeetCode217. Contains Duplicate

文章目录 一、题目二、题解 一、题目 Given an integer array nums, return true if any value appears at least twice in the array, and return false if every element is distinct. Example 1: Input: nums [1,2,3,1] Output: true Example 2: Input: nums [1,2,3,4…

简单介绍SpeechPrompt、SpeechPrompt V2、SpeechGen

主要介绍SpeechPrompt、SpeechPrompt V2、SpeechGen SpeechPrompt 模型结构和原理(语音到符号) 整体思路:音频特征提取(HuBert/CPC),离散–》deep prompt speechLM(GSLM)—》概率映射–>目标Verbaliz…

代码随想录刷题笔记-Day28

1. 重新安排行程 332. 重新安排行程https://leetcode.cn/problems/reconstruct-itinerary/给你一份航线列表 tickets ,其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票都属于一个从 JFK(肯…

计算题--时标网络图

时标网络图相当于是双代号网络图和横道图的结合体,特点是多了虚线和波浪线〰️,虚线代表虚工作(只能竖着画),波浪线代表自由时差(横着画)。 在时标网络图中 找关键路径,没有波浪线的…

07_mdioLinux内核模块

01_basicLinux内核模块-CSDN博客文章浏览阅读316次&#xff0c;点赞3次&#xff0c;收藏3次。环境IDubuntuMakefilemodules:clean:basic.creturn 0;运行效果。https://blog.csdn.net/m0_37132481/article/details/136157384my_mdio.c #include <linux/kernel.h> #includ…

【数据结构与算法】深入浅出:单链表的实现和应用

&#x1f331;博客主页&#xff1a;青竹雾色间. &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 ✨人生如寄&#xff0c;多忧何为 ✨ 目录 前言 单链表的基本概念 节点 头节点 尾节点 单链表的基本操作 创建单链表 头插法&#xff1a; 尾插法&#…

【数据结构】 简单认识包装类与泛型

文章目录 包装类基本数据类型和对应的包装类拆箱和装箱自动装箱和自动拆箱包装类面试题 什么是泛型为什么要使用泛型泛型类的创建语法泛型类的使用语法示例类型推导(Type Inference) 裸类型(Raw Type)泛型如何编译的擦除机制为什么不能实例化泛型类型数组 泛型的上界语法示例复…

第五讲:使用blockscout对链上数据可视化

blockscout 拉代码&#xff1a; git clone gitgithub.com:blockscout/blockscout.git 启动docker&#xff1a; cd ./docker make start 进入blockscout网址&#xff1a; http://localhost 注意&#xff1a;blockscout默认会去 http://127.0.0.1:8545/ 查询以太坊信息&am…

论交谈中的不自觉要求及其影响

在人际交往的过程中&#xff0c;交谈作为一种基本而又复杂的沟通方式&#xff0c;往往伴随着各种未明示的要求与期待。实际上&#xff0c;人们在谈话中经常不自觉地对他人的行为或思想提出要求&#xff0c;这种现象虽常见却容易被忽视&#xff0c;它不仅影响了交流的有效性&…

【C语言】Leetcode 876. 链表的中间节点

主页&#xff1a;17_Kevin-CSDN博客 专栏&#xff1a;《Leetcode》 题目 通过题目的要求可以判断出有两种示例要解决&#xff0c;一种是偶数节点的链表&#xff0c;一种是奇数节点的链表&#xff0c;应对这两种情况我们需要使程序对二者都可以兼容。 解决思路 struct ListNode…

03. Nginx入门-Nginx虚拟主机

Nginx虚拟主机简介 yum安装与源码安装一样&#xff0c;只是Nginx配置文件路径不一致&#xff0c;这里用的yum安装的配置文件路径。 利用虚拟主机的功能&#xff0c;可以在一台Nginx服务器上部署一个或多个虚拟主机。 虚拟主机主配置文件 注意&#xff1a;配置完成Nginx主配置…

时间序列数据平稳性检验与随机性分析

1、实验内容: 分析1964年到1999年中国纱产量的时间序列&#xff0c;主要内容包括: (1)、通过图分析时间序列的平稳性&#xff0c;这个方法很直观&#xff0c;但比较粗糙; (2)、通过计算序列的自相关和偏自相关系数&#xff0c;绘出自相关图&#xff0c;根据平稳时间序列的性质分…

splay学习笔记重制版

以前写的学习笔记&#xff1a;传送门 但是之前写的比较杂乱&#xff0c;这里重制一下 问题背景 假设我们要维护一个数据结构&#xff0c;支持插入、删除、查询某个值的排名&#xff0c;查询第 k k k大的值等操作。 最直接的想法是用二叉搜索树&#xff0c;也就是左子树权值&l…

Java实现手机库存管理

一、实验任务 编写一个程序&#xff0c;模拟库存管理系统。该系统主要包括系统首页、商品入库、商品显示和删除商品功能。每个功能的具体要求如下&#xff1a; 1.系统的首页&#xff1a;用于显示系统所有的操作&#xff0c;并且可以选择使用某一个功能。 2.商品入库功能&…

《JAVA与模式》之访问者模式

系列文章目录 文章目录 系列文章目录前言一、分派的概念二、分派的类型三、访问者模式的结构四、访问者模式的优点五、访问者模式的缺点 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网…

ACWing: 730.机器人跳跃问题

二分、递推 #include <iostream> #include <cstring> #include <algorithm> using namespace std;const int N 1e5 10; int h[N] {0};int n,maxh0; // 当 E > maxh 时一定可以满足bool check(int mid){int E mid;for(int i 1;i < n;i){E 2 *…

电商直播大屏是什么?想搞这个怎么做?

随着电商行业的快速发展&#xff0c;直播带货已成为当下最热门的市场营销方式之一。为了更好地掌握直播数据&#xff0c;为企业决策提供有力支持&#xff0c;电商直播数据大屏应运而生。 一、电商直播数据大屏概述 电商直播数据大屏是一种集成了多种数据源的大屏幕可视化展示…

虚拟机磁盘收缩

虚拟机内存太大&#xff0c;与使用情况不符时收缩内存df -h 查看磁盘真实占据的磁盘空间&#xff08;使用内存&#xff09;计算机右键属性查看虚拟机大小&#xff08;占用内存&#xff09;可收缩容量≈占用内存-使用内存 收缩内存指令如下 sudo vmware-toolbox-cmd disk list…

【管理咨询宝藏资料33】某头部咨询公司组织效能提升模型方案

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏资料33】某头部咨询公司组织效能提升模型方案 【关键词】战略规划、组织效能、管理咨询 【文件核心观点】 - 通过长期行业积累和市场洞察&#…