本文档概述了 Sherlock 项目中使用的测试框架。它涵盖了测试基础设施、测试类别、测试执行和持续集成设置。有关 CI/CD 流水线的信息,请参阅 持续集成。
Sherlock 采用了一套全面的测试框架,以确保代码库的可靠性和正确性。测试基础设施围绕 pytest 和 tox 构建,这使得测试可以在多个 Python 版本和操作系统上运行。
来源:tox.ini1-44 .github/workflows/regression.yml1-70
Tox 是管理测试环境的主要工具。它支持跨多个 Python 版本进行测试,并提供本地和 CI 中一致的测试执行。
Tox 配置包括
lint:使用 Ruff 进行代码质量检查offline:不需要互联网访问的测试来源:tox.ini1-44
Pytest 用于运行实际的测试用例。测试文件位于 tests/ 目录下,并遵循命名约定 test_*.py。
| 环境 | 命令 | 目的 |
|---|---|---|
| 标准 | coverage run --source=sherlock_project --module pytest -v | 运行所有测试并生成覆盖率报告 |
| 离线 | pytest -v -m "not online" | 仅运行不需要互联网的测试 |
| 代码检查 | ruff check | 检查代码质量 |
来源:tox.ini13-36
测试确保站点数据清单 (data.json) 符合模式定义。这至关重要,因为清单支持站点检查功能。
测试验证代码库和 CLI 输出中的版本信息是否一致。
测试使用 pytest 标记进行分类,以区分需要互联网连接的测试
来源:tests/test_manifest.py22-31
下图展示了 Sherlock 项目中的测试执行流程
来源:tox.ini13-22
sherlock_interactives.py 模块提供用于测试 CLI 交互和检查代码文件的工具
此类使测试能够
run_cli 方法)walk_sherlock_for_files_with 方法)来源:tests/sherlock_interactives.py1-38
该项目使用 GitHub Actions 进行持续集成,它会在拉取请求以及推送到 master 或 release 分支时自动运行测试。
CI 配置
来源:.github/workflows/regression.yml1-70
要在本地运行测试,您需要安装 tox
然后您可以运行各种测试命令
| 命令 | 目的 |
|---|---|
tox | 在所有 Python 版本上运行所有测试 |
tox -e py311 | 仅在 Python 3.11 上运行测试 |
tox -e lint | 仅运行代码检查 |
tox -e offline | 仅运行不需要互联网访问的测试 |
来源:tox.ini1-44
Sherlock 项目要求 Python 3.9 或更高版本。此要求在测试框架和主代码中均强制执行
来源:sherlock_project/__main__.py14-19
测试框架包括代码覆盖率测量,以确保 Sherlock 代码库的充分测试覆盖率。通过 tox 运行测试时会自动生成覆盖率报告。
来源:tox.ini15-22