职贝云数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是用户名和密码
  1. import jenkins
  2. from common.Logger import logger
  3. from common.read_yaml import ReadYaml
  4. data = ReadYaml('htinfo.yml').get_yaml_data()['jenkins']
  5. class JenkinsCo:
  6.     def __init__(self):
  7.         self.url = data['url']
  8.         self.name = data['username']
  9.         self.password = data['password']
  10.     #衔接jenkins服务器,需求参数jenkins登海洋址,用户名,密码
  11.     def __get_connect(self):
  12.         try:
  13.             server=jenkins.Jenkins(url=self.url,username=self.name,
  14. password=self.password)
  15.             return server
  16.         except Exception as E:
  17.             logger.error('衔接jenkins服务器失败啦,失败缘由{}'.format(E))
  18.             return None
  19.     #得到上一次构建义务的相关信息
  20.     def get_info(self, projname, key):
  21.         server = self.__get_connect()
  22.         if server:
  23.             value = server.get_job_info(projname)[key]
  24.             return value
  25.         else:
  26.             return None
  27.     #拼接allure地址,获取上一次构建成功后allure的地址
  28.     def get_allureadress(self, projname, key):
  29.         num = self.get_info( projname, key)
  30.         if num:
  31.             allure_adress = self.url + 'job/newproj/{}/allure/'.format(num - 1)
  32.             return allure_adress
  33.         else:
  34.             return None
  35. if __name__ == '__main__':
  36.     jc = JenkinsCo()
  37.     #key='nextBuildNumber',获取下一次构建的id
  38.     value = jc.get_allureadress( projname=data['projname'], key='nextBuildNumber')
  39.     print(value)
复制代码
3.分析整理测试的结果,用jsonreport
        安装
  1. pip install pytest-json-report --upgrade
复制代码
       得到用例的经过,失败,跳过和总的用例数
  1. '''
  2. 作者:cathy
  3. 工夫:2022/7/8 11:46
  4. 内容:执行一切的case
  5. '''
  6. import pytest
  7. from pytest_jsonreport.plugin import JSONReport
  8. if __name__ == '__main__':
  9.     # 需求生成结果文件,不然jenkins辨认不出来
  10.     plugin = JSONReport()
  11.     pytest.main(['-s', '--alluredir', './report/tmp'], plugins=[plugin])
  12.     summary = plugin.report.get("summary")
  13.     #得到经过,失败,跳过和总执行的用例数
  14.     passed = summary.get("passed",0)
  15.     failed = summary.get("failed",0)
  16.     skipped = summary.get("skipped",0)
  17.     total = summary.get("total",0)
复制代码
4.把得到的结果和allure报告,整理一下格式,发送给企微
企微添加小机器人,得到webhook地址,封装一个类处理一下音讯的格式
  1. '''
  2. 作者:cathy
  3. 工夫:2022/1/20 19:19
  4. 内容:封装机器人
  5. '''
  6. import datetime
  7. import  requests
  8. headers = {'Content-Type': 'application/json'}
  9. #机器人的webhook地址
  10. urlw='https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxxxxxx'
  11. class Robot:
  12.     def message(self,projname, total, passed, failed, skipped,adress):
  13.         time=datetime.datetime.now()
  14.         data = {
  15.         "msgtype": "markdown",
  16.         "markdown": {
  17.                 "content":
  18.                 '''<font color="warning">提示!自动化测试反馈\n请相关同事留意,及时跟进!</font>\n
  19.                 > 用例执行终了工夫:<font color="info">{}</font>\n
  20.                 > 项目称号:<font color="comment">{}</font>\n
  21.                 > 用例总数:<font color="comment">{}</font>\n
  22.                 > 经过用例数:<font color="info">{}</font>\n
  23.                 > 失败用例数:<font color="warning">{}</font>\n
  24.                 > 跳过用例数:<font color="warning">{}</font>
  25.                 > 报告链接:[allure报告,请点击后进入查看]({})
  26.             '''.format( time,projname, total, passed, failed, skipped,adress)
  27.         }
  28.         }
  29.         return data
  30.     def sendMessage(self,projname,  total, passed, failed, skipped,adress):
  31.         data=self.message(projname, total, passed, failed, skipped,adress)
  32.         requests.post(url=urlw,headers=headers,json=data)
  33.         print('发音讯了')
复制代码
然后在执行一切case的文件中,调用获取allure地址,以及发送音讯的方法
  1. '''
  2. 作者:cathy
  3. 工夫:2022/7/8 11:46
  4. 内容:执行一切的case
  5. '''
  6. import os
  7. import sys
  8. curPath = os.path.abspath(os.path.dirname(__file__))
  9. rootPath = os.path.split(curPath)[0]
  10. sys.path.append(rootPath)
  11. sys.path.append('D:\pythonprj\common')
  12. import pytest
  13. from pytest_jsonreport.plugin import JSONReport
  14. from common.Robot import Robot
  15. from common.JenkinsConnect import JenkinsCo
  16. if __name__ == '__main__':
  17.    
  18.     plugin = JSONReport()
  19. # 需求生成allure结果文件,不然jenkins辨认不出来
  20.     pytest.main(['-s', '--alluredir', './report/tmp'], plugins=[plugin])
  21.     summary = plugin.report.get("summary")
  22.    
  23.     passed = summary.get("passed")
  24.    
  25.     failed = summary.get("failed")
  26.     skipped = summary.get("skipped")
  27.     total = summary.get("total")
  28.     # print("共{}条,经过{}条,失败{}条,跳过{}条".format(total, passed, failed, skipped))
  29.     jc = JenkinsCo()
  30.     rb = Robot()
  31. #获取地址
  32.     adress = jc.get_allureadress('newproj', 'nextBuildNumber')
  33. #发送企微音讯
  34.     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