菜单

测试框架

相关源文件

本文档概述了 Sherlock 项目中使用的测试框架。它涵盖了测试基础设施、测试类别、测试执行和持续集成设置。有关 CI/CD 流水线的信息,请参阅 持续集成

概述

Sherlock 采用了一套全面的测试框架,以确保代码库的可靠性和正确性。测试基础设施围绕 pytest 和 tox 构建,这使得测试可以在多个 Python 版本和操作系统上运行。

来源:tox.ini1-44 .github/workflows/regression.yml1-70

测试基础设施

Tox 配置

Tox 是管理测试环境的主要工具。它支持跨多个 Python 版本进行测试,并提供本地和 CI 中一致的测试执行。

Tox 配置包括

  • 支持 Python 版本 3.8-3.13
  • 所有测试的覆盖率报告
  • 专用环境
    • lint:使用 Ruff 进行代码质量检查
    • offline:不需要互联网访问的测试

来源:tox.ini1-44

Pytest 测试套件

Pytest 用于运行实际的测试用例。测试文件位于 tests/ 目录下,并遵循命名约定 test_*.py

环境命令目的
标准coverage run --source=sherlock_project --module pytest -v运行所有测试并生成覆盖率报告
离线pytest -v -m "not online"仅运行不需要互联网的测试
代码检查ruff check检查代码质量

来源:tox.ini13-36

测试类别

清单测试

测试确保站点数据清单 (data.json) 符合模式定义。这至关重要,因为清单支持站点检查功能。

来源:tests/test_manifest.py1-39

版本一致性测试

测试验证代码库和 CLI 输出中的版本信息是否一致。

来源:tests/test_version.py1-17

在线与离线测试

测试使用 pytest 标记进行分类,以区分需要互联网连接的测试

来源:tests/test_manifest.py22-31

测试执行流程

下图展示了 Sherlock 项目中的测试执行流程

来源:tox.ini13-22

交互式测试工具

sherlock_interactives.py 模块提供用于测试 CLI 交互和检查代码文件的工具

此类使测试能够

  1. 像普通用户一样运行 Sherlock CLI(run_cli 方法)
  2. 在 Sherlock 代码库文件中搜索模式(walk_sherlock_for_files_with 方法)

来源:tests/sherlock_interactives.py1-38

持续集成

该项目使用 GitHub Actions 进行持续集成,它会在拉取请求以及推送到 master 或 release 分支时自动运行测试。

CI 配置

  • 在推送到 master 和 release 分支以及相关的拉取请求时运行
  • 当 Python 文件、JSON 文件或配置文件更改时触发
  • 在 Ubuntu、Windows 和 macOS 上运行
  • 使用 Python 3.9, 3.10, 3.11 和 3.12 进行测试
  • 使用 tox-gh-actions 将 GitHub Actions Python 版本映射到 tox 环境

来源:.github/workflows/regression.yml1-70

在本地运行测试

要在本地运行测试,您需要安装 tox

然后您可以运行各种测试命令

命令目的
tox在所有 Python 版本上运行所有测试
tox -e py311仅在 Python 3.11 上运行测试
tox -e lint仅运行代码检查
tox -e offline仅运行不需要互联网访问的测试

来源:tox.ini1-44

Python 版本要求

Sherlock 项目要求 Python 3.9 或更高版本。此要求在测试框架和主代码中均强制执行

来源:sherlock_project/__main__.py14-19

测试代码覆盖率

测试框架包括代码覆盖率测量,以确保 Sherlock 代码库的充分测试覆盖率。通过 tox 运行测试时会自动生成覆盖率报告。

来源:tox.ini15-22