一、接口自动化测试的核心目标
- 验证主流程接口:确保核心业务链路(如登录、下单、支付)的接口功能正常。
- 环境适配性检查:验证新环境(如预发布环境、生产环境)的配置正确性。
- 快速反馈:在部署后立即执行测试,10 分钟内发现问题。
二、完整工作流程设计
graph TD
A[代码合并到主分支] --> B[触发 CI 测试]
B --> C{测试通过?}
C -->|是| D[构建镜像/包]
D --> E[部署到新环境]
E --> F[触发接口自动化测试]
F --> G{测试通过?}
G -->|是| H[通知部署成功]
G -->|否| I[回滚并告警]
流程说明
- 代码合并阶段:运行单元测试和基础接口测试(验证代码逻辑)。
- 部署后阶段:在新环境部署完成后,运行完整的接口自动化测试(验证环境适配性)。
三、GitHub Actions 集成方案
在 .github/workflows
目录下创建两个工作流文件:
1. ci.yml
:持续集成工作流(代码变更时触发)
yaml
name: CI Pipeline
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
unit-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 tests/unit/ -v # 运行单元测试
basic-api-test:
needs: unit-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 tests/api/basic/ -v # 运行基础接口测试
env:
API_BASE_URL: ${{ secrets.DEV_API_URL }} # 使用开发环境
2. deploy-verify.yml
:部署验证工作流(部署后手动/自动触发)
yaml
name: Post-Deploy Verification
on:
workflow_dispatch: # 手动触发
inputs:
environment:
description: '目标环境 (staging/prod)'
required: true
default: 'staging'
# 或者通过部署完成后的 Webhook 自动触发
jobs:
full-api-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
- name: Run Full API Tests
run: pytest tests/api/full/ -v --alluredir=./reports
env:
API_BASE_URL: ${{
inputs.environment == 'prod'
&& secrets.PROD_API_URL
|| secrets.STAGING_API_URL
}} # 根据输入参数切换环境
- uses: actions/upload-artifact@v4
if: always()
with:
name: allure-report
path: ./reports
- uses: actions/slack-notify@v1 # 发送 Slack 通知
if: failure()
with:
status: ${{ job.status }}
webhook: ${{ secrets.SLACK_WEBHOOK }}
四、关键配置说明
1. 环境变量管理
- GitHub Secrets :在仓库的
Settings -> Secrets
中配置:DEV_API_URL
:开发环境地址STAGING_API_URL
:预发布环境地址PROD_API_URL
:生产环境地址SLACK_WEBHOOK
:Slack 通知的 Webhook
2. 测试用例组织
bash
tests/
├── api/
│ ├── basic/ # 基础测试(快速验证)
│ │ └── test_login.py
│ └── full/ # 完整测试(部署后运行)
│ ├── test_order.py
│ └── test_payment.py
└── unit/
└── test_models.py
3. 测试代码示例
python
# tests/api/full/test_order.py
import os
import pytest
from utils.http_client import HTTPClient
API_BASE_URL = os.getenv("API_BASE_URL") # 从环境变量读取
class TestOrder:
@pytest.fixture(scope="class")
def client(self):
return HTTPClient(base_url=API_BASE_URL)
def test_create_order(self, client):
"""测试创建订单全流程"""
# 1. 登录
login_resp = client.post("/login", json={"user": "admin", "pwd": "123456"})
assert login_resp.status_code == 200
# 2. 创建订单
order_resp = client.post("/orders", json={"product_id": 1001})
assert order_resp.status_code == 201
assert "order_id" in order_resp.json()
# 3. 验证订单状态
order_id = order_resp.json()["order_id"]
status_resp = client.get(f"/orders/{order_id}")
assert status_resp.json()["status"] == "pending"
五、触发逻辑
-
运维部署新环境时触发:
-
方式 1 :在部署脚本的最后调用 GitHub Actions 的 API:
bashcurl -X POST https://api.github.com/repos/{owner}/{repo}/actions/workflows/deploy-verify.yml/dispatches \ -H "Authorization: Bearer $GITHUB_TOKEN" \ -d '{"ref":"main", "inputs":{"environment":"staging"}}'
-
方式 2:在部署工具(如 Jenkins、ArgoCD)中配置 Webhook。
-
-
手动触发 :在 GitHub UI 中点击运行:
六、高级优化建议
-
环境隔离:
- 为每个环境创建独立的测试数据(如测试账号、订单号)。
- 使用数据库快照工具(如 Flyway)重置测试环境。
-
测试报告增强:
yaml# 在 GitHub Actions 中集成 Allure 报告 - name: Allure Report uses: simple-elf/allure-report-action@v1 with: allure_results: ./reports
-
性能监控:
yaml- name: Run Performance Test run: locust -f locustfile.py --headless -u 100 -r 10 --host ${{ env.API_BASE_URL }}
通过以上方案,你的接口自动化测试将深度集成到 CI/CD 流程中,确保每次版本升级到新环境时,核心接口功能得到全面验证。 也仅供我自己参考,不知道大家是不是都这样用的呢?