如何在GitHub Actions中使用parallel_tests运行测试套件
GitHub Action 配置 parallel_tests 运行测试套件方案
核心逻辑是复用GitHub Action自带的matrix并行构建能力,给每个并行节点传入对应的分片参数,即可实现和GitLab CI一致的分布式并行测试效果,完整配置参考如下:
1. 定义并行构建矩阵
在你的GitHub Action workflow文件中配置测试job的并行策略,示例为启动4个并行测试节点:
jobs: run-test-suite: runs-on: ubuntu-latest strategy: fail-fast: false matrix: ci_node_total: [4] ci_node_index: [0, 1, 2, 3]
参数说明:
fail-fast: false可避免单个节点测试失败就终止其他节点的测试任务,方便一次性查看所有测试结果ci_node_total为并行节点总数量,可根据你的测试用例规模调整ci_node_index为每个节点的唯一编号,从0开始计数
2. 配置测试执行步骤
在测试执行步骤中把矩阵参数传入parallel_tests命令即可:
steps: # 此处省略代码拉取、Ruby环境配置、依赖安装、数据库初始化等前置步骤 - name: 执行并行测试 env: CI_NODE_TOTAL: ${{ matrix.ci_node_total }} CI_NODE_INDEX: ${{ matrix.ci_node_index }} run: | # RSpec测试框架使用该命令 bundle exec parallel_rspec ./spec -n $CI_NODE_TOTAL --only-group $((CI_NODE_INDEX + 1)) # Minitest测试框架使用该命令 # bundle exec parallel_test ./test -n $CI_NODE_TOTAL --only-group $((CI_NODE_INDEX + 1))
注意:parallel_tests的分组编号从1开始计数,而GitHub matrix的ci_node_index从0开始,所以需要做加1处理。
3. 可选优化:测试时长自动均衡分片
如果要让不同节点的测试执行时长更均匀,减少整体等待时间,可以按如下操作配置:
- 本地执行
bundle exec parallel_rspec --record-runtime ./spec生成测试运行时长记录文件 - 将生成的
tmp/parallel_runtime_rspec.log提交到代码仓库 - 修改测试执行命令,添加时长文件参数:
bundle exec parallel_rspec ./spec -n $CI_NODE_TOTAL --only-group $((CI_NODE_INDEX + 1)) --runtime-log tmp/parallel_runtime_rspec.log
常见适配问题
- Rails项目注意每个并行节点需要独立初始化数据库,使用
bundle exec rails parallel:prepare代替默认的数据库初始化命令即可 - 如果测试过程中出现端口冲突,可配置
PARALLEL_TEST_FIRST_PORT环境变量自定义首个节点的端口偏移量
内容的提问来源于stack exchange,提问作者anonymous
相关产品推荐
相关产品推荐

