GitHub并行执行测试仅生成最后一个测试文件的Allure报告问题
解决GitHub Actions并行测试仅生成最后一个Allure报告的问题
问题原因
你当前的工作流存在两个核心问题:
- 每个矩阵Job是独立的运行环境,各自生成的
allure-report在上传Artifact时使用了相同名称report-${{ github.run_number }},后执行的Job会直接覆盖之前的报告文件。 - 每个Job仅针对单个测试文件生成报告,没有合并所有测试用例的结果数据。
修复方案
我们需要拆分流程:让每个测试Job单独生成并上传测试结果文件(不是最终报告),再新增一个Job收集所有结果文件,合并生成完整的Allure报告。
修改后的完整工作流
on: workflow_dispatch: jobs: build: runs-on: ubuntu-latest env: STAGE_USER_NAME: ${{ secrets.STAGE_USER__EMAIL}} STAGE_USER_PASSWORD: ${{ secrets.STAGE_USER_PASSWORD}} strategy: matrix: node-version: [18.14.0] test-file: - bprod.test.js - login.test.js - Facebook.test.js steps: - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} cache: 'npm' - run: npm install - name: Run tests and generate Allure results run: npx jest ${{ matrix.test-file }} --reporters default jest-allure --detectOpenHandles --forceExit --testTimeout=300000 --allure-results=allure-results-${{ matrix.test-file }} continue-on-error: true - name: Upload Allure results if: always() uses: actions/upload-artifact@v3 with: name: allure-results-${{ matrix.test-file }} path: allure-results-${{ matrix.test-file }} merge-report: runs-on: ubuntu-latest needs: build steps: - uses: actions/checkout@v3 - name: Use Node.js 18.14.0 uses: actions/setup-node@v3 with: node-version: 18.14.0 cache: 'npm' - run: npm install - name: Download all Allure results uses: actions/download-artifact@v3 with: path: allure-results-collection - name: Merge results into single directory run: | mkdir -p allure-results cp -r allure-results-collection/**/* allure-results/ - name: Generate full Allure report run: npm run alluregenerate - name: Upload final Allure report uses: actions/upload-artifact@v3 with: name: full-allure-report-${{ github.run_number }} path: allure-report
关键修改说明
- 独立结果目录:测试命令中添加
--allure-results=allure-results-${{ matrix.test-file }},让每个测试文件的结果存到专属目录,避免冲突。 - 上传结果而非报告:每个测试Job上传自己的结果目录,Artifact名称用测试文件名区分,确保不会被覆盖。
- 新增合并报告Job:
- 依赖
buildJob,确保所有测试完成后再执行。 - 下载所有测试结果到统一目录,合并到
allure-results。 - 基于合并后的结果生成完整报告,上传最终的合并报告Artifact。
- 依赖
内容的提问来源于stack exchange,提问作者Shadow Walker
相关产品推荐
相关产品推荐

