日报小工具 - 钉钉定时发送Wiki日报

前言:
  测试日报是用来记录每天测试工作的完成情况、发现的问题,以及问题修复进度,以便团队了解项目进展、及时调整计划,并保持信息同步交流。每日发送测试日报属于重复性工作,开发日报小工具结合Jenkins进行定时自动发送,有效节约人力成本,提高了整体测试效能。

整体流程图:
在这里插入图片描述
1、获取Wiki有效内容:

import configparser
import math
import requests
from loguru import logger
from bs4 import BeautifulSoup
import pandas as pd
import redef confluence_read(content_id):config = configparser.ConfigParser()config.read('Conf/common.conf')# 构建API请求的headersheaders = {'Content-Type': 'application/json'}url = f'https://xxxx.com/rest/api/content/{content_id}?expand=space,body.view,version,container'# 发送GET请求获取contentresponse = requests.get(url, headers=headers, auth=('xxx', 'xxx'))# 检查响应状态码if response.status_code == 200:return response.json()else:logger.info(f'请求失败,code= {response.status_code}')html_data = confluence_read(xxxxxx)

涉及获取Wiki文档json数据知识:
https://developer.atlassian.com/server/confluence/confluence-rest-api-examples/
https://docs.atlassian.com/atlassian-confluence/REST/6.6.0/#content-createContent
configparser使用:https://docs.python.org/zh-cn/3/library/configparser.html

2、处理json数据并解析文档

def beaut_table_data(html_data):content = html_data['body']['view']['value']# 处理获取到的content数据# 使用BeautifulSoup解析HTML内容return BeautifulSoup(content, 'html5lib')# 读取Wiki日报表格数据:
table = beaut_table_data(html_data).find_all('table')

涉及BeautifulSoup知识:BeautifulSoup简单用法

3、读取对应日报表格数据
在这里插入图片描述

# 观察Wiki日报结构,发现有个模板表格,所以取第二个table(table[1])
df = pd.read_html(str(table[1]))[0]

涉及pandas知识:https://www.pypandas.cn/docs/getting_started/basics.html

4、获取bug信息

def get_bug_info(jira_filter, replacements):template = Template(jira_filter)jira_filter_result = template.substitute(replacements)# logger.info(f'jql:{jira_filter_result}')jira = ConnectJira.connect_jira()issues = jira.search_issues(jira_filter_result, 0, 9999, 1, '', '', '')return [f'经办人: {i.fields.assignee}, {i.fields.summary}' for i in issues]jira_filter = "status in (等待修复, 修复中, 自测中) AND affectedVersion = ${affectedVersion}"
replacements = '1.1.0'
bug_info = get_bug_info(jira_filter, replacements)

涉及JQL知识:JQL语法及Python查询 Jira issue信息
Template使用:Python string模块中Template的substitute()使用

5、拼接日报内容

    html_data = confluence_read(xxxxx)# print(html_data)table = beaut_table_data(html_data).find_all('table')# print(table[1])df = pd.read_html(str(table[1]))[0]# print(df)process_col_title = ['iOS', 'Android', 'H5/服务端']doing = []done = []affected_versions = []replacements = {}for index, row in df.iterrows():# print(index)# print(row)if index == 0:table_title = row[0].split('(')# print(table_title)affected_versions.append(table_title[0])# print(affected_versions[0])replacements = {'affectedVersion': affected_versions[0]}if row[0] != '需求名称' and row[0] != '主需求' and index >= 1:col_values = [row[i] if not (isinstance(row[i], float) and math.isnan(row[i])) else '' for i in range(3, 6)]# print(col_values)if not any(col_values) or not any(re.search(pattern, col_value) is not None for col_value in col_values):continuetitle_col_value = row[0]# print(title_col_value)if any(re.search(pattern, col_value) is not None and set(col_value.split(',')) != {'100%'} for col_value in col_values):col_values = ['不涉及' if re.search(pattern, i) is None else i for i in col_values]# print(col_values)doing_rate_info = [f'{process_col_title[i]}-{col_values[i]}' for i in range(len(process_col_title))]# print(doing_rate_info)doing.append(f'{title_col_value},【进度:{", ".join(doing_rate_info)}】')else:done.append(title_col_value)# print(doing)# print(done)doing = '\n\n> - '.join(doing)done = '\n\n> - '.join(done)buglist = '\n\n> - '.join(bug_info) if bug_info else '暂无'# print(doing)# print(done)

6、钉钉发送日报信息

def send_dingtalk_message(webhook_url, message, msg_type, title):headers = {'Content-Type': 'application/json'}if msg_type == 'markdown':data = {'msgtype': msg_type, 'markdown': {'title': title, 'text': message}}else:data = {'msgtype': msg_type, 'text': {'content': message}}response = requests.post(url=webhook_url, headers=headers, data=json.dumps(data))if response.status_code == 200:logger.info("Message sent successfully to DingTalk!")else:logger.info("Failed to send message to DingTalk")logger.info(f"Response status code: {response.status_code}")logger.info(f"Response content: {response.text}")

webhook_url获取:钉钉添加自定义机器人,实现每周定时@某人

7、最终效果
使用Markdown格式发送日报:
在这里插入图片描述
Markdown 基本语法:https://markdown.com.cn/basic-syntax/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/557339.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SRC中的一些信息收集姿势

前言 前前后后挖了四个月的EDUSRC,顺利从路人甲升到了网络安全专家,从提交的内容来看大部分还是以中低危为主,主打的就是弱口令和未授权。 在这过程中还是比较浮躁的,因此接下来的时间还是要好好沉淀一下自身的技术,学…

【解决navicat登录报 insufficient privileges 错误】

今天使用navicat sysdba角色登录报 insufficient privileges 以下是解决方案: 1、使用管理员身份打开cmd登录 sqlplus sys/admin as sysdba2、给system用户授权 grant sysdba to system;登录navicat

pstree 进程树

pstree -aup a是所有all u是用户user p是pid进程号

网络安全协议基本问题

Http和Https协议的端口号: Http:80 Https:443 网络监听: 网络监听是一种监视网络状态、数据流程以及网络上信息传输的工具,它可以将网络界面设定成监听模式,并且可以截获网络上所传输的信息。但是网络监…

【项目实践】VS配置Qt

文章目录 前言版本使用具体步骤1)安装Qt或者添加删除组件2)VS安装Qt Visual Studio Tools 如何使用遇到的问题双击ui文件编辑报错 前言 最近因为一个项目,需要使用Qt,本来想使用Python的,但是由于另外一个第三方的库是…

谷粒商城——缓存的概念

1. 使用缓存的好处:减少数据库的访问频率,提高用户获取数据的速度。 2. 什么样的数据适合存储到缓存中? ①及时性、数据一致性要求不高的数据,例如物流信息、商品类目信息 ②访问量大更新频率不高的数据(读多、写少) 3. 读模式…

【Java11下载、安装、部署指南】

oracle jdk11下载 oracle jdk所有版本归档【archive】下载地址: https://www.oracle.com/java/technologies/downloads/archive/ oracle jdk11下载地址: https://www.oracle.com/java/technologies/javase/jdk11-archive-downloads.html 配置或修改wi…

【文末附gpt升级4.0方案】FastGPT详解

FastGPT知识库结构讲解 FastGPT是一个基于GPT模型的知识库,它的结构可以分为以下几个部分: 1. 数据收集:FastGPT的知识库是通过从互联网上收集大量的文本数据来构建的。这些数据可以包括维基百科、新闻文章、论坛帖子等各种类型的文本。 2…

河北库卡机器人KR500电源模块故障,该如何处理?

库卡机器人KR500电源模块常见故障类型及维修方法 1)电源模块故障指示灯亮 故障现象:库卡机器人KR500电源模块上的故障指示灯亮起,机器人不能正常工作。 维修方法:根据故障指示灯的闪烁频率或颜色判断具体的故障类型。然后&#xf…

Vue3学习记录(七)--- 组合式API之指令和插件

一、内置指令 1、v-memo ​ 该指令是Vue3的v3.2版本之后新增的指令,用于实现组件模板缓存,优化组件更新时的性能。该指令接收一个固定长度的依赖值数组,在组件进行更新渲染时,如果数组中的每个依赖值都与上一次渲染时的值相同&a…

【php基础】输出、变量、布尔类型、字符串

php基础补充 1. 输出2.和"的区别3.变量3.1变量的命名规则3.2 两个对象指向同一个值3.3 可变变量 4.变量的作用域5. 检测变量6. 布尔类型7.字符串定义与转义8.字符串常用函数9.常量 1. 输出 echo: 输出 print: 输出,输出成功返回1 print_r(): 输出数组 var_dum…

AndroidStudio 由dolphin升级到giraffe,出现“gradle project sync failed“

1 现象描述 将AS由之前的dolphin版本升级到giraffe之后,接着打开以前的Android project,出现了"Gradle project sync failed…"的异常提示,在build面板中并没有出现project sync过程中报错的日志。 异常提示如下图所示&#xff1a…