ARTICLE DETAIL

资讯详情

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

如何只跑几个失败的用例?test-queue 的 TEST_QUEUE_FORCE 精确定位调试技巧

如何只跑几个失败的用例?test-queue 的 TEST_QUEUE_FORCE 精确定位调试技巧 如何只跑几个失败的用例test-queue 的 TEST_QUEUE_FORCE 精确定位调试技巧【免费下载链接】test-queueparallel test runner for CI environments项目地址: https://gitcode.com/gh_mirrors/te/test-queueCI 里跑完几百个测试只有几个失败难道要再等一轮全量test-queue 这款专为 CI 环境设计的 Ruby 并行测试运行器parallel test runner提供了一个常被忽略的环境变量TEST_QUEUE_FORCE帮你只重跑指定的失败用例。本文带新手用 3 步掌握这个精确定位调试技巧把排查失败用例的等待时间压缩到最短 ⚡。test-queue 是什么为 CI 优化的并行测试运行器test-queue 采用master worker 中央队列模型master 进程通过 Unix socket 分发测试套件各 worker 按速度取活干自动避免长尾任务拖垮整体的经典问题─┬─ 21232 minitest-queue master ├─── 21571 minitest-queue worker [3] - AuthenticationTest ├─── 21568 minitest-queue worker [2] - ApiTest └─── 21562 minitest-queue worker [0] - UserTest它还为 CI 做了针对性优化每次运行的耗时统计会缓存到本地默认.test_queue_stats文件下次运行时按历史耗时从长到短排序入队让整体完成时间更短。test-queue 内置了四个可直接使用的命令行入口覆盖主流 Ruby 测试框架命令适用框架minitest-queueMinitest5 / 6rspec-queueRSpec 3 / 4testunit-queueTest::Unitcucumber-queueCucumber调试痛点失败用例一多CI 反馈周期就被拉长了全量跑一轮可能只要几分钟但问题在于每次验证一个修复都要再等一轮全量。如果失败的只是 3 个用例你真正需要的只是一条精准通道。TEST_QUEUE_FORCE就是这条通道。根据项目 README 中的说明它的定义非常简洁TEST_QUEUE_FORCE: Comma separated list of suites to run以逗号分隔的、需要运行的套件列表也就是说设置了它之后只有列表里点名的套件会被执行其他全部跳过——一个白名单式的过滤器。TEST_QUEUE_FORCE 的工作原理白名单 保序 快速失败核心逻辑在 lib/test_queue/runner.rb 中可以归纳为三点解析白名单把逗号分隔的字符串拆成套件名列表支持逗号两边带空格过滤 保序默认队列按历史耗时倒序排列为了并行效率但一旦设置了TEST_QUEUE_FORCE队列会被过滤为只保留白名单内的套件并按你写的顺序执行——调试时你能稳定复现输出顺序快速失败如果列表里写了某个不存在的套件名master 会直接报错退出Failed to discover DoesNotExist specified in TEST_QUEUE_FORCE这其实是个防呆设计套件名拼错时你不会得到安静地什么都没跑而是立即收到明确的错误提示。最快调试方法三步精确定位失败用例下面是最常用的调试工作流以 RSpec 为例Minitest / TestUnit / Cucumber 同理第 1 步从失败输出中找到套件名如果 CI 日志里输出杂乱可以加上TEST_QUEUE_VERBOSE1让结果一产生就打印方便快速定位失败的是哪个套件$ TEST_QUEUE_VERBOSE1 bundle exec rspec-queue spec第 2 步把失败套件名填入 TEST_QUEUE_FORCE多个套件用英文逗号分隔不要带引号以外的多余空格$ TEST_QUEUE_FORCEUserTest,OrderService::test_charge bundle exec rspec-queue spec第 3 步单 worker 顺序执行稳定复现调试阶段建议把 worker 数设为 1让输出按你指定的顺序依次打印便于阅读$ TEST_QUEUE_WORKERS1 TEST_QUEUE_FORCEUserTest bundle exec rspec-queue spec✅ 修复验证通过后去掉TEST_QUEUE_FORCE跑一次全量确保没有回归然后提交代码。各框架的套件名怎么填一张表看懂TEST_QUEUE_FORCE匹配的是套件名而不是文件路径不同框架的名字来源不同框架套件名是什么示例Minitest / TestUnit测试类名UserTestRSpecExample Group 的完整描述命名空间 描述Meme::when asked about cheeseburgersCucumberFeature 的标题login RSpec 用户进阶技巧默认情况下 RSpec 的调度粒度是整个 Example Group。如果你只想跑某一个 group 里的单条 example可以设置TEST_QUEUE_SPLIT_GROUPStruetest-queue 会把测试拆分到 example 级别入队对 setup 较短的测试提速明显不想要被拆分的 group 可以加:no_split标签。相关实现在 lib/test_queue/runner/rspec.rb 的split_groups方法中。常见误区调试时踩过的 3 个坑坑 1把文件路径当套件名# ❌ 错误这是文件路径不是套件名 $ TEST_QUEUE_FORCEtest/models/user_test.rb bundle exec minitest-queue test/ # ✅ 正确写测试类名 $ TEST_QUEUE_FORCEUserTest bundle exec minitest-queue test/写错了不会静默跳过而是直接报Failed to discover ... specified in TEST_QUEUE_FORCE照着提示修正即可。坑 2忘记英文逗号分隔符必须是英文逗号多个套件写成UserTest,OrderTest中文逗号会导致整个列表被当成一个不存在的套件名。坑 3多 worker 下顺序不稳定TEST_QUEUE_FORCE会按书写顺序入队但如果开了多个 worker输出仍可能交错。调试阶段记得配合TEST_QUEUE_WORKERS1这也是项目自身测试的写法可参考 test/minitest5.bats 中TEST_QUEUE_FORCE的行为测试。小结把等待时间花在刀刃上TEST_QUEUE_FORCE是 test-queue 提供的套件级白名单只跑你点名的测试搭配TEST_QUEUE_VERBOSE1定位失败套件搭配TEST_QUEUE_WORKERS1稳定复现套件名按框架规则填写Minitest 填类名RSpec 填完整描述Cucumber 填 feature 标题。想了解完整的环境变量列表如TEST_QUEUE_WORKERS、TEST_QUEUE_STATS、分布式模式的TEST_QUEUE_RELAY等请查看 README.md 的 Environment variables 章节白名单的完整实现可阅读 lib/test_queue/runner.rbworker 从队列拉取任务的逻辑在 lib/test_queue/iterator.rb。掌握TEST_QUEUE_FORCE之后CI 里改一行 → 全量重跑十分钟的循环就会变成改一行 → 三秒看到结果 。【免费下载链接】test-queueparallel test runner for CI environments项目地址: https://gitcode.com/gh_mirrors/te/test-queue创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表