从零到一:GitHub Actions 集成 Allure 报告与飞书通知完整指南

396 阅读3分钟

引言

在持续集成(CI)流程中,自动化测试与即时通知是提升团队效率的关键。本文将手把手教你如何为 Python 项目配置 GitHub Actions,实现测试报告自动生成(Allure)、结果推送至飞书,并解决配置过程中的典型错误。


整体架构

  • GitHub Actions 执行自动化测试:

    • 使用 GitHub Actions 编写 CI 配置文件(workflow.yml),将自动化测试任务与 Allure 报告生成和飞书通知集成在一起。
    • GitHub Actions 触发时,会启动相应的工作流,执行预定义的任务,如构建、测试、报告生成等。
  • 执行自动化测试并生成 Allure 报告

    • 在 GitHub Actions 中,执行自动化测试(例如使用 pytest 等框架),并将结果存储到一个特定的文件中。
    • 使用 Allure 命令生成测试报告。通常使用 Allure 的 allure 工具将测试结果转换为 Allure 格式,并生成 HTML 报告。
  • 上传 Allure 报告到 Artifacts 或静态文件服务器

    • 可以将生成的 Allure 报告文件上传到 GitHub Actions 的 Artifacts 中,或上传到一个静态文件服务器,以便团队成员可以访问。
  • 集成飞书通知

    • 利用飞书的 Webhook API,将测试结果发送到指定的飞书群聊。
    • 可以根据不同的测试结果(如通过、失败、或异常)定制消息内容,使用 GitHub Actions 的 curl 或飞书专用的 GitHub Actions 插件来推送通知。

核心功能

  1. 自动化测试:单元测试 + API 测试
  2. 报告生成:Allure 测试报告自动归档
  3. 智能通知:飞书机器人推送测试结果
  4. 安全部署:GitHub Pages 托管报告

快速配置

1. 基础工作流模板

name: Python CI

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]
  workflow_dispatch:

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: "3.9"
      - run: pip install -r requirements.txt
      - run: pytest --alluredir=./allure-results

关键模块详解

2. Allure 报告集成

2.1 安装 Allure CLI

- name: Install Allure
  run: |
    sudo apt-get install -y openjdk-11-jre
    ALLURE_VERSION=2.32.2
    curl -LO https://github.com/allure-framework/allure2/releases/download/$ALLURE_VERSION/allure-$ALLURE_VERSION.tgz
    tar -zxvf allure-$ALLURE_VERSION.tgz
    sudo mv allure-$ALLURE_VERSION /opt/allure
    sudo ln -sf /opt/allure/bin/allure /usr/bin/allure

2.2 生成并部署报告

- name: Generate Report
  run: allure generate allure-results -o allure-report --clean

- name: Deploy to GitHub Pages
  uses: peaceiris/actions-gh-pages@v3
  with:
    github_token: ${{ secrets.GITHUB_TOKEN }}
    publish_dir: ./allure-report

2.3 启用 GitHub Pages

  1. 仓库 Settings → Pages → Branch: gh-pages, Path: /
  2. 访问地址:https://<用户名>.github.io/<仓库名>/

image.png


3. 飞书通知集成

3.1 创建飞书机器人

  1. 进入飞书群组 → 添加「自定义机器人」→ 获取 Webhook URL
  2. 配置 GitHub Secrets:FEISHU_WEBHOOK_URL

image.png

3.2 消息模板配置


- name: Notify Feishu
  if: always()
  env:
    FEISHU_WEBHOOK: ${{ secrets.FEISHU_WEBHOOK_URL }}
    RUN_URL: "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
    REPORT_URL: "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}/artifacts/${{ steps.upload.outputs.artifact-id }}"
    REPORT_URL_1: https://<用户名>.github.io/<仓库名>/
    BRANCH_OR_PR: "${{ github.event_name == 'pull_request' && format('PR #{0}', github.event.number) || github.ref_name }}"
    NOTIFICATION_TITLE: "${{ job.status == 'success' && '✅ 测试通过' || '❌ 测试失败' }}"
    TEMPLATE_COLOR: "${{ job.status == 'success' && 'green' || 'red' }}"
  run: |
    MESSAGE='{
      "msg_type": "interactive",
      "card": {
        "header": {
          "title": {
            "content": "${{ env.NOTIFICATION_TITLE }}",
            "tag": "plain_text"
          },
          "template": "${{ env.TEMPLATE_COLOR }}"
        },
        "elements": [
          {
            "tag": "div",
            "text": {
              "content": "📊 **测试结果通知**\n\n🚀 工作流: ${{ github.workflow }}\n📂 分支/PR: ${{ env.BRANCH_OR_PR }}\n👤 触发者: ${{ github.actor }}\n🔄 运行ID: ${{ github.run_id }}\n✅ 状态: ${{ job.status }}",
              "tag": "lark_md"
            }
          },
          {
            "tag": "action",
            "actions": [
              {
                "tag": "button",
                "text": {
                  "content": "查看测试报告",
                  "tag": "plain_text"
                },
                "url": "${{ env.REPORT_URL_1 }}",
                "type": "primary"
              }
            ]
          }
        ]
      }
    }'
    curl -X POST "$FEISHU_WEBHOOK" -H "Content-Type: application/json" -d "$MESSAGE"

典型错误与修复

错误 1:表达式未闭合

Invalid workflow file: Unexpected value 'retry-on-error'

原因:YAML 中的 ${{ }} 表达式引号转义错误
修复:将复杂逻辑提取到 env 变量:

env:
  NOTIFICATION_TITLE: ${{ job.status == 'success' && '✅ 测试通过' || '❌ 测试失败' }}

错误 2:飞书消息链接无效

{"code":9499,"msg":"Bad Request"}

原因:JSON 格式错误或 URL 未转义
修复

  1. 使用按钮替代 Markdown 链接
  2. 确保 URL 可公开访问(GitHub Pages)

错误 3:Allure 报告无法访问

404 No such file or directory

原因:未正确部署到 gh-pages 分支
修复

  1. 检查 GitHub Pages 配置
  2. 验证 publish_dir 路径是否包含 index.html

最佳实践

1. 依赖加速

- name: Cache dependencies
  uses: actions/cache@v4
  with:
    path: ~/.cache/pip
    key: ${{ runner.os }}-pip-${{ hashFiles('requirements.txt') }}

2. 安全增强

  • 主分支启用 Code Review
  • 敏感信息(如 Webhook URL)通过 Secrets 管理

3. 通知优化

  • 添加失败重试机制
- name: Notify Feishu
  retries: 2
  timeout-minutes: 3

效果展示

image.png


结语

通过本文的配置,你的项目将具备自动化测试、报告生成和实时通知能力。完整代码示例可在 GitHub 仓库 查看。如有疑问,欢迎在评论区交流!

扩展阅读


标签#持续集成 #自动化测试 #GitHub Actions