python单元测试实践之目录

pytest公司项目实战之测试目录架构搭建 写了项目的一个demo,目前只写了其中的一个模块(product),目录结构如下 common主要放一些公共方法, common ----parseconfig 是解析ini用 ----s_packaging 封装的一些方法 conf conf 配置文件 ----config.ini 公共配置数据 ----config.py 环境变量配置 financial 财务模块 ... 阅读详情

在 Python 项目中,test 目录(通常命名为 tests)的放置位置主要有两种主流且被广泛接受的做法:

📂 1. 项目根目录下,与主包目录平级 (最推荐)

这是目前 最主流、最推荐 的方式,尤其受到 pytest 等流行测试框架的支持。

  • 结构示例:
    my_project/
    ├── my_package/          # 主项目代码包
    │   ├── __init__.py
    │   ├── module1.py
    │   └── module2.py
    ├── tests/               # 测试目录 (推荐使用复数形式 tests)
    │   ├── __init__.py      # (可选,但常见)
    │   ├── test_module1.py  # 测试文件,通常以 test_ 开头
    │   └── test_module2.py
    ├── setup.py             # 或 setup.cfg, pyproject.toml
    ├── requirements.txt
    └── README.md
    
  • 优点:
    • 清晰分离: 测试代码与生产代码完全分离,结构一目了然。
    • 避免打包: 测试代码通常不需要被打包分发到最终用户环境。放在根目录下可以方便地在 setup.py/pyproject.toml 中通过 exclude 配置排除 tests 目录。
    • 工具友好: pytest、unittest 等工具默认就能发现并运行这个位置的测试,无需额外配置搜索路径。
    • 项目标准: 这是许多大型开源项目(如 requests, flask, numpy, pandas)和社区工具(如 Cookiecutter 模板)采用的结构。

📦 2. 放在每个子包/模块目录内 (较少见)

这种方式将测试文件直接放在它们所测试的代码旁边。

  • 结构示例:
    my_project/
    ├── my_package/
    │   ├── __init__.py
    │   ├── module1.py
    │   ├── tests/           # 为 module1 的测试
    │   │   ├── __init__.py
    │   │   └── test_module1.py
    │   └── module2.py
    ├── setup.py
    ├── requirements.txt
    └── README.md
    
  • 优点:
    • 紧耦合: 测试与其对应的功能代码物理位置非常接近,对于理解特定模块的功能和测试可能更直观。
  • 缺点:
    • 污染包结构: 将测试代码混入生产代码包中,可能导致包结构混乱。
    • 打包隐患: 如果不仔细配置打包工具(setup.py/pyproject.toml),测试代码可能会被意外包含在分发包中。
    • 运行复杂: 需要更仔细地配置测试运行器来收集所有分散的测试,或者在每个子目录单独运行测试。
    • 不常用: 在现代 Python 项目中远不如第一种方式普及。

📌 强烈建议与最佳实践

  1. 首选 tests 在根目录: 对于绝大多数项目,将 tests 目录(使用复数形式)放在项目根目录下,与主代码包(如 my_package)平级是最佳实践。这是 Python 社区的共识。
  2. 测试文件命名: 在 tests 目录内的测试文件,通常遵循以下命名约定:
    • test_<something>.py(例如:test_models.py, test_utils.py)
    • <something>_test.py(例如:models_test.py, utils_test.py) - 这种形式不如 test_ 前缀常见,但也被一些项目使用。pytest 默认都能识别这两种。
  3. __init__.py 文件:
    • 在 tests 目录下放一个空的 __init__.py 文件是常见的做法。这会将 tests 也视为一个 Python 包,有时有助于测试发现或处理相对导入(尤其是在旧项目或使用 unittest 时)。现代工具如 pytest 通常不需要它也能工作得很好。放或不放通常都不会有大问题,但放一个通常是安全的且符合惯例。
  4. pytest 是推荐工具: 使用 pytest 作为测试运行器和框架,它功能强大、灵活且对上述推荐的项目结构支持得非常好。
  5. 测试运行命令:
    • 在项目根目录运行 pytest 即可自动发现并运行 tests 目录下所有符合命名规则的测试。
    • 运行特定测试文件:pytest tests/test_module1.py
    • 运行特定测试函数:pytest tests/test_module1.py::test_specific_function

🔧 总结

把你的测试代码放在项目根目录下的 tests 目录里(和你的主代码包文件夹并列)。 这是最清晰、最标准、最易于维护且最受工具支持的方式。✅

Python单元测试实战:pytest框架从入门到精通 单元测试是软件工程中保障代码质量的核心实践,它通过隔离和验证代码的最小可测试单元,确保每个组件按预期工作。其原理在于自动化执行预设的测试用例,快速反馈代码变更是否引入回归错误,从而提升软件的可靠性与可维护性。在Python生态中,pytest框架以其简洁的语法和强大的扩展性,成为实施单元测试的首选工具。它通过`fixture`机制优雅管理测试资源,利用`parametrize`实现数据驱动测试,并能与`unittest.mock`无缝集成以隔离外部依赖。这些特性使其能高效支撑从函数、类到整个模块的测试需求, 阅读详情

相关推荐

Python单元测试实战:从零搭建可信赖的unittest体系

单元测试是软件工程中保障代码正确性的基础实践,其本质是为函数定义可验证的行为契约,而非单纯查找缺陷。通过unittest框架,开发者能系统性地校验输入输出、异常路径与边界条件,实现可复现、可调试、可信任的自动化验证。它支撑金融风控、IoT设备管理、SaaS后台等高可靠性场景,广泛应用于CI/CD流水线、覆盖率分析与跨版本兼容性保障。本文聚焦Python unittest核心能力——包括测试组织规范、setUp/tearDown环境隔离、assertAlmostEqual浮点容错、assertRaises异常

weixin_30335575的博客 339

Python单元测试框架unittest:从核心原理到工程实践

单元测试是软件工程中保障代码质量的核心实践,通过自动化验证代码单元的行为是否符合预期。其基本原理是将测试逻辑封装为可重复执行的代码片段,利用断言机制验证结果,从而实现测试的标准化与自动化。这一技术能显著提升代码的可靠性与可维护性,降低回归错误风险,是持续集成和敏捷开发流程的关键环节。在Python生态中,unittest框架作为标准库组件,提供了TestCase、TestSuite等核心构建块,并可通过setUp/tearDown实现测试固件管理。结合unittest.mock进行依赖隔离,能有效应对数据库

407

Pytest教程:测试用例命名规范及目录结构

当编写 Pytest 测试用例时,遵循良好的命名规范和实践对于代码的可读性和可维护性非常重要。下面我将为你详细介绍 Pytest 测试用例的命名规范和最佳实践,并结合代码示例进行说明。

旦莫的博客 1429

3.目录结构

pytest接口自动化框架搭建_董林夕的博客-优快云博客_pytest接口自动化测试框架 1.config层,放配置文件,把所有的项目相关的配置均放到这里,用Python支持较好的配置文件格式如ini或yaml等进行配置。实现配置与代码分离。 2.data层,放数据文件,可以把所有的testcase的参数化相关的文件放到这里,一般可采用xlsx、csv、xml等格式。实现数据与代码分离。 3.drivers层,放所需的驱动,如Chromedriver、IEDriverServer等。 4.log层

lzmlc0109的博客 1982

PX4实战指南:通过遥控器通道直连实现舵机PWM控制

本文详细介绍了如何通过PX4飞控实现遥控器通道直连控制舵机PWM输出的完整流程。从硬件准备、遥控器配对到PX4参数配置和硬件连接,提供了实战技巧和常见问题解决方案,帮助无人机爱好者快速掌握舵机控制技术。重点讲解了AUX Passthrough模式设置和PWM参数调整等关键步骤。

weixin_29195217的博客 154

手把手教你用DCT/DCG实现Multi-bit FF物理优化(含SPG流程避坑指南)

本文详细解析了Multi-bit FF(MBFF)在芯片物理实现中的优化方法,重点介绍了DCT/DCG与SPG流程的实战应用。通过物理感知综合、寄存器组识别和增量优化三阶段流程,实现PPA(Power-Performance-Area)的协同提升。文章还提供了Innovus与ICC工具的协同优化策略及典型问题排查指南,帮助工程师高效完成MBFF物理优化。

ik67890123的博客 244

【Pytest】结构介绍

全局配置:借助 pytest.ini 文件,你可以为整个项目设定通用的配置选项,从而避免在每次运行 pytest 时都要在命令行输入相同的参数。pytest.ini 是 pytest 测试框架的配置文件,它允许你对 pytest 的行为进行全局或项目级别的定制。conftest.py 是 pytest 里一个非常重要的文件,它能对 pytest 的测试行为进行灵活配置与扩展。-v:表示以详细模式运行测试,会输出更多的测试信息。-v 表示以详细模式运行测试,会输出更多的测试信息。

唐古的博客 1348

【侯俊霞全网最全收集--PLC1200/200SMART(88+93课时) 第1章】

第1章:零基础快速入门西门子S7-1200

问就ycy的博客 2046

如何使用pytest组织自动化测试用例结构?

如何组织自动化测试工程的目录结构?这篇文章介绍了我是如何组织整个自动化工程目录结构的,本篇介绍下我是如何利用pytest框架组织一个测试用例文件的。

测试界的彭于晏的博客 1329

社工库2.0

#大题目 社工库2.0 ###环境 whoosh2.7 jieba 12306 python3.7 网上嫖来的网页模板(感谢站长之家 ###实现效果 建立的索引文件 好看的页面 更快的查找速度 ###实现过程 具体的实现过程比较简易,毕竟whoosh已经封装的很好了 第一步 建立索引并存储 schema = Schema(zhanghao=TEXT(stored=True), code=STORED, name=TEXT(stored=True, analyzer=

sdyinruichao的博客 2万+

Markdown编辑器介绍

这篇文章介绍了Markdown编辑器的功能和使用方法。主要内容包括:Markdown的基本语法如标题、列表、链接插入等;新增功能如图片拖拽、数学公式支持、甘特图和UML图表绘制;常用快捷键说明;以及文本导出导入操作。文章详细说明了如何通过Markdown语法实现文本格式化、代码高亮、表格创建等功能,并提供了多种图表绘制的语法示例,帮助用户更好地利用Markdown编辑器进行写作和内容创作。

soso1968的博客 1181

Python单元测试目录结构搭建指南:pytest实战与最佳实践

单元测试是保障软件质量的核心实践,通过隔离测试代码与业务逻辑,确保每个模块按预期工作。其原理在于自动化验证代码行为,提升开发效率与代码可维护性。在Python生态中,pytest凭借简洁语法和强大夹具系统成为主流测试框架。本文聚焦于构建清晰的测试目录结构,这是实现高效测试的基础。通过src布局隔离源码、conftest.py共享夹具、以及镜像式文件映射,能显著提升团队协作与项目可维护性。文中将结合pytest框架和测试驱动开发(TDD)理念,详解从项目初始化到高级组织的完整实践路径,帮助开发者建立标准化、可

weixin_33694172的博客 387

【STM32 CubeMX】I2C中断方式与DMA方式

在STM32 CubeMX环境中,I2C(Inter-Integrated Circuit)通信协议的实现可以采用中断方式或DMA(Direct Memory Access)方式。中断方式通过触发中断来处理数据传输,而DMA方式则利用直接内存访问技术来实现数据传输,减轻了CPU的负担。在选择I2C通信方式时,开发者需要根据具体的应用需求和性能要求来选择合适的方式。STM32 CubeMX提供了图形化配置工具,使得配置I2C通信方式变得更加便捷。

m0_62599305的博客 7749

正确地组织python项目的结构

统一的项目结构 写了不少python项目后, 越来越认识到python项目结构重要性. 不管项目是否要开源, 是否要提交pypi, 项目结构的一致性带来的好处还有很多: 多人合作开发大家都有个基本的guideline, 别人日后维护也方便, 也容易形成项目开发的best practice. 所以花了写时间, 仔细研究了github上python的 top 10 项目的结构, 项目结构还真不太一样....

weixin_34354173的博客 730

利用SIMULINK搭建一个16QAM调制解调收发系统

1发送模块设计 根据前面介绍的理论知识,我们可以知道16QAM的基本结构,首先我来设计QAM发送段的SIMULINK仿真模块。 图1 16QAM的发送端模块 他的基本工作流程为:将信号通过两路升余弦滤波器,得到滤波以后的信号,滤波器的作用就是为了防止码间干扰。然后将滤波以后的信号和SIN,COS相乘得到调制信号,将调制 下面一一介绍每个模块的具体参数设置以及各个部分信号的波形图。 图2 产生随机数据的信号源 第一部分信号是产生一组随机的数字,作为信源,第二个模块将信号...

FPGA/MATLAB学习教程/源码/项目合作开发 4776

YOLOv12改进前必看 - YAML模型配置文件详细解读(再也不用担心通道数不匹配) 附网络结构图

YOLOv12的模型配置文件在中,里面包含yolov12的以及的不同大小的模型,本文将详细介绍一下YOLOv12模型文件中各参数的含义。

Limiiiing的博客 3278

Python项目最佳实践:基于Python Project Template的目录结构设计指南

Python项目模板(Python Project Template)是一个功能强大的GitHub模板,专为快速启动Python项目而设计。它采用标准化的目录结构和最佳实践,帮助开发者专注于业务逻辑而非项目配置。本文将详细介绍如何利用这一模板构建清晰、可维护的Python项目架构。 ## 📋 核心目录结构解析 Python Project Template采用了业界公认的最佳实践目录结构,主

gitblog_00032的博客 334

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

从测试到部署:python-snap7项目的单元测试与CI/CD实践

python-snap7是一个纯Python编写的S7通信库,用于与西门子S7 PLC进行交互。本文将详细介绍该项目的单元测试策略和CI/CD实践,帮助开发者了解如何确保代码质量并实现自动化部署。 ## 一、测试框架与工具选择 python-snap7项目采用了pytest作为主要的测试框架,结合多种插件实现全面的测试覆盖。在项目的`pyproject.toml`文件中,我们可以看到测试相关的

gitblog_01039的博客 386

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

MXNet 测试指南:从 C++ 单元测试(CMake/CTest/Ninja)到 Docker 内 Python 测试的完整实践

本文是 Apache MXNet 仓库中 [tests/README.md](https://link.gitcode.com/i/234612776f0b78169aa839f81ac4f4c9) 的深度实战指南。全文围绕两条主线展开:一是使用 CMake + CTest(或 Ninja)编译并运行 C++ 单元测试,二是借助 `ci/build.py` 在 Docker 容器内执行 Pytho

gitblog_00686的博客 869

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

php单元测试覆盖率,unittest+coverage怎么进行单元测试覆盖

这次给大家带来unittest+coverage怎么进行单元测试覆盖,unittest+coverage进行单元测试覆盖的注意事项有哪些,下面就是实战案例,一起来看一下。基于上一篇文章,这篇文章是关于使用coverage来实现代码覆盖的操作实例,源代码在上一篇已经给出相应链接。本篇文章字用来实现代码覆盖的源代码,整个项目的测试框架如下:就是在源代码的基础上加了一个CodeCover.py文件,执行...

weixin_28304023的博客 326

Flet 单元测试实战:用 uv 与 pytest 运行 Python SDK 测试套件

本指南聚焦 Flet 开源仓库中 Python 框架部分的单元测试体系,讲解如何通过 `uv` 工具链与 `pytest` 一条命令跑通 `flet` 包的全部单元测试。读完本文,你将掌握 Flet SDK 的测试目录结构、测试依赖的声明方式、benchmark 基准测试的跳过机制,以及如何把测试任务接入项目现有的 `Taskfile` 工作流。 ## 一条命令跑通 Flet Python 单元

gitblog_07709的博客 432

python 父路径_从父目录导入Python

我有以下内容:ModuleFolder||-->. ModuleFile.py .|'-->. TestsFolder .|'---> UnitTest1.py我正在尝试从父目录导入。在这种情况下,我尝试从测试文件夹中运行" UnitTest1.py",并从其上方的目录(文件" ModuleFile.py")中导入。我知道已经有很多答案。 SO问题1,SO问题2,其他所有SO问题...

weixin_42552410的博客 1232

DGL 单元测试体系全解析:Python 与 C++ 测试的组织、构建与 CI 实践

本文以 DGL 仓库根目录下的 [tests/README.md](https://link.gitcode.com/i/44d136b52d67512bba91b2210dc13b10) 为核心骨架,系统梳理 DGL 单元测试的目录组织原则、Python 与 C++ 两套测试体系、测试运行方式以及 CI 自动化脚本,并结合仓库内的 [tests/](https://link.gitcode.co

gitblog_00312的博客 451

mlx-lm测试框架详解:单元测试与集成测试实践

mlx-lm项目采用**单元测试**与**集成测试**相结合的测试策略,确保大语言模型在MLX框架上的高效稳定运行。测试套件基于Python标准库`unittest`构建,覆盖模型加载、推理生成、量化处理等核心功能,测试文件集中在[tests/](https://link.gitcode.com/i/4ae238eeeb4f26a7e2b8ba72b1c64b79)目录下,包含15个专项测试模块。...

gitblog_00708的博客 737

Open3D Python 单元测试指南:基于 pytest 的安装、运行与测试套件深度解析

本文以 [python/test/readme.md](https://link.gitcode.com/i/5ab070e8ccd88d5b9774f5d5d7b95a02) 为骨架,系统讲解 Open3D 仓库中 Python 单元测试的运行方法:从 pytest 的安装、测试发现规则(`test_*.py` 文件与 `test_*` 函数)、多种启动方式(`pytest`、指定目录、`-s`

gitblog_00197的博客 356

10分钟掌握dddpy测试策略:从单元测试到集成测试

dddpy是一个基于Python的领域驱动设计(DDD)和洋葱架构示例项目,提供了完整的测试策略。本文将带你快速了解如何在dddpy项目中实施从单元测试到集成测试的全流程测试方案,帮助你构建更健壮的应用程序。 ## 为什么测试对dddpy项目至关重要 在领域驱动设计中,业务逻辑通常集中在领域层,这使得测试变得尤为重要。dddpy项目采用洋葱架构,将代码分为领域层、应用层、基础设施层和表示层,每

gitblog_00689的博客 924
上一篇: python3.9带 C++绑定的基础镜像
下一篇: xtp+ctp 交易系统接口简介
旷野说
博客等级 码龄9年 361粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值