通常情况下正规公司流程发送测试报告等事宜都是通过邮箱来走流程的,但是也有很多公司使用钉钉/飞书等办公软件。上班肯定是需要交流的嘛。那么直接将测试报告发送至钉钉/飞书群 岂不是大家都可以看到?毕竟邮件大家不会一直关注的。
获取Jenkins 报告记录
使用自动通知我们将会用到jenkins集成,我的其他文件有安装记录,可以自己翻阅一下
利用jenkins构建完成后会产生一条构建记录的,只需要将钉钉/飞书推送该记录即可。
代码开始之前需要安装jenkins
依赖包
pip3 install jenkins
import jenkins
import time
# 定义一个构造函数 每次执行前先获取
def __init__(self):
self.errorMsg = ""
self.tile = time.strftime("%Y-%m-%d %H:%M:%S")
try:
"""
捕获链接异常或读取异常信息
"""
self.jenkins_url = con.jenkins_url # jenkins地址 我这里是封装在配置文件当中
self.server = jenkins.Jenkins(self.jenkins_url, username=con.jenkins_name, password=con.jenkins_passwd) # 连接jenkins服务
# 获取jenkins_url
self.job_name = "job/autotest/" # 拼接job名称
self.job_url = self.jenkins_url + self.job_name # job的url地址
# 获取最后一次构建
self.job_last_number = self.server.get_info(self.job_name)['lastBuild']['number']
# #获取报告地址
self.report_url = self.job_url + str(self.job_last_number) + '/allure' # 报告地址
log.debug("jenkins地址:%s" % self.report_url)
except Exception as e:
self.errorMsg = str(e)
log.info("jenkins连接异常 %s" %e)
代码写完 记得模拟一下 是否可以正常获取最新的一次构建记录!
钉钉通知
记录构建好了 下面可以写推送通知
钉钉开放平台:钉钉开放平台
创建钉钉群机器人
群聊里面添加自定义机器人,设置机器人名称和自定义 关键词
设置完后 可以使用postman模拟一下推送通知!
url = 'hhttps://oapi.dingtalk.com/robot/send?access_token=xxx' # url = Webhook 直接复制
data = {
"msgtype": "markdown",
"markdown": {
"title": "项目接口测试报告",
"text": "<font color=\'#FFA500\'>[通知] </font>代码质量检测报告 \n\n --- \n\n <font color=\'#778899\' size=2>项目名称:测试 markdown 样式项目</font> \n\n <font color=\'#708090\' size=2>项目地址:[点击跳转详情](https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq)</font> \n\n <font color=\'#708090\' size=2>检测分支:master</font> \n\n <font color=\'#708090\' size=2>bug数量:</font><font color=\'#FF0000\' size=2>3</font> \n\n <font color=\'#708090\' size=2>相关人员:@13282148187</font> \n\n --- \n\n **播报时间:2020-12-20 13:55:00**" # 使用H5 格式编写样式
},
"at": {
"atMobiles": [
"群里面某人手机号"
],
"isAtAll": false
}
}
如果群消息获取到该通知 那就说明可以了。
获取Allure执行数据
将接口获取到信息和通知信息整合一起就可以了
# 读取allure报告文件中"prometheusData.txt"文件,循环遍历获取需要的值。
# 飞书通知函数
def inform(self):
url = "https://open.feishu.cn/open-apis/bot/v2/hook/" + token
currenttime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
# 异常数据才发送通知
if int(self.status_failed) > 0 or int(self.status_broken) > 0:
try:
method = 'post'
headers = {
'Content-Type': 'application/json'
}
payload = {
"msg_type": "interactive",
"card": {
"config": {
"wide_screen_mode": True,
"enable_forward": True
},
"elements": [
{"tag": "div",
"text": {"content": "项目名称:" + con.project_name +
"\n""Jenkins第" + str(self.job_last_number) + "次构建" +
"\n\n用例运行总数:" + " " + self.retries_run + " 条" +
"\n接口通过数量:" + " " + self.status_passed + " " +
"\n手动跳过数量:" + " " + self.status_skipped + " " +
"\n接口异常数量:" + " " + self.status_broken + " " +
"\n不通过数量:" + " " + self.status_failed + " " +
"\n总持续时长:" + " " + self.sum_duration + " 毫秒" +
"\n运行时间:" + currenttime,
"tag": "lark_md"
}},
{"tag": "div", "text": {
"content": "<at id=all></at>", # 艾特所有人 艾特某个人需要userid的key
"tag": "lark_md"
}},
{"actions": [{
"tag": "button",
"text": {
"content": "查看详细报告",
"tag": "lark_md"
},
"url": self.report_url,
"type": "default",
"value": {},
}],
"tag": "action"
},
],
"header": {
"title": {
"content": con.hookword, # 关键字
"tag": "plain_text"
},
},
},
}
requests.request(method=method, url=url, headers=headers, json=payload)
except Exception as e:
self.errorMsg = str(e)
log.error("接口请求异常 %s" % e)
飞书通知
记录构建好了 下面可以写推送通知
飞书开放平台:飞书开放平台
创建飞书群机器人
方法与钉钉大同小异
postman测试推送
def inform(self):
url = "https://open.feishu.cn/open-apis/bot/v2/hook/" + con.token
currenttime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
if int(self.status_failed) >= 0 or int(self.status_broken) >= 0:
try:
method = 'post'
headers = {
'Content-Type': 'application/json'
}
payload = {
"msg_type": "interactive",
"card": {
"config": {
"wide_screen_mode": True,
"enable_forward": True
},
"elements": [{
"tag": "div",
"text": {
"content": "项目名称:" + con.project_name +
"\n""Jenkins第" + str(self.job_last_number) + "次构建" +
"\n\n运行总数:" + " " + self.retries_run + " " +
"\n通过数量:" + " " + self.status_passed + " " +
"\n跳过数量:" + " " + self.status_skipped + " " +
"\n异常数量:" + " " + self.status_broken + " " +
"\n不通过数量:" + " " + self.status_failed + " " +
"\n总持续时长:" + " " + self.sum_duration + "毫秒" +
"\n运行时间:" + currenttime,
"tag": "lark_md"
}}, {"actions": [{
"tag": "button",
"text": {
"content": "查看详细报告",
"tag": "lark_md"
},
"url": self.report_url,
"type": "default",
"value": {}
}], "tag": "action"}],
"header": {
"title": {
"content": con.hookword,
"tag": "plain_text"
}
}
}
}
rep = requests.request(method=method, url=url, headers=headers, json=payload)
print(rep)
except Exception as e:
self.errorMsg = str(e)
log.error("接口请求异常 %s" % e)
获取Allure执行数据
与钉钉类似…