ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

dots测试与发布实践:单元测试、pin守护测试与pre-push钩子门禁完整清单

dots测试与发布实践:单元测试、pin守护测试与pre-push钩子门禁完整清单 dots测试与发布实践单元测试、pin守护测试与pre-push钩子门禁完整清单【免费下载链接】dotsOpen-source dots for the web: an AI agent with its own browser, one that does not get blocked.项目地址: https://gitcode.com/gh_mirrors/dots140/dotsdots 是一个把 AI agent 装进真实 Firefox 浏览器的开源项目MIT 协议它本身只有 3 个源码文件却配了一整套严肃的测试与发布门禁4 个 pytest 用例、一条“精确 pin 的依赖守护测试”、一个 pre-push 钩子门禁外加 CI 矩阵复核。对新手来说这套结构是理解“如何用最小代码量守住发布质量”的绝佳样本。 一、测试基座两个 marker 划清边界pytest 的配置直接写在 pyproject.toml 里用两个 marker 把用例分成两类Marker含义unit纯逻辑——无 I/O、无网络、无子进程、无浏览器integration在子进程里跑真实命令——依然不碰网络和浏览器配合--strict-markers保证没人能偷偷漏打标pythonpath [src]让测试直接指向 src/dots 源码包。 二、4 个测试用例各守一道门全部用例集中在 tests/test_entry.py一个文件讲完整个守护逻辑参数前置正确unittest_the_group_is_called_with_ui_in_front 用 monkeypatch 替换底层命令组断言dots --port 9000 --headed最终变成ui --port 9000 --headed且程序名仍是dots。为什么必须经过命令“组”而不是直接调ui因为.env里的密钥是在组那一层读取的绕过去就会悄悄失效。help 即接口integrationtest_help_is_the_interface_help 在干净环境里真跑python -m dots --help确认--openrouter-key、--seed、--proxy等选项都在——用户看到的帮助页就是产品的真实接口。没密钥就拒启动integrationtest_without_a_key_it_refuses_before_starting_anything 验证无 key 时程序立刻报错而不是先起浏览器再尴尬失败。pin 守护unit见下一节。 三、pin 守护测试依赖悄悄换货怎么办pyproject.toml 里有句狠话“整个产品就是这一行”——invisible-playwright-mcp0.70.2。浏览器循环、页面、命令组全部来自这个包而它提供的命令组不是公开 API所以依赖必须用精确 pin 而非下限版本只能人为升级绝不让 resolver 顺手拉新。守护它的就是 test_the_installed_package_is_the_pinned_one读出 pyproject 里 pin 的版本号再查环境中实际安装的版本两者不一致立刻红灯。注释还点出另一种偷渡方式——把兄弟目录的 editable 安装装进来会让前面所有测试“测错对象”而这个用例能直接识破。升级流程一句话改 pin → 跑 tests/test_entry.py → 全绿才合入。 四、pre-push 钩子门禁薄脚本厚策略.githooks/pre-push 只有 55 行且策略不写在钩子里脚本唯一职责是找到 Python 解释器然后exec交给invisible_core.hooks随 pin 的包一起进来执行检查stdingit 推送的 refs原样透传本仓库要开哪些门禁声明在 pyproject.toml 的[tool.invisible.hooks]pytest true、english true英文行文检查、identity true身份信息一致性pin false且release_tags []——因为本仓库不发布 release tag找不到 Python 或导入失败时钩子拒绝推送并给出可读的报错而不是静默放行——“不能检查就不能推送”。安装一次即可忘记也没关系git config core.hooksPath .githooks唯一逃生门是git push --no-verify只给“已知坏掉的 WIP 分支”用发布分支禁用。另外 .gitattributes 强制.githooks/**保持 LF专治 Windows 上 CRLF 导致的/bin/sh^M: bad interpreter。️ 五、第二道防线CI 矩阵与 gate 汇总.github/workflows/tests.yml 在每次 push / PR 时再跑一遍Job作用english/claims校验文档行文与 README 的承诺不夸大unit矩阵Ubuntu × Python 3.11/3.12/3.13 Windows × 3.12与requires-python 3.11的承诺对齐见 矩阵定义gate依赖全部 job且只接受 success任何 skipped 都算失败gate 汇总细节值得抄作业pytest 后还会解析报告通过的用例少于 4 个直接判负——防止“筛选条件写错导致 0 个用例运行”被误当成全绿拒自我 deselection。 六、测试与发布完整清单层级检查项位置本地开发2 个 unit 2 个 integration 用例tests/test_entry.py本地开发依赖 pin 版本一致性pyproject.tomlpre-push 钩子pytest / english / identity.githooks/pre-push 钩子开关CI英文行文、claims、双 OS 多版本矩阵.github/workflows/tests.ymlCIgate 汇总skip 即失败gate job发布策略精确 pin 手动升级无 release tagpyproject.toml 七、三步在本地跑起来git clone https://gitcode.com/gh_mirrors/dots140/dots cd dots pip install -e .[dev] # dev 依赖仅 pytest7 pytest tests/ -v # 预期4 passed git config core.hooksPath .githooks # 装上门禁小结dots 给出的方法论非常清晰测试不追求多而追求每个用例都有明确要守的东西参数前置、help 即接口、缺 key 即拒、pin 一致钩子脚本保持薄策略下沉为可共享的包本地门禁 CI 矩阵双保险连“0 个用例运行”这种隐性失败都防住了。小项目完全可以照单复制这套骨架。【免费下载链接】dotsOpen-source dots for the web: an AI agent with its own browser, one that does not get blocked.项目地址: https://gitcode.com/gh_mirrors/dots140/dots创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表