ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

如何为B2 Command Line Tool贡献代码:单元测试、集成测试与CI实践全解析

如何为B2 Command Line Tool贡献代码:单元测试、集成测试与CI实践全解析 如何为B2 Command Line Tool贡献代码单元测试、集成测试与CI实践全解析【免费下载链接】B2_Command_Line_ToolThe command-line tool that gives easy access to all of the capabilities of B2 Cloud Storage项目地址: https://gitcode.com/gh_mirrors/b2/B2_Command_Line_ToolB2 Command Line Tool 是 Backblaze 官方的 B2 云存储命令行工具提供桶管理、文件上传下载、同步等全部云存储能力。本文带你完整走通向该项目贡献代码的每一步从环境搭建、单元测试与集成测试的编写到 Changelog 规范和 CI持续集成是如何验证你的改动的一份面向新手的完整指南。1️⃣ 项目测试体系全景先搞懂三套防线在动手之前先了解这个项目的质量保障体系见 CONTRIBUTING.md防线工具覆盖内容 单元测试pytest 模拟后端不联网毫秒级验证各命令行为☁️ 集成测试pytest 生产云真实 B2 账号验证端到端流程 CI 流水线GitHub Actions多系统 × 多 Python 版本矩阵 构建 文档项目用nox统一管理开发会话、用uv管理依赖你不需要记住一堆零散命令一条nox命令搞定格式化、lint、测试、构建、文档。2️⃣ 一键搭建开发环境克隆仓库并安装依赖git clone https://gitcode.com/gh_mirrors/b2/B2_Command_Line_Tool cd B2_Command_Line_Tool pip install nox uv核心工具链就两个nox会话编排和uv依赖管理pyproject.toml定义依赖、uv.lock锁定版本。nox 会话速查表命令作用nox -s format用 ruff 格式化代码nox -s lint运行全部 linter含许可证检查、lock 文件校验nox -s unit-3.12跑指定 Python 版本的单元测试nox -s integration-3.12跑指定版本的集成测试nox -s test单元测试 集成测试全跑nox -s cover覆盖率分析低于 75% 会直接失败nox -s build/nox -s doc构建分发包 / 构建文档 想指定 Python 版本可设置环境变量NOX_PYTHONS3.12,3.13test会话会在这些版本上分别运行定义在noxfile.py。3️⃣ 单元测试不联网也能测云端工具单元测试目录在test/unit/其精髓在于用模拟后端替换真实 B2 服务test/unit/conftest.py中的mock_realm_urls会把服务地址替换成http://production.example.com的假地址全程不产生真实网络请求b2_clifixture 提供了ConsoleToolTester你可以直接像敲命令行一样在测试里执行b2 file upload ...然后断言标准输出的 JSON例如test/unit/console_tool/test_upload_file.py就是验证file upload各参数缓存控制、过期时间、自定义 file info是否被正确解析。新手上手建议复制一份test/unit/console_tool/下的现有测试文件改一个参数跑一遍nox -s unit-3.12 -- -k 你的测试名观察b2_cli.run([...], expected_json_in_stdout...)的写法照着模仿即可。另外项目支持多 CLI 版本b2v3、b2v4等位于b2/_internal/下用--cli参数切换测试目标版本apiver标记test/conftest.py可让测试只在特定版本运行——修改跨版本代码时注意加上。4️⃣ 集成测试真账号、真上传、真删除集成测试在test/integration/它会通过--sutSystem Under Test被测对象参数以子进程方式启动真实的b2可执行文件向生产环境发起请求export B2_TEST_APPLICATION_KEY你的密钥 export B2_TEST_APPLICATION_KEY_ID你的密钥ID nox -s integration-3.12关键细节需要你在 B2 控制台自行创建一个应用密钥测试桶名统一带clitst前缀需要密钥的测试打了require_secrets标记CI 中只在部分 Python 版本上运行以控制成本见.github/workflows/ci.ymltest/integration/cleanup_buckets.pynox -s cleanup_buckets用于清理之前测试遗留的桶。没有 B2 账号也别慌单元测试完全不需要密钥且 CI 会先跑不带密钥的集成测试子集你的本地闭环完全可以只靠nox -s unitnox -s lint。5️⃣ Lint 与覆盖率合并前的自检清单提交 PR 前建议依次执行nox -s format # 先自动修复格式问题 nox -s lint # ruff 静态测试(test/static) liccheck 许可证检查 uv lock 校验 nox -s unit # 单元测试自动带 --cov 覆盖率收集 nox -s cover # 覆盖率低于 75% 会报错退出两个容易踩的坑改动了pyproject.toml依赖必须用uv add/uv lock同步更新uv.lock否则lint里的uv lock --check会失败每个 PR 必须附带 Changelog在changelog.d/目录下新建文件修复某个 issue157.fixed.md无关 issuemy-fix.fixed.md类型支持 7 种fixed、changed、added、deprecated、removed、infrastructure、doc内容要求首字母大写、以句号结尾可用towncrier create命令辅助生成CI 会用nox -s towncrier_check严格校验命名与格式。6️⃣ CI 全景你的 PR 会经历什么完整流水线定义在.github/workflows/ci.yml按依赖顺序包含以下任务lint拼写检查codespell→nox -s lint→强制校验 PR 是否新增了 changelog 文件→towncrier_checkbuildnox -s build验证 Python 分发包可以正常构建cleanup_buckets清理历史集成测试桶test核心矩阵——4 种操作系统Ubuntu x86、Ubuntu ARM、macOS、Windows×6 种解释器Python 3.10~3.14 PyPy 3.10每个组合都跑单元测试 无密钥集成测试test-docker用docker/Dockerfile.template生成镜像验证容器内运行test-linux-bundle / test-windows-bundle用 PyInstaller 打包成单文件可执行Linux 再用 staticx 静态化并对打包产物跑集成测试doc用 Sphinx 构建文档任何文档错误都会使 CI 失败。也就是说你的一个小改动会在 20 种系统 × 语言组合、以及源码模式/二进制/Docker 三种形态下被验证——这就是这个项目的贡献门槛也是它稳定性的来源。7️⃣ 提交 PR 前的终极检查清单✅nox -s format nox -s lint无报错 ✅nox -s unit全部通过nox -s cover覆盖率 ≥ 75% ✅changelog.d/中已添加符合命名规范的变更记录 ✅ 涉及依赖变更时uv.lock已用uv lock更新 ✅ 跨 CLI 版本改动已用--cli参数验证过各版本 ✅ 本地有条件时跑一次nox -s integration真实云验证写在最后B2 Command Line Tool 的测试与 CI 实践是 Python CLI 项目的优秀范本nox 统一入口、uv 锁定依赖、单元测试模拟云端、集成测试打通真云、矩阵式 CI 覆盖三形态。新手不必一步到位建议从修一个小 bug 补一个单元测试 加一条 changelog开始你的第一次贡献跑通nox -s lint与nox -s unit两条命令你就已经跨过了最关键的门槛。祝提交顺利【免费下载链接】B2_Command_Line_ToolThe command-line tool that gives easy access to all of the capabilities of B2 Cloud Storage项目地址: https://gitcode.com/gh_mirrors/b2/B2_Command_Line_Tool创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表