从零开始搭建 CI/CD 流水线与Robotframework自动化测试框架
·
本文手把手教你搭建一个完整的 CI/CD 流水线,即使你是初学者也能轻松上手。我们会从最基础的环境准备开始,一步步构建自动化部署和测试系统。
前置准备
所需基础知识
- 基本的 Git 操作
- 了解 Docker 的基本概念
- 知道什么是 YAML 文件(不用深入,会用就行)
所需工具
- GitHub 账号
- 本地安装 Git
- 代码编辑器(如 VS Code)
Step 1: 创建 GitHub Actions 工作流
1.1 创建工作流目录结构
在你的项目根目录下,按以下结构创建文件夹:
# 在终端中执行
mkdir -p .github/workflows
1.2 创建工作流文件
创建文件 .github/workflows/ci-cd-pipeline.yml,内容如下:
name: CI/CD Pipeline
# 触发条件:手动触发
on:
workflow_dispatch:
inputs:
deploy_service_a:
description: '部署服务A'
required: true
default: false
type: boolean
run_tests:
description: '运行自动化测试'
required: true
default: true
type: boolean
# 环境变量配置
env:
DOCKER_REGISTRY: your-registry.com
DEPLOY_ENV: staging
CLOUD_REGION: us-east-1
jobs:
# 准备阶段:生成版本号等
prepare:
runs-on: ubuntu-latest
outputs:
build_version: ${{ steps.version.outputs.build_version }}
steps:
- name: 生成构建版本号
id: version
run: |
# 使用 GitHub Run Number 作为版本号的一部分
VERSION="1.0.${{ github.run_number }}"
echo "build_version=${VERSION}" >> $GITHUB_OUTPUT
echo "✅ 生成的版本号: ${VERSION}"
💡 小贴士:
workflow_dispatch允许你手动触发工作流,非常适合学习和测试。
Step 2: 配置自动化构建
2.1 创建 Dockerfile 模板
为你的服务创建 Dockerfile:
# Dockerfile
FROM node:18-alpine
# 设置工作目录
WORKDIR /app
# 复制 package.json 并安装依赖
COPY package*.json ./
RUN npm install
# 复制应用代码
COPY . .
# 暴露端口
EXPOSE 3000
# 启动命令
CMD ["npm", "start"]
2.2 在工作流中添加构建步骤
在 ci-cd-pipeline.yml 中添加构建任务:
build-service:
needs: prepare
runs-on: ubuntu-latest
if: github.event.inputs.deploy_service_a == 'true'
steps:
- name: 检出代码
uses: actions/checkout@v3
- name: 登录到 Docker Registry
run: |
echo "${{ secrets.DOCKER_PASSWORD }}" | docker login \
-u "${{ secrets.DOCKER_USERNAME }}" \
--password-stdin ${{ env.DOCKER_REGISTRY }}
- name: 构建并推送 Docker 镜像
run: |
IMAGE_NAME="${{ env.DOCKER_REGISTRY }}/my-service:${{ needs.prepare.outputs.build_version }}"
docker build -t $IMAGE_NAME .
docker push $IMAGE_NAME
echo "✅ 镜像已推送到: $IMAGE_NAME"
🔒 安全提示:
secrets.DOCKER_PASSWORD和secrets.DOCKER_USERNAME需要在 GitHub 仓库的 Settings > Secrets 中配置。
Step 3: 搭建自动化测试框架
3.1 创建测试项目结构
创建以下目录结构:
your-project/
├── .github/workflows/
│ └── ci-cd-pipeline.yml
├── tests/
│ ├── requirements.txt
│ ├── test_variables.py
│ └── test_cases/
│ └── example_test.robot
└── Results/
3.2 安装测试依赖
创建 tests/requirements.txt:
# 自动化测试所需的核心库
robotframework==6.0.2
robotframework-seleniumlibrary==6.1.0
robotframework-requests==0.9.0
selenium==4.8.0
3.3 配置测试环境变量
创建 tests/test_variables.py:
# 测试环境配置文件
# 根据不同环境修改这些值
# 基础 URL 配置
BASE_URL = "https://your-app-staging.example.com"
API_BASE_URL = "https://api-staging.example.com"
# 测试账户(使用测试专用账户)
TEST_USERNAME = "testuser@example.com"
TEST_PASSWORD = "TestPassword123!"
# 浏览器配置
BROWSER = "chrome"
HEADLESS = True # 无头模式,适合 CI/CD
# 超时设置(秒)
PAGE_LOAD_TIMEOUT = 30
ELEMENT_WAIT_TIMEOUT = 10
3.4 编写第一个测试用例
创建 tests/test_cases/example_test.robot:
*** Settings ***
Documentation 示例测试用例
Library SeleniumLibrary
Variables ../test_variables.py
*** Test Cases ***
验证登录功能
[Tags] login smoke
Open Browser ${BASE_URL} ${BROWSER}
Set Selenium Speed 0.5 seconds
Maximize Browser Window
# 输入用户名和密码
Input Text id:username ${TEST_USERNAME}
Input Text id:password ${TEST_PASSWORD}
Click Button id:login-btn
# 验证登录成功
Wait Until Element Is Visible id:dashboard
Page Should Contain 欢迎回来
[Teardown] Close Browser
验证API健康检查
[Tags] api health
Create Session api ${API_BASE_URL}
${response}= Get Request api /health
Should Be Equal As Strings ${response.status_code} 200
${json}= To Json ${response.content}
Dictionary Should Contain Key ${json} status
Step 4: 在 CI/CD 中集成测试
4.1 添加测试执行步骤
在工作流文件中添加测试任务:
run-tests:
needs: prepare
runs-on: ubuntu-latest
if: github.event.inputs.run_tests == 'true'
steps:
- name: 检出代码
uses: actions/checkout@v3
- name: 设置 Python 环境
uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: 安装测试依赖
run: |
pip install -r tests/requirements.txt
echo "✅ 测试依赖安装完成"
- name: 运行自动化测试
run: |
mkdir -p Results
robot --variablefile tests/test_variables.py \
--outputdir Results \
--loglevel INFO \
tests/test_cases/
echo "✅ 测试执行完成"
- name: 上传测试报告
uses: actions/upload-artifact@v3
with:
name: test-reports
path: |
Results/log.html
Results/report.html
Results/output.xml
Step 5: 添加测试结果分析
5.1 创建报告分析脚本
创建 tests/analyze_results.py:
#!/usr/bin/env python3
"""
测试结果分析脚本
用法: python analyze_results.py <output_xml_path> <output_dir>
示例: python analyze_results.py Results/output.xml Results/analysis
"""
import sys
import os
import xml.etree.ElementTree as ET
def analyze_test_results(xml_file, output_dir):
"""分析 Robot Framework 测试结果"""
try:
# 解析 XML 文件
tree = ET.parse(xml_file)
root = tree.getroot()
# 初始化统计变量
total_tests = 0
passed_tests = 0
failed_tests = 0
failed_test_names = []
# 遍历所有测试用例
for suite in root.iter('suite'):
for test in suite.iter('test'):
total_tests += 1
status_elem = test.find('status')
if status_elem is not None and status_elem.get('status') == 'PASS':
passed_tests += 1
else:
failed_tests += 1
failed_test_names.append(test.get('name'))
# 创建输出目录
os.makedirs(output_dir, exist_ok=True)
# 保存统计结果
with open(os.path.join(output_dir, 'summary.txt'), 'w') as f:
f.write(f"总测试数: {total_tests}\n")
f.write(f"通过数: {passed_tests}\n")
f.write(f"失败数: {failed_tests}\n")
f.write(f"成功率: {passed_tests/total_tests*100:.1f}%\n" if total_tests > 0 else "成功率: 0%\n")
# 保存失败的测试列表
if failed_test_names:
with open(os.path.join(output_dir, 'failed_tests.txt'), 'w') as f:
f.write('\n'.join(failed_test_names))
print(f"📊 测试结果分析完成!")
print(f"总测试: {total_tests}, 通过: {passed_tests}, 失败: {failed_tests}")
except Exception as e:
print(f"❌ 分析测试结果时出错: {e}")
sys.exit(1)
if __name__ == "__main__":
if len(sys.argv) != 3:
print("用法: python analyze_results.py <xml_file> <output_dir>")
sys.exit(1)
xml_file = sys.argv[1]
output_dir = sys.argv[2]
analyze_test_results(xml_file, output_dir)
5.2 在工作流中使用分析脚本
在测试步骤后添加分析步骤:
- name: 分析测试结果
run: |
python tests/analyze_results.py Results/output.xml Results/analysis
cat Results/analysis/summary.txt
- name: 检查测试是否通过
run: |
FAILED_COUNT=$(cat Results/analysis/failed_tests.txt | wc -l)
if [ "$FAILED_COUNT" -gt 0 ]; then
echo "❌ 有 $FAILED_COUNT 个测试失败!"
exit 1
else
echo "✅ 所有测试都通过了!"
fi
Step 6: 验证和调试
6.1 本地测试
在提交到 GitHub 之前,先在本地验证:
# 1. 安装依赖
pip install -r tests/requirements.txt
# 2. 运行测试
robot --variablefile tests/test_variables.py tests/test_cases/
# 3. 查看报告
# 打开 Results/report.html 查看详细结果
6.2 在 GitHub Actions 中测试
- 提交代码到 GitHub
- 进入 Actions 标签页
- 点击 “CI/CD Pipeline” 工作流
- 点击 “Run workflow” 按钮
- 选择要执行的任务(部署、测试或两者都选)
- 查看执行日志和测试报告
常见问题解决
❓ 问题1: 测试找不到元素
解决方案:
- 检查元素选择器是否正确
- 增加等待时间:
Wait Until Element Is Visible locator timeout=15
❓ 问题2: Docker 登录失败
解决方案:
- 确认在 GitHub Secrets 中正确配置了用户名和密码
- 检查 Registry URL 是否正确
❓ 问题3: 测试报告无法查看
解决方案:
- 在 Actions 执行完成后,点击 “Artifacts” 下载测试报告
- 本地打开
log.html和report.html查看详细结果
下一步学习建议
- 添加更多测试用例:覆盖更多的业务场景
- 配置定时执行:使用
schedule触发器定期运行测试 - 集成通知:测试失败时发送邮件或消息通知
- 多环境支持:为开发、测试、生产环境分别配置
总结
通过以上步骤,你已经成功搭建了一个完整的 CI/CD 流水线!这个系统可以:
- ✅ 自动构建和部署应用
- ✅ 自动运行端到端测试
- ✅ 生成详细的测试报告
- ✅ 在测试失败时及时告警
记住,CI/CD 的核心价值是快速反馈和质量保障。随着你的项目发展,可以逐步扩展这个基础框架,添加更多高级功能。
更多推荐
所有评论(0)