接口自动化之jenkins+allure报告+企微消息推送

 在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":
                '''<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)

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值