在jenkins上部署好项目,构建成功后,希望可以把生成的报告,以及结果统计发送至企微。
效果图
实现如下。
1.生成allure报告
首先在插件管理中,搜索并安装allure
其次,在 全局工具管理中,新增设置,注意别名最好填本地allure的文件名
构建后操作 中添加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":
'''提醒!自动化测试反馈\n请相关同事注意,及时跟进!\n
> 用例执行完毕时间:{}\n
> 项目名称:{}\n
> 用例总数:{}\n
> 通过用例数:{}\n
> 失败用例数:{}\n
> 跳过用例数:{}
> 报告链接:[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)