Jenkins自动化测试构建完成 发送钉钉消息

背景

有时自动化测试完成后,我们可以通过构建完成后给钉钉群发消息,这样就能及时通知到所有人员了。

接入流程

1:建立钉钉机器人,可以通过群助手,添加机器人,增加WebHook自定义接入,然后添加完成会生成一个Webhook,把这个webhook拷贝下来。

 

 

 

2:通过上面的步骤那我们的机器人就建好了,下面就是给钉钉发送消息了
这里是官方文档地址 可以查看钉钉开放文档 https://open.dingtalk.com/document/group/custom-robot-access
笔者是通过python来发送的代码如下,把url和secert替换为你的即可
# -*- coding: utf-8 -*-
# @Time    : 2023/5/9 0009 10:36
# @Author  : zcj
# @File    : Ding_send.py
# @Software : PyCharm


# 获取jenkins构建信息和本次报告地址

import os
import time
import hmac
import hashlib
import base64
import urllib.parse
import jenkins #安装pip install python-jenkins
import json
import urllib3

from urllib3.exceptions import InsecureRequestWarning
timestamp = str(round(time.time() * 1000))
secret = 'SEC5103f3f646fc7b2010207ff5883da2c2c4eeef437a14b17c446' #替换成自己的值
secret_enc = secret.encode('utf-8')
string_to_sign = '{}\n{}'.format(timestamp, secret)
string_to_sign_enc = string_to_sign.encode('utf-8')
hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
# print(timestamp)
# print(sign)

#钉钉通知的接口地址
url = f'https://oapi.dingtalk.com/robot/send?access_token=64d0f36d9be5c4ab7c210f56ac5f495cc22760e2d7b6f45fa2c90722&timestamp={timestamp}&sign={sign}' #钉钉群的token #利用python发送钉钉 在钉钉需要点击 查看测试报告的话 就需要把报告发送到服务器 再把地址参数传下面 就去掉jenkins所有操作 # jenkins登录地址 jenkins_url = "http://192.167.6.205:8080/jenkins/"#Jenkins地址 # 获取jenkins对象 server = jenkins.Jenkins(jenkins_url, username='admin', password='admin') #Jenkins登录名 ,密码 # job名称 job_name = "job/pytest_api/" #Jenkins运行任务名称 # job的url地址 job_url = jenkins_url + job_name # 获取最后一次构建 job_last_build_url = server.get_info(job_name)['lastBuild']['url'] # 报告地址 report_url = job_last_build_url + 'allure' #'allure'为我的Jenkins全局工具配置中allure别名 ''' 钉钉推送方法: 读取report文件中"prometheusData.txt",循环遍历获取需要的值。 使用钉钉机器人的接口,拼接后推送text ''' def DingTalkSend(): d = {} # 获取项目绝对路径 path = os.path.abspath(os.path.dirname((__file__))) # 打开prometheusData 获取需要发送的信息 f = open(path + r'/allure-report/export/prometheusData.txt', 'r') #allure测试数据报告的路径 for lines in f: for c in lines: launch_name = lines.strip('\n').split(' ')[0] num = lines.strip('\n').split(' ')[1] d.update({launch_name: num}) print(d) f.close() retries_run = d.get('launch_retries_run') # 运行总数 print('运行总数:{}'.format(retries_run)) status_passed = d.get('launch_status_passed') # 通过数量 print('通过数量:{}'.format(status_passed)) status_failed = d.get('launch_status_failed') # 不通过数量 print('失败数量:{}'.format(status_failed)) pass_re = "%.f%%" % (float(status_passed)/float(retries_run)*100) print("通过率:{}".format(pass_re)) # 钉钉推送 con = {"msgtype": "text", "text": { "content": "Pytest_Allure_Demo自动化脚本执行完成。" "\n测试概述:" "\n运行总数:" + retries_run + "\n通过数量:" + status_passed + "\n失败数量:" + status_failed + "\n通过率:" + pass_re + "\n构建地址:\n" + job_url + "\n报告地址:\n" + report_url }, "at": { "atMobiles": [ "130xxxxxxxx" # 如果需要@某人,这里写他的手机号 ], "isAtAll": 1 # 如果需要@所有人,这些写1 } } try: urllib3.disable_warnings() http = urllib3.PoolManager() jd = json.dumps(con) jd = bytes(jd, 'utf-8') http.request('POST', url, body=jd, headers={'Content-Type': 'application/json'}) except Exception as e: print(e) if __name__ == '__main__': DingTalkSend()

 

3、把py代码放到jenkins的workspace的构建目录下


Jenkins只需要修改两步即可。如下图

 

 

 

最后钉钉群通知如下:

 

 待续...

 

 

posted @ 2023-07-11 09:59  攻城狮-tester  阅读(353)  评论(0编辑  收藏  举报