尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Roadmapper 路线图生成库测试与发布体系拆解:跨 3 平台图像对比测试 + 语义化版本自动化实战指南

Roadmapper 路线图生成库测试与发布体系拆解:跨 3 平台图像对比测试 + 语义化版本自动化实战指南 Roadmapper 路线图生成库测试与发布体系拆解跨 3 平台图像对比测试 语义化版本自动化实战指南【免费下载链接】roadmapperRoadmapper - A Roadmap as Code (Rac) python library. Generate professional roadmap diagram using python code.项目地址: https://gitcode.com/gh_mirrors/ro/roadmapperRoadmapper 是一个路线图即代码Roadmap as Code的 Python 开源库用几行 Python 代码就能生成专业的产品路线图。但对一个画图片的库来说光跑通函数还不够——不同操作系统的字体渲染会画出像素级差异的图片。本文完整拆解 Roadmapper 的测试与发布体系如何在 Ubuntu、macOS、Windows 三个平台做路线图图像对比测试以及如何用 3 个 CI 脚本实现语义化版本SemVer自动化升级适合刚接手开源项目的同学快速上手。为什么路线图库需要跨平台图像测试传统库测试的是返回值对不对而 Roadmapper 的输出是PNG/SVG 图片。同一个绘制代码在 macOS 上字体偏粗、在 Windows 上文字偏移 1 像素人眼几乎看不出但对用户来说就是版本更新后图变了。因此项目采用像素级图像对比策略每个平台维护一组基准图example roadmaps存放在 src/tests/example_roadmaps/CI 构建节点用最新代码重新生成路线图再用 Pillow 的ImageChops.difference与基准图逐像素比对只要有任何差异就生成 diff 图并让测试失败同时把生成图和 diff 图打包成构建工件方便开发者下载排查。核心逻辑在 src/tests/compare_generated_roadmaps_test.pytest_diff ImageChops.difference(example_roadmap, generated_roadmap) if test_diff.getbbox(): handle_difference(test_diff, roadmap_class_to_test, operating_system) assert False下图就是 macOS 平台的一组基准图之一彩色主题扩展测试三平台测试如何运行pytest 标记 参数化这套测试的骨架非常轻巧靠三个机制拼起来pytest 标记在 pyproject.toml 中注册了unit、ubuntu、macos、windows四个 marker平台相关的测试只在对应构建节点上执行本地 Windows 机器不会跑 macOS 用例fixture 注入平台名src/tests/conftest.py 提供operating_system_ubuntu、operating_system_macos、operating_system_windows三个会话级 fixture把平台名作为字符串传给测试参数化测试用例src/tests/compare_generated_roadmaps_test.py 用pytest.mark.parametrize一次覆盖 3 个路线图生成器ColourThemeExtensive、ColourTheme、MilestoneTextAlignment× 3 个平台共 9 组对比。每个生成器都是一个类如 src/tests/roadmap_generators/colour_theme.py约定好怎么画 存到哪里文件命名规则为类名 平台名 Example.png例如基准图过时了怎么办大多数代码改动不应该改变路线图外观但如果某次改动有意改变了绘制效果比如新增圆角任务条就要在三台构建节点上重新生成基准图。项目提供了手动触发的generate_examples工作流在 Actions 里选择目标分支运行产物会以工件形式挂在运行记录上下载后提交到 src/tests/example_roadmaps/ 即可完整流程见开发指南 DEVELOPING.md。缺陷回归测试每个 Issue 一张图图形库的 bug 往往一眼可见所以项目把缺陷修复也变成了可复现的回归用例。src/tests/test_defects.py 中每个历史 Issue 对应一个测试函数用触发 bug 的最小代码重新绘制路线图并保存例如 Issue #106 的周视图缺陷这种一张图锁住一个 bug的做法让后续任何一次误伤都逃不过 CI——图片一变测试立刻红灯。语义化版本自动化3 个 CI 脚本各司其职版本号是发布流程中最容易手滑的环节。Roadmapper 在 ci/ 目录下用 3 个小脚本实现了完整的 SemVer 自动化脚本职责ci/version_retriever.py从 src/roadmapper/version.py 读取当前__version__当前为 1.5.5ci/version_determiner.py按MAJOR/MINOR/PATCH规则计算新版本号、版本标签和 SNAPSHOT 号ci/version_writer.py把 src/roadmapper/version.py 中的旧版本号原地替换为新版本号几个值得借鉴的细节版本定义是唯一源头pyproject.toml 通过dynamic [version]attr roadmapper.version.__version__声明版本从version.py动态读取打包时永远不用改两份文件严格的 SemVer 正则version_determiner.py使用 semver.org 官方推荐的正则解析版本号连预发布后缀如-rc.1都能识别智能的 PATCH 规则如果当前版本本身带预发布后缀如1.5.6-rc.1PATCH升级就直接取1.5.6而非跳到1.5.7避免预发布版本吃掉一个正式 patch 号一个入口三种产物同一脚本支持输出release-version如1.6.0、version-tag如v1.6.0、snapshot-version如1.6.1-SNAPSHOTCI 工作流按需调用。下图是 Roadmapper 生成的一条完整路线图正是这些版本所交付的能力打包与发布twine 检查 一键上传版本号写入后剩下就是标准的 PyPI 发布两步曲项目用两个批处理脚本固化了流程质量检查2. test-dist.bat 执行twine check dist/*校验元数据与 README 渲染有警告就不让发正式上传3. deploy-dist.bat 执行py -m twine upload dist/*将 wheel/sdist 推送到 PyPI。依赖声明同样收敛在 pyproject.toml 中Pillow、python-dateutil、drawsvg要求 Python 3.10。若需要克隆仓库参与贡献仓库地址为 https://gitcode.com/gh_mirrors/ro/roadmapper 。总结可复用的 3 个实践像素级对比测试图形类项目用基准图 自动 diff替代肉眼验收让渲染回归变成红灯测试一图一缺陷为每个历史 bug 保留最小复现代码和输出图修复可长期追溯版本单源 脚本化升级version.py唯一版本源 retriever/determiner/writer 三脚本流水线发布时零手工改号。这套测试保渲染、脚本保版本的组合拳正是 Roadmapper 作为路线图生成库能稳定迭代到 1.5.x 的底气也值得所有做可视化输出的开源项目参考。【免费下载链接】roadmapperRoadmapper - A Roadmap as Code (Rac) python library. Generate professional roadmap diagram using python code.项目地址: https://gitcode.com/gh_mirrors/ro/roadmapper创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表