专栏进度:09 / 10 (自动化实战专题)
持续集成(Continuous Integration, CI) 的核心目标是:尽早发现集成错误。我们将实现"代码提交 -> 自动触发 -> 并行执行 -> 报告发布 -> 钉钉/邮件通知"的全闭环。
一、 核心流程:自动化脚本的 CI 旅程
在工业界,典型的测试流水线由以下四个阶段(Stages)组成:
Checkout (检出):从 Git 仓库拉取最新的自动化测试代码。
Environment (环境):拉取 Docker 镜像或激活虚拟环境,安装 requirements.txt 中的依赖。
Execution (执行):调用 Pytest 运行测试(通常配合分布式插件 xdist 加速)。
Publish (发布):解析 Allure 结果并推送到看板,发送通知。
二、 实战 1:Jenkins 自由风格任务配置
在 Jenkins 界面中,我们需要完成以下关键配置:
构建触发器:勾选 Poll SCM(定时检查代码更新)或配置 Webhook(代码推送即触发)。
构建步骤 (Execute Shell):
Bash
bash
# 激活环境
source venv/bin/activate
# 运行测试并指定 Allure 结果路径
pytest --alluredir=${WORKSPACE}/allure-results
构建后操作:添加 Allure Report 插件,设置 Results Path 为 allure-results。
三、 实战 2:GitLab CI 声明式管道 (.gitlab-ci.yml)
如果你使用 GitLab,只需在项目根目录写一个 YAML 文件,系统就会自动调度。
YAML
yaml
stages:
- test
- report
run_tests:
stage: test
image: python:3.9
script:
- pip install -r requirements.txt
- pytest --alluredir=./allure-results
artifacts:
paths:
- allure-results/
expire_in: 1 week
generate_report:
stage: report
script:
- allure generate ./allure-results -o ./allure-report --clean
when: always
四、 关键环节:即时通知(钉钉/企业微信)
测试跑完后,必须第一时间"轰炸"负责人。
Python
python
# common/notice_util.py
import requests
def send_dingtalk(msg, webhook_url):
data = {
"msgtype": "text",
"text": {"content": f"【自动化测试告警】\n{msg}"}
}
requests.post(webhook_url, json=data)
提示:在 conftest.py 的 pytest_sessionfinish 钩子中调用此方法,即可实现测试结束自动发消息。
五、 避坑指南:CI 环境中的"幽灵问题"
Headless 模式:CI 服务器通常没有显示器。执行 UI 测试时,Playwright 必须开启 headless=True,或者使用 Docker 版的 Playwright(内置了 Xvfb 虚拟显示器)。
并发导致的冲突:如果在 CI 上开启并行执行(-n auto),多个线程可能会同时操作数据库同一个账号。对策:使用账号池管理,或者每个线程使用独立的测试环境。
权限地雷:Jenkins 执行脚本时常因为没有写文件夹权限而报错。对策:确保 Jenkins 账号拥有工作空间的 chown 权限。