职贝云数AI新零售门户
标题:
接口自动化之jenkins+allure报告+企微音讯推送
[打印本页]
作者:
GdzM
时间:
2022-12-30 15:18
标题:
接口自动化之jenkins+allure报告+企微音讯推送
在jenkins上部署好项目,构建成功后,希望可以把生成的报告,以及结果统计发送至企微。
效果图
(, 下载次数: 7)
上传
点击文件名下载附件
完成如下。
1.生成allure报告
首先在插件管理中,搜索并安装allure
(, 下载次数: 16)
上传
点击文件名下载附件
其次,在 全局工具管理中,新增设置,留意别名最好填本地allure的文件名
(, 下载次数: 13)
上传
点击文件名下载附件
构建后操作 中添加allure report,填好结果文件途径和生成的report的途径。jenkins上设置完成。
2.获取jenkins的allure报告地址
封装一个jenkins相关操作的类,获取allure报告的地址,url是jenkins服务器的地址,然后username和password是用户名和密码
import jenkins
from common.Logger import logger
from common.read_yaml import ReadYaml
data = ReadYaml('htinfo.yml').get_yaml_data()['jenkins']
class JenkinsCo:
def __init__(self):
self.url = data['url']
self.name = data['username']
self.password = data['password']
#衔接jenkins服务器,需求参数jenkins登海洋址,用户名,密码
def __get_connect(self):
try:
server=jenkins.Jenkins(url=self.url,username=self.name,
password=self.password)
return server
except Exception as E:
logger.error('衔接jenkins服务器失败啦,失败缘由{}'.format(E))
return None
#得到上一次构建义务的相关信息
def get_info(self, projname, key):
server = self.__get_connect()
if server:
value = server.get_job_info(projname)[key]
return value
else:
return None
#拼接allure地址,获取上一次构建成功后allure的地址
def get_allureadress(self, projname, key):
num = self.get_info( projname, key)
if num:
allure_adress = self.url + 'job/newproj/{}/allure/'.format(num - 1)
return allure_adress
else:
return None
if __name__ == '__main__':
jc = JenkinsCo()
#key='nextBuildNumber',获取下一次构建的id
value = jc.get_allureadress( projname=data['projname'], key='nextBuildNumber')
print(value)
复制代码
3.分析整理测试的结果,用jsonreport
安装
pip install pytest-json-report --upgrade
复制代码
得到用例的经过,失败,跳过和总的用例数
'''
作者:cathy
工夫:2022/7/8 11:46
内容:执行一切的case
'''
import pytest
from pytest_jsonreport.plugin import JSONReport
if __name__ == '__main__':
# 需求生成结果文件,不然jenkins辨认不出来
plugin = JSONReport()
pytest.main(['-s', '--alluredir', './report/tmp'], plugins=[plugin])
summary = plugin.report.get("summary")
#得到经过,失败,跳过和总执行的用例数
passed = summary.get("passed",0)
failed = summary.get("failed",0)
skipped = summary.get("skipped",0)
total = summary.get("total",0)
复制代码
4.把得到的结果和allure报告,整理一下格式,发送给企微
企微添加小机器人,得到webhook地址,封装一个类处理一下音讯的格式
'''
作者:cathy
工夫:2022/1/20 19:19
内容:封装机器人
'''
import datetime
import requests
headers = {'Content-Type': 'application/json'}
#机器人的webhook地址
urlw='https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxxxxxx'
class Robot:
def message(self,projname, total, passed, failed, skipped,adress):
time=datetime.datetime.now()
data = {
"msgtype": "markdown",
"markdown": {
"content":
'''<font color="warning">提示!自动化测试反馈\n请相关同事留意,及时跟进!</font>\n
> 用例执行终了工夫:<font color="info">{}</font>\n
> 项目称号:<font color="comment">{}</font>\n
> 用例总数:<font color="comment">{}</font>\n
> 经过用例数:<font color="info">{}</font>\n
> 失败用例数:<font color="warning">{}</font>\n
> 跳过用例数:<font color="warning">{}</font>
> 报告链接:[allure报告,请点击后进入查看]({})
'''.format( time,projname, total, passed, failed, skipped,adress)
}
}
return data
def sendMessage(self,projname, total, passed, failed, skipped,adress):
data=self.message(projname, total, passed, failed, skipped,adress)
requests.post(url=urlw,headers=headers,json=data)
print('发音讯了')
复制代码
然后在执行一切case的文件中,调用获取allure地址,以及发送音讯的方法
'''
作者:cathy
工夫:2022/7/8 11:46
内容:执行一切的case
'''
import os
import sys
curPath = os.path.abspath(os.path.dirname(__file__))
rootPath = os.path.split(curPath)[0]
sys.path.append(rootPath)
sys.path.append('D:\pythonprj\common')
import pytest
from pytest_jsonreport.plugin import JSONReport
from common.Robot import Robot
from common.JenkinsConnect import JenkinsCo
if __name__ == '__main__':
plugin = JSONReport()
# 需求生成allure结果文件,不然jenkins辨认不出来
pytest.main(['-s', '--alluredir', './report/tmp'], plugins=[plugin])
summary = plugin.report.get("summary")
passed = summary.get("passed")
failed = summary.get("failed")
skipped = summary.get("skipped")
total = summary.get("total")
# print("共{}条,经过{}条,失败{}条,跳过{}条".format(total, passed, failed, skipped))
jc = JenkinsCo()
rb = Robot()
#获取地址
adress = jc.get_allureadress('newproj', 'nextBuildNumber')
#发送企微音讯
rb.sendMessage(projname='operatePro', total=total, passed=passed, failed=failed, skipped=skipped, adress=adress)
复制代码
欢迎光临 职贝云数AI新零售门户 (https://www.taojin168.com/cloud/)
Powered by Discuz! X3.5