当前位置: 首页 > article >正文

Python测试与调试:保证代码质量的利器

Python测试与调试保证代码质量的利器前言大家好我是第一程序员名字大人很菜。作为一个非科班转码、正在学习Rust和Python的萌新最近我开始学习Python的测试与调试。说实话一开始我对测试和调试的重要性认识不足觉得只要代码能运行就可以了。但随着学习的深入我发现测试和调试是保证代码质量的重要手段。今天我想分享一下我对Python测试与调试的学习心得希望能给同样是非科班转码的朋友们一些参考。一、Python测试框架1.1 unittest 框架unittest是Python的标准测试框架它提供了完整的测试功能import unittest class TestStringMethods(unittest.TestCase): def test_upper(self): self.assertEqual(hello.upper(), HELLO) def test_isupper(self): self.assertTrue(HELLO.isupper()) self.assertFalse(Hello.isupper()) def test_split(self): s hello world self.assertEqual(s.split(), [hello, world]) # 检查分割后的列表长度 self.assertEqual(len(s.split()), 2) if __name__ __main__: unittest.main()1.2 pytest 框架pytest是一个流行的第三方测试框架它提供了更简洁的测试语法def test_upper(): assert hello.upper() HELLO def test_isupper(): assert HELLO.isupper() assert not Hello.isupper() def test_split(): s hello world assert s.split() [hello, world] assert len(s.split()) 21.3 测试覆盖率测试覆盖率是衡量测试质量的重要指标我们可以使用coverage工具来测量# 安装coverage pip install coverage # 运行测试并测量覆盖率 coverage run -m pytest # 查看覆盖率报告 coverage report # 生成HTML覆盖率报告 coverage html二、单元测试2.1 单元测试基础单元测试是测试代码中最小的可测试单元通常是函数或方法# calculator.py def add(a, b): return a b def subtract(a, b): return a - b def multiply(a, b): return a * b def divide(a, b): if b 0: raise ValueError(Cannot divide by zero) return a / b # test_calculator.py import unittest from calculator import add, subtract, multiply, divide class TestCalculator(unittest.TestCase): def test_add(self): self.assertEqual(add(1, 2), 3) self.assertEqual(add(-1, 1), 0) self.assertEqual(add(0, 0), 0) def test_subtract(self): self.assertEqual(subtract(5, 3), 2) self.assertEqual(subtract(1, 5), -4) def test_multiply(self): self.assertEqual(multiply(2, 3), 6) self.assertEqual(multiply(-1, 5), -5) def test_divide(self): self.assertEqual(divide(6, 2), 3) self.assertEqual(divide(5, 2), 2.5) with self.assertRaises(ValueError): divide(1, 0) if __name__ __main__: unittest.main()2.2 测试夹具Fixtures测试夹具用于设置和清理测试环境import unittest class TestDatabase(unittest.TestCase): def setUp(self): # 设置测试环境 self.db {users: []} def tearDown(self): # 清理测试环境 self.db None def test_add_user(self): self.db[users].append({id: 1, name: Alice}) self.assertEqual(len(self.db[users]), 1) def test_remove_user(self): self.db[users].append({id: 1, name: Alice}) self.db[users].pop() self.assertEqual(len(self.db[users]), 0) if __name__ __main__: unittest.main()三、集成测试3.1 集成测试基础集成测试是测试多个组件之间的交互import unittest from flask import Flask from flask.testing import FlaskClient app Flask(__name__) app.route(/) def index(): return Hello, World! app.route(/user/name) def user(name): return fHello, {name}! class TestFlaskApp(unittest.TestCase): def setUp(self): app.config[TESTING] True self.client app.test_client() def test_index(self): response self.client.get(/) self.assertEqual(response.status_code, 200) self.assertIn(bHello, World!, response.data) def test_user(self): response self.client.get(/user/Alice) self.assertEqual(response.status_code, 200) self.assertIn(bHello, Alice!, response.data) if __name__ __main__: unittest.main()四、调试技巧4.1 使用print语句最简单的调试方法是使用print语句def divide(a, b): print(fDebug: a {a}, b {b}) if b 0: print(Debug: Division by zero) raise ValueError(Cannot divide by zero) result a / b print(fDebug: result {result}) return result4.2 使用pdb调试器pdb是Python的内置调试器import pdb def divide(a, b): pdb.set_trace() # 设置断点 if b 0: raise ValueError(Cannot divide by zero) return a / b divide(10, 2)4.3 使用IDE调试器大多数IDE都提供了图形化的调试器如PyCharm、VS Code等设置断点在代码行上点击设置断点运行调试以调试模式运行代码查看变量在调试过程中查看变量的值单步执行逐行执行代码五、异常处理5.1 异常处理基础try: result 10 / 0 except ZeroDivisionError as e: print(fError: {e}) except Exception as e: print(fUnexpected error: {e}) else: print(fResult: {result}) finally: print(This block always executes)5.2 自定义异常class CustomError(Exception): pass def validate_age(age): if age 0: raise CustomError(Age cannot be negative) return age try: validate_age(-5) except CustomError as e: print(fError: {e})六、Python与Rust的对比作为一个同时学习Python和Rust的转码者我发现对比学习是一种很好的方法6.1 测试对比Python有unittest、pytest等测试框架Rust有内置的测试框架语法对比Python测试语法简洁Rust测试语法严谨执行速度Rust测试执行速度快于Python测试6.2 调试对比Python有pdb、IDE调试器等Rust有gdb、lldb等调试器调试体验Python调试更灵活Rust调试更严谨类型安全Rust的类型安全减少了很多调试需求七、实践项目推荐7.1 测试项目单元测试为现有函数编写单元测试集成测试测试多个组件之间的交互端到端测试测试整个应用的流程性能测试测试代码的性能7.2 调试项目调试复杂函数使用调试器分析复杂函数的执行过程定位内存泄漏使用内存分析工具定位内存泄漏性能分析使用性能分析工具分析代码性能八、学习方法和技巧8.1 学习方法循序渐进先学习基础测试方法再学习高级测试技巧项目实践通过实际项目来巩固知识文档阅读仔细阅读测试框架的官方文档社区交流加入社区向他人学习8.2 常见问题和解决方法测试覆盖率低增加测试用例覆盖更多代码路径测试执行慢优化测试代码减少测试依赖调试困难使用合适的调试工具逐步分析问题异常处理不当合理使用异常处理避免过度使用九、总结Python的测试与调试是保证代码质量的重要手段。作为一个非科班转码者我深刻体会到学习测试与调试的重要性。我的学习过程并不是一帆风顺的遇到了很多困难和挫折但通过不断地实践和学习我逐渐掌握了Python测试与调试的各种技巧。保持学习保持输出。虽然现在我还是个菜鸡但我相信只要坚持总有一天能成为真正的「第一程序员」

相关文章:

Python测试与调试:保证代码质量的利器

Python测试与调试:保证代码质量的利器 前言 大家好,我是第一程序员(名字大,人很菜)。作为一个非科班转码、正在学习Rust和Python的萌新,最近我开始学习Python的测试与调试。说实话,一开始我对测…...

ComfyUI-Impact-Pack:批量图像处理的效率引擎与智能处理终极指南

ComfyUI-Impact-Pack:批量图像处理的效率引擎与智能处理终极指南 【免费下载链接】ComfyUI-Impact-Pack Custom nodes pack for ComfyUI This custom node helps to conveniently enhance images through Detector, Detailer, Upscaler, Pipe, and more. 项目地址…...

如何判断重庆SEO优化公司的实力_重庆SEO优化服务有哪些特点

如何判断重庆SEO优化公司的实力_重庆SEO优化服务有哪些特点 在当前数字化营销的时代,一个企业的在线表现直接影响到其市场竞争力。而在重庆这个经济发展迅速的城市,SEO优化服务显得尤为重要。如何判断一家重庆SEO优化公司的实力,又有哪些特点…...

抖音视频高效下载工具:从痛点解决到价值实现的完整指南

抖音视频高效下载工具:从痛点解决到价值实现的完整指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback supp…...

MacBook Pro上从零配置PCL开发环境:Homebrew一键安装+CMake避坑指南

MacBook Pro上从零配置PCL开发环境:Homebrew一键安装CMake避坑指南 如果你刚入手一台M1/M2芯片的MacBook Pro,想要开始3D点云处理开发,PCL(Point Cloud Library)无疑是首选工具库。但不同于Windows平台的一键安装体验&…...

高效掌握Mem Reduct多语言界面配置:实战指南

高效掌握Mem Reduct多语言界面配置:实战指南 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirrors/me/memreduct 如何通过Mem…...

KLayout版图设计工具:5个高效芯片设计技巧与实战指南

KLayout版图设计工具:5个高效芯片设计技巧与实战指南 【免费下载链接】klayout KLayout Main Sources 项目地址: https://gitcode.com/gh_mirrors/kl/klayout 在复杂的芯片设计流程中,版图设计是连接电路逻辑与物理实现的关键环节。KLayout作为一…...

拓扑排序不止于理论:从邻接矩阵的暴力实现到工程项目的优雅应用

拓扑排序不止于理论:从邻接矩阵的暴力实现到工程项目的优雅应用 引言 第一次接触拓扑排序时,很多人都会被它那看似简单却充满智慧的算法逻辑所吸引。在课堂练习中,我们常常用邻接矩阵来实现这个算法——逐列扫描、标记访问、清空行&#xf…...

KH Coder终极指南:零代码玩转文本分析的秘密武器

KH Coder终极指南:零代码玩转文本分析的秘密武器 【免费下载链接】khcoder KH Coder: for Quantitative Content Analysis or Text Mining 项目地址: https://gitcode.com/gh_mirrors/kh/khcoder 还在为海量文本数据发愁吗?想从成千上万份文档中提…...

别再死记硬背PID参数了!用S7-1200的PID_Temp指令,手把手教你搞定巧克力炉的串级温度控制

巧克力炉温度控制的智能革命:S7-1200 PID_Temp指令实战解析 凌晨三点的工厂里,李工盯着屏幕上剧烈波动的温度曲线,第17次调整PID参数后,巧克力溶液依然在设定值上下疯狂震荡——这是许多自动化工程师都经历过的"参数整定噩梦…...

JiYuTrainer:如何在不影响学习的前提下解除极域电子教室限制的3种方法

JiYuTrainer:如何在不影响学习的前提下解除极域电子教室限制的3种方法 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer 在数字化教学环境中,极域电子教室&a…...

嵌入式视觉实战2——基于MaixCAM与PP-OCR的智能门禁车牌识别系统

1. MaixCAM与PP-OCR的完美组合 第一次接触MaixCAM时,我就被这个小巧的视觉模块惊艳到了。它内置的RISC-V处理器跑着完整的Linux系统,这意味着我们可以直接在上面部署各种AI模型,而不用像传统单片机那样从零开始搭建开发环境。最让我惊喜的是&…...

RK312X Android 7.1内核ACM驱动踩坑:手动管理instances变量避免系统崩溃

RK312X Android 7.1内核ACM驱动状态管理深度剖析:从空指针崩溃到安全计数器设计 在嵌入式Linux内核开发领域,USB Gadget驱动的状态同步问题一直是困扰开发者的典型难题。当我们在RK312X平台上移植Android 7.1系统时,发现了一个极具代表性的案…...

3种解决方案让QQ音乐加密文件重获自由:QMCDecode全解析

3种解决方案让QQ音乐加密文件重获自由:QMCDecode全解析 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录,默认…...

Wand-Enhancer:WeMod Pro免费解锁终极指南与完整教程

Wand-Enhancer:WeMod Pro免费解锁终极指南与完整教程 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer Wand-Enhancer是一款开源工具&#xff…...

ParsecVDisplay:Windows虚拟显示器驱动技术深度解析

ParsecVDisplay:Windows虚拟显示器驱动技术深度解析 【免费下载链接】parsec-vdd ✨ Perfect virtual display for game streaming 项目地址: https://gitcode.com/gh_mirrors/pa/parsec-vdd 在远程协作、游戏串流和多屏工作流日益普及的今天,物理…...

AssetStudio终极指南:如何快速提取Unity游戏资源并实现创意重用

AssetStudio终极指南:如何快速提取Unity游戏资源并实现创意重用 【免费下载链接】AssetStudio AssetStudio - Based on the archived Perfares AssetStudio, I continue Perfares work to keep AssetStudio up-to-date, with support for new Unity versions and ad…...

yz-bijini-cosplay实战体验:一键切换LoRA风格,轻松生成动漫/游戏/国风Cosplay角色

yz-bijini-cosplay实战体验:一键切换LoRA风格,轻松生成动漫/游戏/国风Cosplay角色 你是否曾经为了生成一张理想的Cosplay图片而反复切换模型,每次都要忍受漫长的加载等待?或者因为模型对中文提示词理解不佳,导致生成的…...

终极宝可梦随机化指南:如何用Universal Pokemon Randomizer ZX创造全新冒险

终极宝可梦随机化指南:如何用Universal Pokemon Randomizer ZX创造全新冒险 【免费下载链接】universal-pokemon-randomizer-zx Public repository of source code for the Universal Pokemon Randomizer ZX 项目地址: https://gitcode.com/gh_mirrors/un/univers…...

微信小程序+Pixel Couplet Gen:多语言切换(中/英/日)技术实现

微信小程序Pixel Couplet Gen:多语言切换(中/英/日)技术实现 1. 项目背景与核心价值 Pixel Couplet Gen是一款融合传统春节文化与现代像素游戏风格的创新应用。通过ModelScope大模型驱动,它能生成独特的马年像素春联&#xff0c…...

如何10分钟搞定TikTok评论采集:新手快速上手指南

如何10分钟搞定TikTok评论采集:新手快速上手指南 【免费下载链接】TikTokCommentScraper 项目地址: https://gitcode.com/gh_mirrors/ti/TikTokCommentScraper 还在为手动复制TikTok评论而烦恼吗?面对爆款视频下方成千上万的评论,你是…...

开源工具DS4Windows:PS手柄Windows协议转换与手柄适配全指南

开源工具DS4Windows:PS手柄Windows协议转换与手柄适配全指南 【免费下载链接】DS4Windows Like those other ds4tools, but sexier 项目地址: https://gitcode.com/gh_mirrors/ds/DS4Windows DS4Windows作为一款开源工具,其核心功能在于实现PS手柄…...

开箱即用!雯雯的后宫-造相Z-Image-瑜伽女孩镜像:专为瑜伽场景优化的AI画师

开箱即用!雯雯的后宫-造相Z-Image-瑜伽女孩镜像:专为瑜伽场景优化的AI画师 1. 镜像概述与核心价值 1.1 为什么选择瑜伽专用AI画师 在瑜伽内容创作领域,传统图片获取方式面临三大痛点:专业模特拍摄成本高昂、图库素材风格单一、…...

如何用Sunshine搭建免费游戏串流服务器:终极指南

如何用Sunshine搭建免费游戏串流服务器:终极指南 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 还在为无法在不同设备上畅玩PC游戏而烦恼吗?Sunshine开源游…...

如何通过Apex-NoRecoil-2021智能工具实现精准射击与武器后坐力控制

如何通过Apex-NoRecoil-2021智能工具实现精准射击与武器后坐力控制 【免费下载链接】Apex-NoRecoil-2021 Scripts to reduce recoil for Apex Legends. (auto weapon detection, support multiple resolutions) 项目地址: https://gitcode.com/gh_mirrors/ap/Apex-NoRecoil-2…...

ParsecVDisplay:如何突破物理限制实现4K 240Hz虚拟显示

ParsecVDisplay:如何突破物理限制实现4K 240Hz虚拟显示 【免费下载链接】parsec-vdd ✨ Perfect virtual display for game streaming 项目地址: https://gitcode.com/gh_mirrors/pa/parsec-vdd ParsecVDisplay是一款基于Parsec虚拟显示驱动器的开源解决方案…...

Translumo终极指南:如何免费实现游戏外语实时翻译

Translumo终极指南:如何免费实现游戏外语实时翻译 【免费下载链接】Translumo Advanced real-time screen translator for games, hardcoded subtitles in videos, static text and etc. 项目地址: https://gitcode.com/gh_mirrors/tr/Translumo 还在为看不懂…...

鸣潮自动化工具ok-ww终极指南:从零开始掌握后台自动战斗技巧

鸣潮自动化工具ok-ww终极指南:从零开始掌握后台自动战斗技巧 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves ok-ww是一…...

免费开源游戏串流神器:Sunshine平台完整搭建与优化指南

免费开源游戏串流神器:Sunshine平台完整搭建与优化指南 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 还在为无法在移动设备或客厅电视上玩PC游戏而烦恼吗&#xff1f…...

3大核心功能让WeChatMsg成为Mac微信数据管理专家

3大核心功能让WeChatMsg成为Mac微信数据管理专家 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeChatMsg 在数字…...