首页 > 其他分享 >jenkins接入钉钉api接口自动化测试报告自动发送

jenkins接入钉钉api接口自动化测试报告自动发送

时间:2024-06-06 16:23:14浏览次数:29  
标签:status 测试报告 launch url api path print jenkins

一些同学的公司在做接口自动化测试时,难免会要求进行持续集成以及需要将可视化报告发送到诸如钉钉工作群等地方,于是便编写下列相关教程。

jenkins上进行持续集成以及接入钉钉

前提条件

准备好自动化脚本

持续集成

源代码管理模块

安装插件:Git plugin

获取凭证:http拉取链接对应:登录账号密码,id置空,描述任意

指定分支:格式为*/xxx 比如*/dev

触发器模块

定时触发:

jenkins项目中构建触发器->Build periodically

采用五颗*占位符的方式书写。
分别为:分钟,小时,一个月中第几天,第几月,一周中第几天
常用格式:
H/30 * * * *  每30分钟构建一次
H H/2 * * * 每2个小时构建一次
0 8 * * * 每天早上8点构建一次
0,8,12,22 * * * 每天8点,12点,22点构建各一次

推送触发:

当指定远端仓库存在推送或合并行为时,触发jenkins构建

  • 生成对应git仓库的凭证api token
  • gitlab举例:个人头像->Settings->Access TokenPersonal Access Tokens->编写名称,有效期以及勾选权限:api->生成,复制token
  • 安装插件GitLab Plugin
  • 配置token:Manage JenkinsSystemGitLab然后按照要求填写gitlab仓库地址以及获取的token便可创建一个链接凭证
  • 在项目中选中对应链接凭证,便可将该项目和凭证对应的远程仓库关联起来,从而捕获远程仓库的提交合并等行为。
  • 然后就是设置捕获哪些分支的情况作为触发器。

后置处理器插件

插件Post build task

  • 安装插件 Post build task
  • 这个插件是为了提取构建结束后,生成的allure报告信息
  • 通过jenkins中的allure报告插件,生成的数据中存在一个prometheusData.txt的文件,该文件记录着测试用例的通过情况,则可以通过在代码里编写一个读取该文件的方法,然后在构建结束后进行调用。

path = os.path.abspath(os.path.dirname((__file__)))

        try:
            with open(path + r'/allure-results/html/export/prometheusData.txt', 'r') as f:
                for lines in f:  # 通常这里应该是 'line' 而不是 'lines',因为每次迭代都是一行
                    parts = lines.strip('\n').split(' ')  # 去除换行符并按空格分割
                    if len(parts) >= 2:  # 确保至少有两个元素
                        launch_name = parts[0]
                        num = parts[1]
                        d.update({launch_name: num})  # 更新或添加键值对到字典
            print(d)  # 在文件读取完成后打印字典
        except FileNotFoundError:
            print("文件未找到或无法打开")
        except IOError as e:
            print(f"打开文件时发生I/O错误: {e}")
        print(d)
        retries_run = d.get('launch_retries_run')  # 运行总数
        print('运行总数:{}'.format(retries_run))
        status_passed = d.get('launch_status_passed')  # 通过数量
        print('通过数量:{}'.format(status_passed))
        status_failed = d.get('launch_status_failed')  # 不通过数量
        print('没通过数量:{}'.format(status_failed))
        status_broken = d.get('launch_status_broken')  # 中断数量

接入钉钉api

插件安装:Ding Talk

使用方法

  • jenkins配置钉钉助手
  • Manage jenkins->钉钉图标(我的jenkins版本是2.4,图标在页面底部)
  • 新增机器人,这里定义机器人的名字然后是最关键的webhook这个是一个凭证来链接对应的钉钉群聊里的小机器人。
  • 安全设置(这个是钉钉app在创建群机器人时的设置):
    • ip设置:钉钉群里的机器人只接收指定ip发送请求
    • 关键字:只接收信息中包含关键字的请求。
  • 项目中便会出现钉钉机器人选项,选择jenkins配置好的机器人,便可发送基本信息,不过此处并不用这种方式来向钉钉群聊发送消息,而是通过代码调用钉钉机器人开放的接口。
  • 代码中使用第三方库:dingtalkchatbot来完成对钉钉机器人发送请求,并且通过关键字的方式通过安全检验。
  • jenkins自动化脚本运行完毕后,通过post build task来触发该后置脚本的运行,便可获取并发送刚刚生成的测试报告的信息到钉钉群里。

from dingtalkchatbot.chatbot import DingtalkChatbot
# jenkins登录地址
jenkins_url = "http://xxxx:8282/"
# 获取jenkins对象
server = jenkins.Jenkins(jenkins_url, username='xxxx', password='xxxx')  # Jenkins登录名 ,密码
# job名称
job_name = "job/xxxxx/"  # Jenkins运行任务名称
# job的url地址
job_url = jenkins_url + job_name
# 获取最后一次构建
job_last_build_url = server.get_info(job_name)['lastBuild']['url']
# 报告地址
report_url = job_last_build_url + 'allure'  # 'allure'为我的Jenkins全局工具配置中allure别名
    def send_dingtalk(self):
        d = {}
        path = os.path.abspath(os.path.dirname((__file__)))

        try:
            with open(path + r'/allure-results/html/export/prometheusData.txt', 'r') as f:
                for lines in f:  # 通常这里应该是 'line' 而不是 'lines',因为每次迭代都是一行
                    parts = lines.strip('\n').split(' ')  # 去除换行符并按空格分割
                    if len(parts) >= 2:  # 确保至少有两个元素
                        launch_name = parts[0]
                        num = parts[1]
                        d.update({launch_name: num})  # 更新或添加键值对到字典
            print(d)  # 在文件读取完成后打印字典
        except FileNotFoundError:
            print("文件未找到或无法打开")
        except IOError as e:
            print(f"打开文件时发生I/O错误: {e}")
        print(d)
        retries_run = d.get('launch_retries_run')  # 运行总数
        print('运行总数:{}'.format(retries_run))
        status_passed = d.get('launch_status_passed')  # 通过数量
        print('通过数量:{}'.format(status_passed))
        status_failed = d.get('launch_status_failed')  # 不通过数量
        print('没通过数量:{}'.format(status_failed))
        status_broken = d.get('launch_status_broken')  # 中断数量

        con = {
            "content": "Pytest_Allure_Demo自动化脚本执行完成。\n"
                       "测试概述:\n"
                       "运行总数: " + retries_run + "\n"
                        "通过数量: " + status_passed + "\n"
                        "失败数量: " + status_failed + "\n"
                        "中断数量: " + status_broken + "\n"                        
                        "构建地址:" + job_url + "\n"
                          "报告地址:" + report_url
        }

        # 获取路径,目的是找到report.html文件的路径
        path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))  # 获取当前路径
        html_path = os.path.join(path, "allure-results/html/index.html")  # 获取html格式报告文件的路径
        tile = time.strftime("%Y-%m-%d %H:%M:%S")
        # WebHook地址,你钉钉上创建自定义机器人时生成的值
        webhook = 'xxxx'
        # 初始化机器人小丁
        xiaoding = DingtalkChatbot(webhook)
        ding = DingTalk()
        jd = json.dumps(con)
        # xixi = ding.read_report(html_path)
        xiaoding.send_text(
            # Qa-审核后台自动化是机器人的关键字,必须要保持一致
            msg='Qa-冼喆\n\n' + con["content"] + "\n\n项目url:**/" + "\n\n执行时间:" + tile
        )

标签:status,测试报告,launch,url,api,path,print,jenkins
From: https://www.cnblogs.com/hogwarts/p/18235492

相关文章

  • FastAPI-3:快速入门
    3快速入门第二章是python基础,故不做介绍。FastAPI是一个现代、快速(高性能)的网络框架,用于使用基于标准Python类型提示的Python3.6+构建API。FastAPI的创建者是SebastiánRamírez。FastAPI由SebastiánRamírez于2018年发布。与大多数PythonWeb框架相比,它在很多方面都更......
  • SendGrid发送邮件时如何调用API接口群发?
    SendGrid发送邮件模板如何定制?邮件发送限制有哪些?SendGrid发送邮件是一种方便快捷的方式,可以在应用程序或网站中轻松地发送大量邮件。通过调用SendGrid的API接口,您可以实现群发邮件,无论是通知用户、发送营销邮件还是其他目的,都能够高效完成。SendGrid发送邮件:调用接口通过S......
  • DockerCompose中部署Jenkins(Docker Desktop在windows上数据卷映射)
    场景Docker+Jenkins+Gitee+Maven项目配置jdk、maven、gitee等拉取代码并自动构建以及遇到的那些坑:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/128399052Windows10(家庭版)中DockerDesktop(docker)的配置、安装、修改镜像源、使用:https://blog.csdn.net/BADAO......
  • 【Web API DOM09】元素在页面中尺寸、位置获取
    一:如何获取宽高、位置1获取元素宽高offsetWidth和offsetHeight获取元素自身宽高,包含元素自身内容+padding+border获取可视宽高;如果盒子隐藏,获取结果为0获取的是数值型数据clientWidth和clientHeight获取元素可见部分宽高(不包含边框、margin、滚动条等)2获取元素位置off......
  • 【Web API DOM10】日期(时间)对象
    一:实例化1获取系统当前时间即创建日期对象constdate=newDate()console.log(date)2024年6月5日周三 2获取指定的时间以获取2025年6月29日为例constdate=newDate('2025-6-29')console.log(date)二:日期对象方法1使用场景:日期对象返回数据如上图,无法直接使......
  • 强!推荐一款开源接口自动化测试平台:AutoMeter-API !
    在当今软件开发的快速迭代中,接口自动化测试已成为确保代码质量和服务稳定性的关键步骤。随着微服务架构和分布式系统的广泛应用,对接口自动化测试平台的需求也日益增长。今天,我将为大家推荐一款强大的开源接口自动化测试平台:AutoMeter-API。1、介绍AutoMeter-API是一款专为测......
  • WebApi过滤器初学习
    WebApi过滤器AuthorizationFilters//权限验证ResourceFilters//资源验证常被用于缓存ModelBinding//模型绑定ActionFilters//行为常被用于模型验证和日志记录ExceptionFilters//异常处理常被用于错误日志ResultFilters//结果验证用于三种......
  • api是什么意思?
    api是什么意思API(ApplicationProgrammingInterface)的全称是应用程序编程接口,它是一种允许不同软件应用程序之间进行交互和通信的机制。API通常以网络请求的形式出现,通过预定义的函数和协议,使得开发人员能够访问和操作软件系统的某些功能或数据,而无需了解其内部工作机制的细节。......
  • Vue 3 Composition API与Hooks模式
    Vue3的CompositionAPI引入了Hook函数的概念,这是一种更加模块化和可重用的状态管理和逻辑组织方式。自定义Hook首先,我们创建一个自定义Hook,例如useCounter,它封装了计数器的逻辑://useCounter.jsimport{ref}from'vue';exportfunctionuseCounter(){c......
  • 最新OpenAI免费API-openai api key获取方式
    最近又开始准备LLM应用开发,要用到apikey,才发现过我之前免费发放的额度没了!我都没咋用过,痛心......