Docker 接口自动化测试任务持续构建

ABEE · 2022年01月06日 · 2645 次阅读

接口自动化测试任务持续构建

  • Docker
  • Jenkins
  • SVN
  • Pytest
  • Allure

准备工作

1、环境安装

2、插件安装

按下面路径进入插件市场,搜索插件名,勾选后安装即可。

Jenkins -> Manage Jenkins -> Manage Plugins -> 选中 Available 栏

# Install without restart

所需插件列表:

  • Pipeline 流水线任务
  • Docker
  • Docker Pipeline
  • Subversion 代码管理仓库
  • Extended Choice Parameter 参数化构建
  • Allure:生成及展示 Allure 报告
  • Blue Ocean:美化 UI

3、配置全局凭证

使用 SVN 拉取项目代码,提前配置好用户名密码。仅填写用户名、密码即可,其他默认就好。

Jenkins -> Manage Jenkins -> Manage Credentials -> Credentials -> Jenkins -> 全局凭据 (unrestricted) -> Add Credentials

如果使用 Git 管理项目代码,同理。

4、配置 allure 工具

配置路径如下,填写 Name,勾选自动安装,点击保存。

Jenkins -> Manage Jenkins -> Global Tool Configuration -> Allure Commandline -> Add Allure Commandline

注意:

  • 如果不填写 Name,自动安装时会出现空指针错误;
  • 勾选自动安装后,运行 job 会检查工具目录是否存在 allure,如果不存在才会进行下载安装。 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

Pipeline

以上准备工作完成后,接下来开始配置流水线项目。

1、新建 Pipeline 项目

创建成功后,进入配置页面。

2、配置项目:参数化构建

接口自动化测试项目需要传入一个环境参数,根据参数值判断执行环境为测试还是线上;如果这里没有该选项,检查下插件是否安装成功,或尝试重启 Jenkins。

参数化构建

参数设置

3、配置项目:Pipeline script

两种方式:

  • 直接编写;
  • 从代码仓库检出。

不推荐直接在项目配置处编写,理由如下:

  • 项目迁移的话,需要重新登录平台,再次编写,不灵活;
  • 当脚本有变更,需要登录平台修改,不方便平时维护;
  • 文本框编辑功能太弱。

所以,一般是在项目内创建 Jenkinsfile 文件,跟随项目代码一起维护,变更会在下一次项目构建时自动生效。且代码编辑器可安装插件,便于脚本编写和语法检查。

从代码仓库检出 pipeline script 配置如图:

Jenkins 到这里就配置完成了,先保存。

4、构建执行脚本的镜像

在代码项目内编写 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 .

5、定义流水线任务

编写 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 构建镜像,镜像构建成功后供后面的步骤使用,会更加灵活。

6、进行构建

在 Jenkins job 主页进行构建,就会展示流水线任务的执行进度及工作日志。多次构建后,右上角还会展示项目整体运行结果的趋势图。

效果图

当 Jeknins 的执行报告要让其他人访问时,可以切换为 Blue Ocean 视图,页面会相对美观。

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册