跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python

Python 自动化测试入门:编写与运行测试用例

自动化测试能显著节省时间并提高效率。通过 Python 示例讲解了如何搭建测试项目骨架、编写 Room 类及其测试用例、使用 nosetests 运行测试并查看结果。同时提供了测试脚本编写规范及最佳实践建议,帮助开发者建立自动化测试流程,确保代码修改后功能依然正常。

月亮邮递员发布于 2025/2/7更新于 2026/8/1957 浏览
Python 自动化测试入门:编写与运行测试用例

Python 自动化测试入门:编写与运行测试用例

众所周知,自动化测试的优势是显而易见的,它可以大大节省我们的时间,提高我们的工作效率。那么 Python 如何做自动化测试呢?本文将用 Python 编写一个简单的测试用例,并指导大家编写自动化测试的代码。

1. 为什么需要自动化测试?

相信大家都遇到过这样的问题,你需要一遍一遍地在你的软件中输入命令,来测试软件的功能是否正常,这个过程是很枯燥无味的。如果能写一小段代码用来测试你的代码该有多好啊!因此我们就不得不需要用到自动化测试。试想一下,无论你对程序做了什么修改,或者添加了什么新东西,你只要'跑一下你的自动化测试',而这些测试能确认程序依然能正确运行。这些自动测试不会抓到所有的 bug,但可以让你无需重复输入命令运行你的代码,从而为你节约很多时间。

2. 用 Python 编写测试用例

下面以一段非常简单的代码为例,用 Python 写一个简单的测试,这个测试将建立在一个项目骨架上面。首先从你的项目骨架创建一个叫做 ex47 的项目。下面是你要采取的步骤:

  1. 复制 skeleton 到 ex47
  2. 将所有的 NAME 重命名为 ex47
  3. 修改所有文件中 NAME 为 ex47
  4. 最后删除所有的 *.pyc 文件

接下来创建一个简单的 ex47/game.py 文件,里边放一些用来被测试的代码。我们现在放一个小 class 进去,用来作为我们的测试对象:

class Room(object):
    def __init__(self, name, description):
        self.name = name
        self.description = description
        self.paths = {}

    def go(self, direction):
        return self.paths.get(direction, None)

    def enter(self):
        print(self.description)

准备好了这个文件,接下来把测试骨架改成这样子:

import unittest
from game import Room

class TestGame(unittest.TestCase):
    def test_room_name(self):
        room = Room("North", "A dark tunnel")
        self.assertEqual(room.name, "North")

    def test_room_description(self):
        room = Room("South", "A sunny beach")
        self.assertEqual(room.description, "A sunny beach")

    def test_room_paths(self):
        room = Room("East", "To the castle")
        room.paths["east"] = "Castle"
        self.assertEqual(room.go("east"), "Castle")

这个文件导入了你在 ex47.game 创建的 Room 这个类,接下来我们要做的就是测试它。于是我们看到一系列的以 test_ 开头的测试函数,它们就是所谓的'测试用例 (test case)',每一个测试用例里面都有一小段代码,它们会创建一个或者一些房间,然后去确认房间的功能和你期望的是否一样。它测试了基本的房间功能,然后测试了路径,最后测试了整个地图。

这里最重要的函数是 assert_equal,它保证了你设置的变量,以及你在 Room 里设置的路径和你的期望相符。如果你得到错误的结果的话,nosetests 将会打印出一个错误信息,这样你就可以找到出错的地方并且修正过来。

3. 测试指导

在写测试代码时,你可以照着下面这些不是很严格的指导来做:

  1. 测试脚本要放到 tests/ 目录下,并且命名为 BLAH_tests.py,否则 nosetests 就不会执行你的测试脚本了。这样做还有一个好处就是防止测试代码和别的代码互相混掉。
  2. 为你的每一个模组写一个测试。
  3. 测试用例(函数)保持简短,但如果看上去不怎么整洁也没关系,测试用例一般都有点乱。
  4. 就算测试用例有些乱,也要试着让他们保持整洁,把里边重复的代码删掉。创建一些辅助函数来避免重复的代码。当你下次在改完代码需要改测试的时候,你会感谢我这一条建议的。重复的代码会让修改测试变得很难操作。
  5. 最后一条是别太把测试当做一回事。有时候,更好的方法是把代码和测试全部删掉,然后重新设计代码。

4. 显示结果

$ nosetests
...
----------------------------------------------------------------------
Ran 3 tests in 0.008s
OK

如果一切工作正常的话,你看到的结果应该就是这样。试着把代码改错几个地方,然后看错误信息会是什么,再把代码改正确。

5. 现代测试工具推荐

虽然 nosetests 是一个经典的测试运行器,但在现代 Python 开发中,pytest 和标准库 unittest 更为流行。pytest 语法更简洁,支持丰富的插件;unittest 则是 Python 内置的标准库,无需安装额外依赖。对于新项目,建议优先选择 pytest,因为它对异常处理和参数化测试的支持更加友好。

此外,持续集成(CI)环境通常会自动运行这些测试脚本,确保每次代码提交都不会破坏现有功能。结合 Git 钩子(Git Hooks)可以在提交前自动触发测试,进一步提高代码质量。

6. 总结

自动化测试是软件开发中不可或缺的一环。通过编写可复用的测试脚本,开发者可以快速验证功能变更的正确性,减少回归测试的成本。掌握 Python 自动化测试的基本流程,包括项目结构搭建、测试用例编写、运行与调试,能够帮助团队构建更稳健的软件系统。

目录

  1. Python 自动化测试入门:编写与运行测试用例
  2. 1. 为什么需要自动化测试?
  3. 2. 用 Python 编写测试用例
  4. 3. 测试指导
  5. 4. 显示结果
  6. 5. 现代测试工具推荐
  7. 6. 总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 从 Copilot 到 Agentic:重构人×AI×流程的研发范式实践
  • 昇腾 NPU 运行 Llama 模型:环境搭建与性能测试
  • 本地化部署 GraphRAG+LangChain+Ollama 驱动 LLaMa 3.1 集成 Neo4j 实战
  • Flutter 使用 groq_sdk 实现鸿蒙端 AI 推理适配指南
  • OpenClaw 本地部署与飞书机器人接入指南
  • Ollama 结合 VSCode 插件实现本地代码生成与解释
  • SkyWalking 多语言探针现状:.NET、C++ 与 Lua 深度解析
  • PDFShuffler:开源免费的 PDF 文档整理工具
  • Python Collections 模块核心数据结构与工具详解
  • IDEA 插件 Trae AI 实战指南:从安装到进阶
  • IoTDB AINode 实战:SQL 原生时序 AI 建模与预测
  • MCP Document Reader:支持多格式文档解析的 AI 工具
  • Java在AI时代的崛起:从机器学习到AIGC全栈方案
  • Spring Boot 数据缓存与性能优化实战
  • C++ 面向对象编程核心:继承机制深度解析
  • Gemma 3 模型:Google 开源轻量级大语言模型深度解析
  • 基于 Docker 和 Ollama 的 DeepSeek 本地大模型部署指南
  • LeetCode 二叉树转字符串递归解法核心逻辑与代码
  • ComfyUI 入门:ControlNet 节点与预处理器使用指南
  • 为什么 Activity.finish() 之后 10s 才 onDestroy?源码深度解析

相关免费在线工具

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online