从零打造属于自己的CI/CD Jenkins+Apifox (二)

前面章节讲解

jenkins简单配置以及发送邮件

这章节讲解 邮件内如何展示报告附件

号外、号外

邮件模版更新啦!好看的邮件模版总能让开发人员眼前一亮,建议使用以下模版。

1、报告模版如下:

    
    
    
    
${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志    
    
    
    
        
            本邮件由系统自动发出,无需回复!
各位同事,大家好,以下是${PROJECT_NAME }项目构建信息
构建结果 - ${BUILD_STATUS}

构建信息
  • 项目名称: ${PROJECT_NAME}
  • 构建编号: 第${BUILD_NUMBER}次构建
  • 触发原因: ${CAUSE}
  • 构建状态: ${BUILD_STATUS}
  • 构建日期: ${BUILD_TIMESTAMP}
  • 构建日志: ${BUILD_URL}console
  • 测试报告: ${PROJECT_URL}apifox-reports

用例执行结果:
  • 用例结果: ${STATUS}

环境信息
  • 测试环境地址: ${URL}
  • 测试环境账号: ${USER}
  • 测试环境密码: ${PWD}

API测试报告详情见附件,拜~

2、邮件内容变量参数说明

${ENV, var="JOB_NAME"}: 当前job名; 
${BUILD_NUMBER}: 当前job的第N次构建 
${PROJECT_NAME}: 项目名称;
${BUILD_STATUS}: 构建状态;
${BUILD_TIMESTAMP}: 构建时间,需要添加timestamper插件 
${CAUSE}: 触发原因;
${BUILD_URL}: 构建地址;
${PROJECT_URL}:报告地址;
以上变量名称是Jenkins自带的。

${STATUS}: 用例执行状态;
${URL}: 环境地址;
${USER}: 环境账号;
${PWD}: 环境密码;

以上报告模版增加了测试环境内容展示,该环境变量是自定义的变量名称,并不是Jenkins自带的;

需要在 jenkins_home 项目内创建 txt文档

比如:/Users/xxxx/data/jenkins_home/workspace/项目名称/build_status.txt

内容如下:

STATUS=Failed #用例执行结果展示
URL=http://xx.xx.xx.xx:xxxx #测试环境地址
USER=xxxxx #测试环境账号
PWD=xxxxx #测试环境密码

配置增加构建步骤

选择:注入环境变量(Injecting environment variables)

属性文件路径内填写txt文档名称即可

从零打造属于自己的CI/CD Jenkins+Apifox (二)_第1张图片

邮件内增加报告附件

1、配置构建后操作 选择Editable Email Notification

在Attachments输入框内配置相对路径的报告地址和报告名称

从零打造属于自己的CI/CD Jenkins+Apifox (二)_第2张图片

 2、点击Advanced Settings在Triggers点击addTriggers选择Always

从零打造属于自己的CI/CD Jenkins+Apifox (二)_第3张图片

3、点击高级后,Recipient List内填写收件人邮箱地址后,点击应用保存

从零打造属于自己的CI/CD Jenkins+Apifox (二)_第4张图片

4、再次构建后,查看邮箱,邮件内是否收到附件

配置企业微信提醒

1、下载插件

Manage Jenkins->Plugin Manager选择Availble,输入框内填写:Qy Wechat Notification 并勾选框框,点击 install without restart 下载成功后,在installed内查看

从零打造属于自己的CI/CD Jenkins+Apifox (二)_第5张图片

创建企微群管理机器人,获取Webhook地址

从零打造属于自己的CI/CD Jenkins+Apifox (二)_第6张图片2、配置构建后操作->选择【企业微信通知】

Webhook地址填写:机器人生成的Token

从零打造属于自己的CI/CD Jenkins+Apifox (二)_第7张图片

3、点击立即构建。企业微信内查看执行结果

从零打造属于自己的CI/CD Jenkins+Apifox (二)_第8张图片

自定义配置企业微信提醒通知

1、可以简单的在 Jenkins 中安装企业微信插件,直接配置,就可以直接通知

2、为了实际的需求可能要通知部分人或者通知内容要更改,这个时候我们可以自己手写一个python脚本文件,根据需求放在 Build 前后执行就OK了。

创建 Python 脚本如下

import requests
import json
import urllib3
import sys
import re

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)


class InformRobot:
    def __init__(self):
        self.sess = requests.session()
        self.test_case_passing_rate = ""
        self.test_case_fail_rate = ""
        self.avg_api_response_rate = ""
        self.test_case_untested_rate = ""
        self.test_case_quantity_rate = ""

    def markdown_robot(
            self, webhook_url, report_url, principal, job_name,test_environment, STATUS
    ):
        """
        实现企业微信通知
        :param webhook_url: 企业微信token
        :param report_url: 报告地址
        :param principal: 负责人名称
        :param job_name: 项目名称
        :param test_environment:环境名称
        :return:
        """
        data = {

        "msgtype": "markdown",  # 消息类型,此时固定为markdown

            "markdown": {
                "content": f"### 提醒!  {job_name}  接口自动化测试反馈  \n "
                           f">项目名称:{test_environment} \n" +
                           f">测试用例结果: {STATUS}  \n" +
                           f">测试用例总数: {self.test_case_quantity_rate}  \n" +
                           f">平均接口请求耗时: {self.avg_api_response_rate}  \n" +
                           f">测试用例通过率: {self.test_case_passing_rate}  \n" +
                           f">测试用例失败率: {self.test_case_fail_rate}  \n" +
                           f">测试用例未测率: {self.test_case_untested_rate}  \n" +
                           f">测试报告链接:[点击查看报告详情]({report_url}) \n" +
                           f">测试负责人:{principal}"
            }
        }
        re_post = self.sess.post(webhook_url, data=json.dumps(data), verify=False)
        print(re_post.content, data)
        return re_post

    def result_pass_rate(self, html_path):
        with open(html_path, "r", encoding="utf-8") as f:
            report = f.read()

        pass_rate = re.search('
通过率
\n\ +
(.*?)
', report) fail_rate = re.search('
失败率
\n\ +
(.*?)
', report) avg_api_response_time = re.search('
平均接口请求耗时
\n\ +
(.*?)
', report) case_untested_rate = re.search('
未测率
\n\ +
(.*?)
',report) case_quantity_rate = re.search('
循环数
\n\ +
(.*?)
',report) self.test_case_fail_rate = fail_rate.group(1) #用例失败率 self.test_case_passing_rate = pass_rate.group(1) #用例通过率 self.avg_api_response_rate = avg_api_response_time.group(1) #平均接口请求耗时 self.test_case_untested_rate = case_untested_rate.group(1) #用例未测率 self.test_case_quantity_rate = case_quantity_rate.group(1) #用例数量 if __name__ == '__main__': webhook_url = sys.argv[1] report_url = sys.argv[2] principal = sys.argv[3] job_name = sys.argv[4] test_environment = sys.argv[5] STATUS = sys.argv[6] build_number = sys.argv[7] path = "/var/jenkins_home/workspace/{}/apifox-reports/test-dsp-apifox_{}.html".format(job_name,build_number) info_robot = InformRobot() info_robot.result_pass_rate(path) info_robot_res = info_robot.markdown_robot(webhook_url, report_url, principal, job_name, test_environment, STATUS) print(info_robot_res) info_robot.sess.close()

把 Python 脚本放到 工作空间内,比如:/Users/xxxx/data/jenkins_home/workspace/check-apifox/下面

安装 Python3 环境

因为 Jenkins 是用镜像运行的,所以需要在 Jenkins 容器内安装 Python3 环境,跟着下面步骤一一执行吧!

1、从服务器拉取可用的包到容器内

进入 Jenkins容器内,使用 docker exec -it 容器ID /bin/bash 查看当前操作系统cat /etc/issue

从零打造属于自己的CI/CD Jenkins+Apifox (二)_第9张图片

这里查到的是Debian系统(不是ubuntu, 也不是centos),这里yum是没有的,所以不能用yum安装了,这里用apt-get代替yum

先执行更新命令:apt-get update

出现报错,问题原因:权限不足,请使用 root 用户

解决方法如下:使用以下命令重新进入容器:docker exec -u 0 -it 容器ID /bin/bash

备注:-u 0 表示 root 权限

从零打造属于自己的CI/CD Jenkins+Apifox (二)_第10张图片

注意:从服务器拉取可用的包完成后,手动重启Docker、Jenkins

2、容器内部安装 Python3

1.先安装依赖

apt-get -y install gcc automake autoconf libtool make 
apt-get -y install make*
apt-get -y install zlib*
apt-get -y install openssl libssl-dev
apt-get install sudo 
 
注意:以上依赖下载过程较慢,耐心等待。。。。。。

2.下载 Python3

进入 /usr/local内
root@b8ebff36b8ed:/# cd /usr/local
 
执行 下载python
root@b8ebff36b8ed:/usr/local# wget https://www.python.org/ftp/python/3.8.12/Python-3.8.12.tgz
出现 bash: wget: command not found
 
下载 wget
root@b8ebff36b8ed:/usr/local# sudo apt-get install wget
 
wget下载完成后,再次执行下载操作
root@b8ebff36b8ed:/usr/local# wget https://www.python.org/ftp/python/3.8.12/Python-3.8.12.tgz
 
下载完成
root@b8ebff36b8ed:/usr/local# ls
Python-3.8.12.tgz  bin  etc  games  include  lib  man  sbin  share  src
使用 命令 tar -xvf Python-3.8.12.tgz
 
创建  python3 文件夹
mkdir python3
 
切换到解压后的 Python-3.8.12 目录下
cd Python-3.8.12

3.执行如下代码安装

--prefix 选项是配置安装的路径,执行后所有资源文件放在 /usr/local/python3 的路径里。
./configure --prefix=/usr/local/python3 --enable-optimizations
make
make install
注意:以上命令执行过程时间较慢、耐心等待。。。。。

4.创建软链接

root@b8ebff36b8ed:/# ln -s /usr/local/python3/bin/python3.8 /usr/bin/python3
root@b8ebff36b8ed:/# ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

5.容器内查看Python3环境是否安装成功

从零打造属于自己的CI/CD Jenkins+Apifox (二)_第11张图片

Jenkins内添加环境变量和构建命令

1、勾选 將環境變量注入構建過程->属性内容

添加以下内容

webhook_url=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=6cf7bafe-56f9-48b0-xxxx-5399xxxx9c2
principal= xxx  # 测试负责人
test_Project_Name=测试环境
DSP_URL=http://xx.xx.xxx.xxx:xxxxx
DSP_USER=xxxx
DSP_PWD=xxxxx

2、添加构建命令

从零打造属于自己的CI/CD Jenkins+Apifox (二)_第12张图片

#!/bin/bash
/usr/bin/python3 "webhook.py" ${webhook_url} http://127.0.0.1:80/${JOB_NAME}_${BUILD_NUMBER}.html ${principal}  ${JOB_NAME} ${test_Project_Name}  ${STATUS} ${BUILD_NUMBER}

注意:请按照该顺序添加环境变量,否则会执行失败。

命令添加完成后,点击执行构建。

从零打造属于自己的CI/CD Jenkins+Apifox (二)_第13张图片

 出现原因:Jenkins 内虽然安装了Python环境,但是未下载 Python 需要用的模块。

解决方法: Jenkins容器内下载 相关模块。

root@b8ebff36b8ed: pip3 install requests
Collecting requests
  Downloading requests-2.28.1-py3-none-any.whl (62 kB)
     |████████████████████████████████| 62 kB 378 kB/s
Collecting idna<4,>=2.5
  Downloading idna-3.4-py3-none-any.whl (61 kB)
     |████████████████████████████████| 61 kB 64 kB/s
Collecting charset-normalizer<3,>=2
  Downloading charset_normalizer-2.1.1-py3-none-any.whl (39 kB)
Collecting urllib3<1.27,>=1.21.1
  Downloading urllib3-1.26.12-py2.py3-none-any.whl (140 kB)
     |████████████████████████████████| 140 kB 296 kB/s
Collecting certifi>=2017.4.17
  Downloading certifi-2022.9.24-py3-none-any.whl (161 kB)
     |████████████████████████████████| 161 kB 165 kB/s
Installing collected packages: urllib3, idna, charset-normalizer, certifi, requests
Successfully installed certifi-2022.9.24 charset-normalizer-2.1.1 idna-3.4 requests-2.28.1 urllib3-1.26.12
WARNING: Running pip as root will break packages and permissions. You should install packages reliably by using venv: https://pip.pypa.io/warnings/venv
WARNING: You are using pip version 21.1.1; however, version 22.3.1 is available.
You should consider upgrading via the '/usr/local/python3/bin/python3.8 -m pip install --upgrade pip' command.

3、模版下载完成后,再次点击 立即执行构建

从零打造属于自己的CI/CD Jenkins+Apifox (二)_第14张图片

4、 企业微信内查看提醒通知

从零打造属于自己的CI/CD Jenkins+Apifox (二)_第15张图片

你可能感兴趣的:(Jenkins持续集成,jenkins,运维)