接口自动化测试任务持续构建
- Docker
- Jenkins
- SVN
- Pytest
- Allure
按下面路径进入插件市场,搜索插件名,勾选后安装即可。
Jenkins -> Manage Jenkins -> Manage Plugins -> 选中 Available 栏
# Install without restart
所需插件列表:
使用 SVN 拉取项目代码,提前配置好用户名密码。仅填写用户名、密码即可,其他默认就好。
Jenkins -> Manage Jenkins -> Manage Credentials -> Credentials -> Jenkins -> 全局凭据 (unrestricted) -> Add Credentials
如果使用 Git 管理项目代码,同理。
配置路径如下,填写 Name,勾选自动安装,点击保存。
Jenkins -> Manage Jenkins -> Global Tool Configuration -> Allure Commandline -> Add Allure Commandline
注意:
Unpacking https://repo1.maven.org/maven2/io/qameta/allure/allure-commandline/2.17.2/allure-commandline-2.17.2.zip to /var/jenkins_home/tools/ru.yandex.qatools.allure.jenkins.tools.AllureCommandlineInstallation/allure on Jenkins
以上准备工作完成后,接下来开始配置流水线项目。
创建成功后,进入配置页面。
接口自动化测试项目需要传入一个环境参数,根据参数值判断执行环境为测试还是线上;如果这里没有该选项,检查下插件是否安装成功,或尝试重启 Jenkins。
两种方式:
不推荐直接在项目配置处编写,理由如下:
所以,一般是在项目内创建 Jenkinsfile 文件,跟随项目代码一起维护,变更会在下一次项目构建时自动生效。且代码编辑器可安装插件,便于脚本编写和语法检查。
从代码仓库检出 pipeline script 配置如图:
Jenkins 到这里就配置完成了,先保存。
在代码项目内编写 Dockerfile,把项目依赖的工具包全部打到镜像内,构建为新的镜像。
# API AUTO TEST image v2: Pytest、JDK 8、allure
FROM python:3.7-alpine
LABEL author="lanzy.nice@gmail.com"
WORKDIR /var
COPY requirements.txt .
# 更新包管理工具
RUN echo "http://mirrors.aliyun.com/alpine/latest-stable/main/" > /etc/apk/repositories \
&& echo "http://mirrors.aliyun.com/alpine/latest-stable/community/" >> /etc/apk/repositories \
&& apk update \
&& apk add --no-cache openjdk8 nodejs curl wget tar \
# 安装 Python 第三方库
&& pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple/ \
&& pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/ \
# 修改系统时区为上海
&& rm -rf /etc/localtime \
&& ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
# 安装 allure
&& wget https://registry.npmjs.org/allure-commandline/-/allure-commandline-2.13.0.tgz \
&& tar -zxvf allure-commandline-2.13.0.tgz \
&& rm -f allure-commandline-2.13.0.tgz \
&& mv package allure \
&& chmod -R 777 allure \
&& ln -s $(pwd)/allure/dist/bin/allure /usr/bin/allure
STOPSIGNAL SIGRTMAX
执行一下 job,把代码拉取到服务器上,进入 Dockerfile 所在的目录,构建镜像。
# pytest:v2 为镜像名跟标签,可自定义
$ docker build -t pytest:v2 -f Dockerfile .
编写 Jenkinsfile 自定义工作流程,大概长这个样子,根据需求稍加修改即可。
pipeline {
agent {
docker {
image 'pytest:v2'
// 把测试结果挂载到 Jenkins 容器,生成报告
args '-v ${WORKSPACE}/reports/allure-result:${WORKSPACE}/reports/allure-result'
}
}
// 定时任务;工作日每天上午下午各跑一次
// 注意:设置定时任务后需要手动构建一次加载配置
triggers {
cron('H 10,18 * * 1-5')
}
stages {
stage('拉取代码'){
steps {
// 具体的代码使用流水线语法生成
checkout(...)
}
}
stage('验证环境'){
steps {
sh "chmod 777 ./ci/env.sh"
sh "sh ci/env.sh ${env.choice}"
}
}
stage('运行测试'){
steps{
// 注意 allure 报告路径需要与下方生成报告内配置的路径一致
sh "pytest test/test_demo.py ${env.choice} --alluredir=./reports/allure-result"
}
}
stage('生成报告'){
steps{
script{
// Allure 插件:工作目录可省略不写,自动拼接
allure includeProperties: false,
jdk: '',
report: 'reports/allure-report',
results: [[path: 'reports/allure-result']]
}
}
}
}
}
由于执行接口自动化测试的环境基本不会变更,所以这里直接使用固定的镜像。如果镜像变动频率较高,就需要添加步骤,每次运行项目时先基于 Dockerfile 构建镜像,镜像构建成功后供后面的步骤使用,会更加灵活。
在 Jenkins job 主页进行构建,就会展示流水线任务的执行进度及工作日志。多次构建后,右上角还会展示项目整体运行结果的趋势图。
当 Jeknins 的执行报告要让其他人访问时,可以切换为 Blue Ocean 视图,页面会相对美观。