通过Slack接收HeadSpin信息

2024-03-26 11:40
文章标签 信息 接收 slack headspin

本文主要是介绍通过Slack接收HeadSpin信息,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

构建应用程序并对其进行测试需要在流程的每个步骤中各个利益相关者之间进行大量协作。每次运行完成后,与每个利益相关者手动监控、编译和共享会话数据可能是一场噩梦。如果我们可以通过通信工具将会话数据作为警报发送,它将一次性覆盖更多受众。‍

Slack 是适用于几乎所有组织的团队通信工具,它允许用户在自动化脚本的末尾插入警报。一旦脚本完成执行,会话数据将被自动收集并广播给选定的用户或频道。

用户可以使用 Webhooks 或 Slack API 通过 Slack 发送警报,也可以将文件附加到它们。通过上述任一方法发送警报的第一步是创建一个 Slack 插件。

通过创建 Slack 应用程序,用户可以访问 Slack 的大量功能,其中发送自动警报只是其中之一。在组织级别创建 Slack 应用程序允许整个组织根据需要接收警报和通知。请参阅此快速指南以创建 Slack 插件。

在 Slack 中使用 Webhooks 发送警报

传入 Webhooks 是将警报从应用程序发送到 Slack 的最简单方法。

使用 Webhooks 创建 Slack 警报的步骤:

第 1 步:创建一个 Slack 插件(如果您还没有,请参阅本指南)。

第 2 步:在 Slack 插件中启用传入 Webhooks 功能,以允许它在 Slack 中发布来自外部来源的警报。

第 3 步:启用 Incoming Webhooks 后,将新的 Webhook 添加到您的工作区。 选择您希望应用程序在其中发送警报的 Slack 频道。

 

第 4 步:将生成特定于您选择的频道的webhook URL。

第 5 步:生成 webhook URL 后,您可以使用 HTTP POST 请求将警报添加到 URL。 

import requests
import jsonparams = {'text': "Run ID:<run_id> \n Session Link:<session_link>" }
webhook_url= "https://hooks.slack.com/services/XxxxXxxXXx/XxxXXx/XxxxXxxxxX"
requests.post(url = webhook_url, data =json.dumps(params) )

第 6 步:应用程序会将警报发布到您选择的频道,并为其生成了 webhook URL。 警报将如下所示:

上述警报具有已完成运行的会话的 ID 及其链接。 该频道的成员可以单击链接查看会话日志和其他详细信息。

使用 Post Message Slack API 发送警报

虽然传入 Webhook 是在 Slack 中发布警报的一种简单方法,但它们的功能有限。 例如,Webhooks 允许用户广播消息,但在发布后不能修改或删除它们。 它们也不允许用户覆盖他们为其创建 Webhook URL 的初始频道首选项。

chat.postMessage 方法在功能和范围方面要先进得多。 它们使应用程序能够回复消息、在多个频道上广播相同的消息等。

 

使用 postMessage API 创建 Slack 警报的步骤:

第 1 步:创建一个 Slack 应用程序(如果您还没有,请参阅本指南)。

第 2 步:从应用管理页面转到应用设置,然后从导航菜单中选择 OAuth 和权限功能。 向下滚动到 Scopes 部分,然后从下拉菜单中选择 chat:write。 此范围将使应用程序能够代表其发送消息。

第 3 步:如果应用程序之前没有授予上述范围,您必须使用重新安装应用程序将应用程序重新安装到其原始工作区。

第 4 步:使用任何 Slack API 都需要工作区令牌。 用户首次在工作区中安装应用程序时会生成工作区令牌,并在“机器人用户 OAuth 令牌”下的应用程序设置中可用。 要使 API 正常工作,令牌需要具有正确的权限。

 

第 5 步:

  • Python 代码段需要一个参数通道来找到正确的对话。
  • 参数 text 指定警报的内容。
  • 使用来自 Slack Web 客户端的 chat.postMessage API 发布警报的 Python 片段如下:
from slack import WebClient
client = WebClient(token=<workspace_token>)
client.chat_postMessage(channel=<channel_id>, text=<alert_message>)

第 6 步:应用程序会将警报发布到您选择的频道,并为其生成了 webhook URL。 警报将如下所示:

 

第 7 步:您可以使用参数 thread_ts 将警报作为对上一条消息的回复发送。 当警报与上一条消息相关并且必须发布而不造成混淆时,此命令会派上用场。 

from slack import WebClient
client = WebClient(token=<workspace_token>)
client.chat_postMessage(channel=<channel_id>,text=<alert_message>,thread_ts= <ts_value_of_parent_message>
)

步骤 8:您可以通过为参数 thread_ts 提供父消息的 ts 值,使警报显示为对消息的线程回复。 您可以从发送父消息时获得的响应负载中获取 ts 值。

在警报中发布附件

Slack 允许用户将文件作为消息与文本消息一起上传,甚至作为对消息线程的回复。 您将图片、日志和其他工件标记为在会话运行后广播的警报。 files.upload 是用于将附件上传到 Slack 的 API 方法。

使用 files.upload API 将文件附加到 Slack 警报的步骤:
第 1 步:创建一个 Slack 应用程序(如果您还没有,请参阅本指南)。

第 2 步:从应用管理页面转到应用设置,然后从导航菜单中选择 OAuth 和权限功能。 向下滚动到 Scopes 部分,然后从下拉菜单中选择 files:write。 此范围将使应用程序能够代表其发送消息。

第 3 步:如果应用程序之前没有授予上述范围,您必须使用重新安装应用程序将应用程序重新安装到其原始工作区。

‍第 4 步:使用任何 Slack API 都需要 Workspace 令牌参数。 要使 API 正常工作,令牌需要具有正确的权限。

‍第5步:

  • Python 代码段还需要一个参数通道来找到正确的对话。 您可以使用逗号分隔的列表添加多个频道。
  • 您可以使用参数 initial_comment 来指定与警报相关的任何注释。
  • 参数 title 为附件提供了一个标题。
  • 您必须在参数文件中提及附件路径的需要。

第 6 步:从 Slack Web 客户端使用 files.upload API 上传文件的 Python 片段如下所示:

from slack import WebClient
client = WebClient(token=<workspace_token>)
client.files_upload(channels=<channel_id>,initial_comment=<alert_message>,title=<title_of_the_alert>,file=<file_path>
)

第 7 步:一些附加参数有助于在 Slack 中使用线程功能。

  • 您可以使用参数 thread_ts 将文件附加到相应的会话警报。

该应用程序会将附件发布到使用 channel 参数选择的频道,并在 initial_comment 中提供详细信息,如下所示:

Slack 通知集成代码

使用 start HeadSpin 捕获,以下 Python 代码模板展示了如何将测试与用户流关联,并设置状态(取决于自动化脚本的成功或失败)。 该代码使用 postMessage API 将包含会话链接的通知推送到 Slack。 

# -*- coding: utf-8 -*-
#!/usr/bin/python
import os
from time import sleep
import sys
import time
import unittest
import requests
from appium import webdriver
from slack import WebClientclass AutomationTests(unittest.TestCase):def setUp(self):self.package = <app_package>self.os = <os_name>self.udid = <device_udid>  #Selecting the device using device udid#Initialising desired capabilitiesdesired_caps = {}desired_caps['platformName'] = <platform_name>desired_caps['udid'] = self.udiddesired_caps['deviceName'] = self.udiddesired_caps['appPackage'] = <app_package>desired_caps['appActivity'] = <app_activity>desired_caps['headspin:capture.video'] = Trueself.status = "Fail"appium_input = <appium_url>     #Argument for appium urlself.url = appium_inputself.auth_token = appium_input.split('/')[-3]#Initialising driver to start test in required deviceself.driver = webdriver.Remote(self.url, desired_caps)def tearDown(self):self.session_id = self.driver.session_idprint ("https://ui-dev.headspin.io/sessions/" + self.session_id + "/waterfall")#Completing test and releasing the device from the driverself.driver.quit()#Setting the test statusif self.status != "Pass":session_status = "Failed"else:   session_status= "Passed"self.associate_userflow()self.update_description()#push notifications to Slack containing the session link and few data derived from the HeadSpin session capturenotification_content = "Session Link: "+ str(self.session_id) + "\n Data 1: " +str(self.data[0]) + "\n Data 2: " +str(self.data[1]) + "\n Data 3: " +str(self.data[2]) + "\n Data 4: " +str(self.data[3])workspace_token= "xoxb-123456621-1234567123-xxxxxxxxxxxxxxxxxxxxxxxx"channel_id = "XXXXXXXXXXX"client = WebClient(token=workspace_token)client.chat_postMessage(channel= channel_id, text= notification_content )def test_workflow(self):#Main script to be executed  self.driver.implicitly_wait(30)begin_button = self.driver.find_element_by_class_name('begin-btn')begin_button.click()sleep(10)data_list = self.driver.find_elements_by_class_name('data-list')for i in range(0,4):self.data[i] = data_list[i].get_attribute('text')self.status = "Pass"def associate_userflow(self):#Associate a test with a User Flow session_data = {"session_id": str(self.session_id), "status": session_status, "test_name": self.test_name, "data":[{"key":"bundle_id","value": self.package}, {"key": "status", "value": self.status},{"key":"Data_1", "value":str(self.data[0])},{"key":"Data_2","value":str(self.data[1])},{"key":"Data_3","value":str(self.data[2])},{"key":"Data_4","value":str(self.data[3])}]}api_endpoint= "https://api-dev.headspin.io/v0/perftests/upload"output = requests.post(api_endpoint, headers={'Authorization': 'Bearer {}'.format(self.auth_token)}, json=session_data)def update_description(self):#Adding description with relevant data to the sessiondescription_string = ""for data in session_data['data']:description_string += data['key'] + " : " + str(data['value']) + "\n"data_payload = {}data_payload['name'] = self.test_namedata_payload['description'] = description_stringrequest_url= 'https://api-dev.headspin.io/v0/sessions/' + self.session_id + '/description'response = requests.post(request_url, headers={'Authorization': 'Bearer {}'.format(self.auth_token)}, json=data_payload)if __name__ == '__main__':suite = unittest.TestLoader().loadTestsFromTestCase(AutomationTests)unittest.TextTestRunner(verbosity=2).run(suite)‍

总结

使用上述方法,用户可以避免手动监控会话的麻烦,而是将会话数据直接传送到他们的 Slack 通道。 他们可以在 Webhooks 的简单但受限的功能或具有更大功能的更高级 API 方法(如 chat.postMessage 和 files.upload)之间进行选择。

这篇关于通过Slack接收HeadSpin信息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/848387

相关文章

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

C#实现获取电脑中的端口号和硬件信息

《C#实现获取电脑中的端口号和硬件信息》这篇文章主要为大家详细介绍了C#实现获取电脑中的端口号和硬件信息的相关方法,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 我们经常在使用一个串口软件的时候,发现软件中的端口号并不是普通的COM1,而是带有硬件信息的。那么如果我们使用C#编写软件时候,如

通过C#获取PDF中指定文本或所有文本的字体信息

《通过C#获取PDF中指定文本或所有文本的字体信息》在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响,然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文... 目录引言C# 获取PDF中指定文本的字体信息C# 获取PDF文档中用到的所有字体信息引言在设计和出

C#读取本地网络配置信息全攻略分享

《C#读取本地网络配置信息全攻略分享》在当今数字化时代,网络已深度融入我们生活与工作的方方面面,对于软件开发而言,掌握本地计算机的网络配置信息显得尤为关键,而在C#编程的世界里,我们又该如何巧妙地读取... 目录一、引言二、C# 读取本地网络配置信息的基础准备2.1 引入关键命名空间2.2 理解核心类与方法

详解Spring Boot接收参数的19种方式

《详解SpringBoot接收参数的19种方式》SpringBoot提供了多种注解来接收不同类型的参数,本文给大家介绍SpringBoot接收参数的19种方式,感兴趣的朋友跟随小编一起看看吧... 目录SpringBoot接受参数相关@PathVariable注解@RequestHeader注解@Reque

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines

使用Python检查CPU型号并弹出警告信息

《使用Python检查CPU型号并弹出警告信息》本教程将指导你如何编写一个Python程序,该程序能够在启动时检查计算机的CPU型号,如果检测到CPU型号包含“I3”,则会弹出一个警告窗口,感兴趣的小... 目录教程目标方法一所需库步骤一:安装所需库步骤二:编写python程序步骤三:运行程序注意事项方法二

SpringBoot中Get请求和POST请求接收参数示例详解

《SpringBoot中Get请求和POST请求接收参数示例详解》文章详细介绍了SpringBoot中Get请求和POST请求的参数接收方式,包括方法形参接收参数、实体类接收参数、HttpServle... 目录1、Get请求1.1 方法形参接收参数 这种方式一般适用参数比较少的情况,并且前后端参数名称必须

PostgreSQL如何查询表结构和索引信息

《PostgreSQL如何查询表结构和索引信息》文章介绍了在PostgreSQL中查询表结构和索引信息的几种方法,包括使用`d`元命令、系统数据字典查询以及使用可视化工具DBeaver... 目录前言使用\d元命令查看表字段信息和索引信息通过系统数据字典查询表结构通过系统数据字典查询索引信息查询所有的表名可