当前位置: 首页 > news >正文

自动化执行 - 钉钉机器人通知

背景

公司内部用钉钉来办公,钉钉支持机器人提醒,有各种各样的机器人提供选择,可以根据需求来定制机器人,达到提醒功能,如提醒某人请下午茶,233

 

思路

1. 添加机器人到群组中,这次将的是“自定义”机器人;

2. 添加后会发现有一个webhook的链接,可以点击“设置说明”查看详情

3. 可以通过post请求网这个webhook发送信息,机器人就可以在群里展示信息,文档里有定义不同的请求body;

 文档地址:https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7629140.0.0.karFPe&treeId=257&articleId=105735&docType=1

 这里需要吐槽的一点,目前只发现text类型支持换行

4. 关键就是post请求里面的信息的填充,如果想到用python来处理;

5. 编写python脚本:大致思路就是解析自动化result文件,组装post请求

 实际代码如下:

  

import requests
import time
import json
import sys
import hashlib
import xml.dom.minidom



HEADERS = {'ua': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36'}
DINGDING_URL= 'https://oapi.dingtalk.com/robot/send?access_token=your_access_token'
RESULT_FILE= '/var/lib/jenkins/workspace/wm-api-autotest/target/surefire-reports/testng-results.xml'
REPORT_URL_FILE= '/var/lib/jenkins/workspace/wm-api-autotest/target/allure-results/executor.json'

class Message():

    def __init__(self):
        self.total=0;
        self.passed=0;
        self.failed=0;
        self.skipped=0;
        self.reportUrl="";

    #解析文件获取结果数据
    def analyze(self):
        #打开xml文档
        dom = xml.dom.minidom.parse(RESULT_FILE)
        #得到文档元素对象

        root = dom.documentElement
        self.total = root.getAttribute('total')
        self.passed = root.getAttribute('passed')
        self.failed = root.getAttribute('failed')
        self.skipped = root.getAttribute('skipped')

        #构建的次数统计在json文件中
        file = open(REPORT_URL_FILE,'r')
        self.reportUrl=json.load(file)['reportUrl']

    #发送报告
    def send_message_to_robot(self):
        url= DINGDING_URL
        message='wm-api自动化执行结果:\n本次执行了{}条用例;\n成功了{}条;\n失败了{}条;\n跳过了{}条;\n查看详情请点击=> {}'.format(self.total,self.passed,self.failed,self.skipped,self.reportUrl)
        data={"msgtype":"text","text":{"content":message,"title":"wm-api自动化结果通知"}}
        try:
            resp = requests.post(url,headers=HEADERS,json=data,timeout=(3,60))
        except:
            print ("Send Message is fail!");



if __name__ == '__main__':
    message = Message()
    message.analyze();
    message.send_message_to_robot();

6. jenkins设置,需要新增一个插件“Post build task”,用于构建后执行shell命令

 

7. 实际结果展示:

 

小结

1. 之前用邮件提醒,但邮件这东西容易被忽略,可以借助其他工具,如钉钉提醒;

2. 多接触/尝试新的东西没错;

 

虽千万人,吾往矣!

相关文章:

  • 想了解概率图模型?你要先理解图论的基本定义与形式
  • 从源码分析JSONObject因版本差异导致toString格式异常问题
  • 封装html代码块到js函数中
  • K8S集群tls证书管理
  • Android -- DragDrop
  • 一个完整Java Web项目背后的密码
  • PHP字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、切割成数组等)...
  • vue element ui excel json2csv csv 导出
  • 这7个不可错过的数据可视化技术,让你的位置信息跃然纸上
  • JAVA运维-Tomcat支持APR模式
  • 路由器密码忘了怎么办 自己动手不求人
  • 源码编译安装 PHP 7.1.5 + nginx 1.12.0
  • 微信分享JS-SDK
  • 独家 | 环境大数据的应用案例及前景
  • P4165 [SCOI2007]组队
  • 时间复杂度分析经典问题——最大子序列和
  • [笔记] php常见简单功能及函数
  • Django 博客开发教程 16 - 统计文章阅读量
  • HTTP 简介
  • isset在php5.6-和php7.0+的一些差异
  • Linux Process Manage
  • mysql中InnoDB引擎中页的概念
  • Redis的resp协议
  • springMvc学习笔记(2)
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 阿里云Kubernetes容器服务上体验Knative
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 蓝海存储开关机注意事项总结
  • 前端之Sass/Scss实战笔记
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 浅谈web中前端模板引擎的使用
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 使用 @font-face
  • 使用Swoole加速Laravel(正式环境中)
  • 最简单的无缝轮播
  • 白色的风信子
  • kubernetes资源对象--ingress
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​什么是bug?bug的源头在哪里?
  • #ifdef 的技巧用法
  • #Lua:Lua调用C++生成的DLL库
  • #Ubuntu(修改root信息)
  • #在 README.md 中生成项目目录结构
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (39)STM32——FLASH闪存
  • (C++20) consteval立即函数
  • (windows2012共享文件夹和防火墙设置
  • (学习日记)2024.01.09
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .NET Core引入性能分析引导优化
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET/C# 使窗口永不获得焦点