Python doctest模块详解:基于文档字符串的自动化测试

Noah
Noah
发布时间:2026-10-13| 6人浏览过
原创

本文详解Python内置doctest模块的使用方法。通过扫描模块内的文档字符串并执行其中的示例代码,doctest能够验证代码输出是否与文档一致。文章包含average函数的完整测试代码及运行结果分析,展示如何配置verbose参数以查看详细测试报告,帮助开发者快速掌握基于文档的自动化测试技巧。

doctest模块概述与核心价值

在面试中遇到未实际使用过的技术点往往令人尴尬,doctest模块便是其中之一。经过实际查阅与测试,发现该模块的使用逻辑非常直观且简单。

为便于理解,此处直接引用菜鸟教程中的相关介绍与示例进行说明。

开发高质量软件的关键方法之一,是为每个函数编写测试代码,并在开发过程中频繁执行这些测试。

doctest模块提供了一个实用工具,用于扫描Python模块,并根据模块中内嵌的文档字符串(docstrings)自动执行测试用例。

测试用例的构建方式类似于将实际的输出结果直接剪切并粘贴到文档字符串中,形成“期望输出”与“实际输出”的对照。

通过用户提供的具体示例,doctest强化了文档的可执行性,并允许模块确认代码的实际运行结果是否与文档描述保持一致。

doctest代码实现与配置


def average(values):
  """Computes the arithmetic mean of a list of numbers.

  >>> print(average([20, 30, 70]))
  40.0
  """
  return sum(values) / len(values)

import doctest
doctest.testmod(verbose=True)  # doctest.testmod是测试模块,verbose默认是False,意思是出错才用提示;True,对错都有执行结果

需要注意代码格式规范,上述代码示例中的第三行必须是一个空行,以符合文档字符串的语法要求。

需注意:在Python 3中,除法运算默认返回浮点数结果,即使结果是整数。

以下是测试执行后的具体输出结果。

测试结果分析与注意事项


Trying:
  print(average([20, 30, 70]))
Expecting:
  40.0
ok
Trying:
  print(average([90, 40, 20]))
Expecting:
  50.0
ok
1 items had no tests:
  __main__
1 items passed all tests:
  2 tests in __main__.average
2 tests in 2 items.
2 passed and 0 failed.
Test passed.
[Finished in 0.5s]

从输出可以看到,代码共16行,其中包含的两个测试用例均通过验证。

以上即为关于Python doctest模块的核心内容,希望这对大家的学习有所帮助,也欢迎继续支持本站获取更多技术资源。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。