前面章节讲解
jenkins简单配置以及发送邮件
这章节讲解 邮件内如何展示报告附件
邮件模版更新啦!好看的邮件模版总能让开发人员眼前一亮,建议使用以下模版。
${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测试报告详情见附件,拜~
${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)
在Attachments输入框内配置相对路径的报告地址和报告名称
Manage Jenkins->Plugin Manager选择Availble,输入框内填写:Qy Wechat Notification 并勾选框框,点击 install without restart 下载成功后,在installed内查看
创建企微群管理机器人,获取Webhook地址
Webhook地址填写:机器人生成的Token
1、可以简单的在 Jenkins 中安装企业微信插件,直接配置,就可以直接通知
2、为了实际的需求可能要通知部分人或者通知内容要更改,这个时候我们可以自己手写一个python脚本文件,根据需求放在 Build 前后执行就OK了。
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/下面
因为 Jenkins 是用镜像运行的,所以需要在 Jenkins 容器内安装 Python3 环境,跟着下面步骤一一执行吧!
进入 Jenkins容器内,使用 docker exec -it 容器ID /bin/bash 查看当前操作系统cat /etc/issue
这里查到的是Debian系统(不是ubuntu, 也不是centos),这里yum是没有的,所以不能用yum安装了,这里用apt-get代替yum
先执行更新命令:apt-get update
解决方法如下:使用以下命令重新进入容器:docker exec -u 0 -it 容器ID /bin/bash
备注:-u 0 表示 root 权限
注意:从服务器拉取可用的包完成后,手动重启Docker、Jenkins
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环境是否安装成功
添加以下内容
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
#!/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}
注意:请按照该顺序添加环境变量,否则会执行失败。
命令添加完成后,点击执行构建。
出现原因: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.