UI自动化测试通过飞书发送告警信息

2023-11-16

1.发送纯文本消息
1.1代码如下

#!/usr/bin/env python
#coding=utf-8
import json
import requests
url = "https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxxxxxxxxxxx"  #机器人勾子,发送纯文本使用自定义机器人即可
payload_message = {
    "msg_type": "text",
    "content": {
        "text": "你要发送的消息"
    }
}
headers = {
    'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=json.dumps(payload_message))
print(response.text)

2.发送图片
2.1首先要先创建一个机器人,拿到机器人的app_id和app_secret,并且要给机器人im:resource:upload,im:resource权限,用于图片上传。笔者在写这篇博客时发现现在只需要申请一个权限即可(创建机器人的过程很坎坷,需要后台管理权限,并且每次修改机器人配置都要进行一次发布和审批,我在网上找到的相关文章基本上都没有创建机器人的过程,笔者也是在飞书技术客服的支持下稀里糊涂的完成了飞书机器人的创建。)这个机器人是没有勾子的,因此不能用来发送消息。

在这里插入图片描述
创建的机器人:
在这里插入图片描述
2.2创建一个群机器人,使用自定义机器人即可,使用该机器人的勾子进行消息发送。
2.3代码如下(因定制化需求更改过此原始代码,读者在使用时先检查下此代码有没有语法上的错误)

#!/usr/bin/env python
#coding=utf-8
import requests
from requests_toolbelt import MultipartEncoder
import json
# 你复制的webhook地址
class SendMsg():
    def __init__(self, app_id, app_secret, web_hook_url):
        self.app_id = app_id  # 发送图片时需要
        self.app_secret = app_secret  # 发送图片时需要
        self.web_hook_url = web_hook_url  # 机器人web_hook地址
    def get_tenant_access_token(self):  #获取token在上传图片时使用
        url = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal"
        body = {
            "app_id": self.app_id,
            "app_secret": self.app_secret
        }
        r = requests.request(method='post', url=url, json=body)
        print(r.json())
        print(r.json()['tenant_access_token'])
        return r.json()['tenant_access_token']

    # 上传图片生成image id
    def uploadImage(self, image_rb):
        if image_rb == None:
            return None
        else:
            tenant_access_token = self.get_tenant_access_token()
            print(tenant_access_token)
            url = "https://open.feishu.cn/open-apis/im/v1/images"
            with open(image_rb, 'rb') as f:
                image = f.read()
            form = {'image_type': 'message',
                'image': image}  # image_rb:是以rb格式读的图片内容,也可以是ui自动截的图,直接传过来
            multi_form = MultipartEncoder(form)
            headers = {
            'Authorization': 'Bearer {}'.format(tenant_access_token),  ## 获取tenant_access_token, 需要替换为实际的token
        }
            headers['Content-Type'] = multi_form.content_type
            response = requests.request("POST", url, headers=headers, data=multi_form)
            # print(response.headers['X-Tt-Logid'])  # for debug or oncall
            print(response.json())  # Print Response
            img_key = response.json()['data']['image_key']
            return img_key

    def send_post(self,title,text,img_key):
        """
        title: 发送消息的标题
        content: 使用富文本格式:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/im-v1/message/create_json
        """
        msg = {
            "msg_type": "post",
            "content": {
                "post": {
                    "zh_cn": {
                        "title": title,
                        "content": [
                            [
                                {
                                    "tag": "text",
                                    "text": text
                                },
                                {
                                    "tag": "img",
                                    "image_key": img_key
                                }
                                ]
                            ],
                    }
                }
            }
        }
        r = requests.request(method='post', url=self.web_hook_url, json=msg)
        print(r.content)
if __name__ == '__main__':
    exp = SendMsg('cli_a3214dc867f8xxxx', 'kOf8Hw3kcJDqIM6BUT5KRbGXbGzjxxxx',
                 'https://open.feishu.cn/open-apis/bot/v2/hook/ec0eb702-4fe2-4e07-bbb9-c01732xxxxxx')
    exp.get_tenant_access_token()
    img_key = exp.uploadImage(r'C:\Users\Administrator\Desktop\login\TestScripts\1.jpg')
    exp.send_post('消息通知','发送图片',img_key)

2.4效果
在这里插入图片描述

3.踩过的坑
3.1在调试脚本时不要开启抓包工具,比如fiddler,飞书机器人勾子使用的是https,在开启时会有证书相关的报错信息,当然有些大神可以通过代码解决,但是建议代码能力不是很强的tester在运行脚本时关闭抓包工具就行了。
3.2待续

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UI自动化测试通过飞书发送告警信息 的相关文章

  • OpenStack实例控制台报错

    OpenStack实例控制台报错1006 环境说明 操作系统信息 CentOS Linux release 7 9 2009 Core Linux node2 yun com 5 4 226 1 el7 elrepo x86 64 Open

随机推荐

  • Mysql数据库第十三课-----------sql语句的拔高3--------直冲云霄

    作者前言 作者介绍 作者id 老秦包你会 简单介绍 喜欢学习C语言和python等编程语言 是一位爱分享的博主 有兴趣的小可爱可以来互讨 个人主页 小小页面 gitee页面 秦大大 一个爱分享的小博主 欢迎小可爱们前来借鉴 sql语句的拔高
  • linux常用性能观测工具---硬件相关

    rdmsr 在Linux内核源码中提供了读写CPU MSR寄存器模块 使可以在用户空间直接读写MSR寄存器 开源社区提供msr寄存器读写工具msrtools 其中有两个命令 rdmsr wrmsr 要使rdmsr wrmsr命令真正可以读写
  • 红帽linux系统安装指导

    第1步 在虚拟机管理界面中单击 开启此虚拟机 按钮后数秒就看到RHEL 7系统安装界面 如图1 26所示 在界面中 Test this media install Red Hat Enterprise Linux 7 0和Troublesh
  • 第九届蓝桥杯单片机省赛题彩灯

    参考佬中佬 但不搬运 http t csdn cn 4tnjz include
  • @responsebody

    表示该方法的返回结果直接写入HTTP response body中 一般在异步获取数据时使用 在使用 RequestMapping后 返回值通常解析为跳转路径 加上 responsebody后返回结果不会被解析为跳转路径 而是直接写入HTT
  • Qt设置部件透明及阴影效果

    窗体和部件透明 设置整个窗体透明属性 0 1 0 完全透明 1 不透明 setWindowOpacity 0 5 窗口透明 部件不透明 设置窗口透明 部件不透明 须配合无边框窗体使用 setWindowFlags Qt FramelessW
  • 教你怎么在linux上永久修改IP地址

    经常移动电脑而使电脑ip改变 有两种方式 在创建虚拟机时使用NAT模式和桥接模式 使用NAT模式 就是虚拟机ip所依赖主机的ip而产生 使用桥接模式 不依赖主机ip而产生ip 相当于在当前网络中有一个电脑占据了这个ip 使用NAT模式 本身
  • HttpMediaTypeNotAcceptableException的解决过程

    今儿的Web项目中突然报错 HttpMediaTypeNotAcceptableException Could not find acceptable representation 涉及接口是 RequestMapping value X
  • JAVA语言特点

    Java语言特点 Java语言是面向对象的 oop Java语言是健壮的 Java的强类型机制 异常处理 垃圾的自动收集等是Java程序健壮性的重要保障 Java语言是跨平台性的 即一个编译好的 class文件可以在多个系统下运行 借助各系
  • 创建Vue3.0工程和常用 Composition API

    一 创建Vue3 0工程 1 使用 vue cli 创建 官方文档 https cli vuejs org zh guide creating a project html vue create 查看 vue cli版本 确保 vue cl
  • QWidget关闭子窗口后显示主窗口(父窗口)

    已经弃坑 不再使用Qt工具 有疑问可以查阅博主的其它博客 看看有没有解决方案 如果还没有可以百度或Google搜一下其他博主的教程 谢谢 Holle 好久没见了 据我上次发博客已经过去很久 今天呢 带给大家一个Qt上的小问题 好多初学者在Q
  • 回顾篇-SpringBoot-Tomcat

    为什么写 今天看了Spring实战第五版 里边有句话如下 传统的基于Servlet的Web框架 如Spring MVC 在本质上都是阻塞和多线程的 每个连接都会使用一个线程 在请求处理的时候 会在线程池中拉取一个工作者 worker 线程来
  • Linux下修改密码命令及查看密码修改时间

    Linux下修改密码命令及查看密码修改时间 1 如修改用户liu的密码为123456 在root用户下执行 echo 123456 passwd stdin liu 2 查看密码修改时间 date d 1970 01 01 more etc
  • CloudCompare——计算点云的KD树并可视化

    目录 1 功能概述 2 完整操作 3 算法源码 4 相关代码 1 功能概述 使用Tools gt Sand box research gt compute kd tree访问此工具 该功能可以用于论文写作中的KD树绘图 2 完整操作 3 算
  • 你的小程序

    你的小程序还未设置管理员信息 无法被绑定 你可先访问mp weixin qq com 在 用户身份 页面设置管理员信息后即可进行绑定 解决方法 换一个浏览器 别用火狐 真XXX 但解决放哪就这么简单
  • 如何在Visual Studio给多行代码进行注释和取消注释

    如何在Visual Studio给多行代码进行注释和取消注释 用鼠标选中要注释的代码 先按Ctr K 键 再按 Ctrl C 键进行注释多行代码 如果要取消注释 用鼠标选中被注释的代码 先按Ctrl K 再按 Ctrl U 即可取消注释
  • 中文OCR识别

    在闲暇时刻做了一个中文识别能力的工程 工程主要对中文文字进行识别 当前工程没有检测文本能力 后续会加入 文本字段在32000验证集合上准确率为83 2 可识别中文字符5990 由于没有时间做太多优化 可能对于相近字体的准确率并不太高 但是可
  • 拿来即用的 Python SSH+SFTP 实现类

    一个拿来即用的 Python SSH 和 SFTP 实现类 可用于 与 Linux 服务器建立持续交互的 SSH 会话 从 Linux 服务器下载远程文件 上传本地文件到 Linux 服务器 新创建一个 linux client py 文件
  • Vue.js中的v-model指令(双向绑定)

    Vue js中v model的作用 v model的作用和使用场景 1 v model的作用 双向绑定 2 v model双向绑定的使用场景 表单 3 总结 v model的作用和使用场景 你好 Vue js作为现在最为常用的前端框架之一
  • UI自动化测试通过飞书发送告警信息

    1 发送纯文本消息 1 1代码如下 usr bin env python coding utf 8 import json import requests url https open feishu cn open apis bot v2