awk优化钉钉通知测试报告
一、背景
在之前的博客 Go服务自动触发单元测试覆盖率 中钉钉通知的效果实现如下图:

最近RD提出对本次和上次覆盖率的比对需求,并把比对结果也显示在钉钉通知上。
二、实现思路
要实现数据比对,就需要对上次的数据进行存储,那该怎么存储呢?
1、存储到MySQL
2、以文件的形式存储到slave机器上,然后再读取文件获得上次的数据
因为就只是一个数据而已,所以就不劳烦MySQL了,确定选择方法2。

go test命令输出的原始数据格式:
localhost:z_data aaa$ cat this_yuanshi.txt
ok k-p/dashboard/api 0.014s coverage: 85.7% of statements
FAIL k-p/dashboard/auth [build failed]
ok k-p/dashboard/auth/api 0.013s coverage: 53.8% of statements
ok k-p/dashboard/auth/jwe 3.527s coverage: 61.0% of statements
ok k-p/dashboard/cert/ecdsa 0.014s coverage: 13.2% of statements
FAIL k-p/dashboard/client [build failed]
ok k-p/dashboard/client/api 0.318s coverage: 16.7% of statements
ok k-p/dashboard/client/csrf 0.020s coverage: 88.2% of statements
2020-07-22T15:39:57.371+0800 DEBUG logger/logger.go:53 logger init ok
--- FAIL: TestInit (0.00s)
panic: open /workspace/code/xes/k-p/cicd/conf/conf.json: no such file or directory [recovered]
panic: open /workspace/code/xes/k-p/cicd/conf/conf.json: no such file or directory goroutine 7 [running]:
覆盖率取coverage后百分比的平均数,前提是本行记录以“ok”开头。
目标有了,那怎么拿到覆盖率?分两步走:
第一步:把符合以“ok”开头的行写入一个新txt文件,如:guolv.txt
find this_yuanshi.txt | xargs cat | grep ^ok > guolv.txt
第二步:求guolv.txt中每行coverage后百分比的平均数
this_num=$(awk 'BEGIN{count=0}{count+=$5}END{printf("%.1f%%",count/NR)}' guolv.txt)
有了数据,接下来就是 发送钉钉通知 和 本次数据覆盖上次数据 两步。
完整的脚本:
#!/bin/bash
source /etc/profile
source /Users/aaa/.bash_profile
set +x
this_path="/Users/xes/CI/reports/***/z_data" git clone https://***/***/***.git k-p cd kubernetes-platform echo "生成.out文件"
go test ./... -coverprofile=cover.out > $this_path/this_yuanshi.txt cd $this_path
#获取本次的覆盖率
find this_yuanshi.txt | xargs cat | grep ^ok > guolv.txt
this_num=$(awk 'BEGIN{count=0}{count+=$5}END{printf("%.1f%%",count/NR)}' guolv.txt) #获取上次的覆盖率,如果没有则创建文件
if [./last_num.txt]
then
last_num=$(cat ./last_num.txt)
echo $last_num
else
touch ./last_num.txt
fi cd -
echo "生成Html报告"
go tool cover -html=cover.out -o coverage.html #发送钉钉通知
cd $this_path
this_time=$(cat this_num.txt)
last_time=$(cat last_num.txt)
now=$(echo $this_time|cut -b 1,2,3,4)
last=$(echo $last_time|cut -b 1,2,3,4)
change=$(echo | awk "{print $now - $last}")
json='{"msgtype":"link","link":{"text":"本次:'"$this_time"' 上次:'"$last_time"' 变化:'"$change%"'\n\n点击查看本次和上次的HTML报告","title":"k-p单元测试覆盖率统计","picUrl":"https://***/***/avatar1/18b85ab1eddf66dd5be67d62489db637_s120.jpg ","messageUrl":"http://***:8080/***-platform-unitcover"}}'
curl -H "Content-Type:application/json;charset=utf-8" -X POST -d "$json" https://oapi.dingtalk.com/robot/send?access_token=29d4bf78f0105e66f6d8d387bb4658ed42a6979452b6fdc7232527*** #把本次的覆盖率赋值给上次
cp ./this_num.txt ./last_num.txt
三、优化后效果

awk优化钉钉通知测试报告的更多相关文章
- [钉钉通知系列]Jenkins发布后自动通知
一.前言 最近使用Jenkins进行自动化部署,但是发布署后,并没有相应的通知,虽然有邮件发送通知,但是发现邮件会受限于大家接受的设置,导致不能及时看到相关的发布内容.由于之前有用Gitlab推送消息 ...
- 重新拾取:TFS2017钉钉机器人源代码签入通知
http://www.cnblogs.com/79039535/p/9316791.html 现在很多公司办公都使用钉钉打卡签到,于是鉴于公司也使用钉钉就打算用钉钉来做一个源代码签入通知. 首先先去打 ...
- 基于C#的钉钉SDK开发(1)--对官方SDK的重构优化
在前段时间,接触一个很喜欢钉钉并且已在内部场景广泛使用钉钉进行工厂内部管理的客户,如钉钉考勤.日常审批.钉钉投影.钉钉门禁等等方面,才体会到原来钉钉已经已经在企业上可以用的很广泛的,因此回过头来学习研 ...
- jenkins 集成钉钉机器人通知
公司使用钉钉做为公司内部的通讯工具,所以想通过Jenkins发布完成以后通过钉钉来通知大家,研究发现钉钉提供机器人,所以我把机器人集成进来通知相关人员. 1.创建通知人群组,添加机器人(钉钉默认自带了 ...
- jenkins 构建后发送钉钉消息通知(插件)
钉钉,越来越多的公司采用,那么我们在持续集成中,也可以直接选择钉钉插件的,在之前的博客中 ,对发送的钉钉消息进行了定制,那样的话会开启一个新的任务, 其实今天呢,我们可以直接安装一个插件就可以发送了, ...
- Jenkins发布后自动通知【钉钉】
阅读目录 一.前言 二.使用钉钉推送的优势 三.配置 一.前言 最近使用Jenkins进行自动化部署,但是发布署后,并没有相应的通知,虽然有邮件发送通知,但是发现邮件会受限于大家接受的设置,导致不能及 ...
- jenkis +sonarqube 对后端代码静态扫描,钉钉群通知执行结果(记录)
代码提交,触发后端sonar测试,测试完成,jenkins触发依赖任务,执行python脚本,达到预期,调用上线任务模块,进行上线,达不到预期,钉钉群通知. 牵涉到配置: 1.配置sonar测试任务 ...
- 钉钉机器人-实现监控通知功能-python
1. 首先得创建有 一个 钉钉群.(因为只能发群通知) 2. 添加机器人,得到一个url: 3. 开始写Python脚本: # -*- coding: utf-8 -*- ""&q ...
- [转] 钉钉的H5性能优化方案
对于一个H5的产品,功能无疑很重要,但是性能同样是用户体验中不可或缺的一环.原本H5的渲染性能就不及native的app,如果不把性能优化做起来,将极大地影响用户使用产品的积极性. 用户感受 当用户能 ...
- 基础架构之日志管理平台及钉钉&邮件告警通知
接上一篇,我们继续解释如何把ELK跟钉钉及发送邮件功能结合起来,让我们及时的了解重要日志并快速反馈. Sentinel 安装,项目介绍在https://github.com/sirensolution ...
随机推荐
- 【动画进阶】神奇的卡片 Hover 效果与 Blur 的特性探究
本文,我们将一起探讨探讨,如下所示的一个卡片 Hover 动画,应该如何实现: 这个效果的几个难点: 鼠标移动的过程中,展示当前卡片边缘的 border 以及发光效果: 效果只出现在鼠标附近?这一块的 ...
- Sealos 就是小团队的神器
作者:阳明.Kubernetes 布道师,公众号 K8s 技术圈主理人 最近我们新开发了一个项目 fastclass.cn,这个项目是一个独立开发者的学习网站,我们的目标是帮助你使用 Figma.Py ...
- java如何保证一个方法只能执行一次
我们经常会遇到一些情况需要某一个方法或者操作只执行一次,比如说配置信息加载,如果配置信息需要动态刷新,这个不在适用范围.下面列举几种方式 第一种 如果是web容器,可以使用servlet或者Liste ...
- 手把手教你利用鸿蒙OS实现智慧家居·LOT上云项目
手把手教你利用鸿蒙OS实现智慧家居·LOT上云项目 一.前言 今天使用鸿蒙OS,做一个LOT上云的智慧家居项目.我们想实现的场景是这样的:云端WEB有一个控制界面,能够操控家房间里的灯和风扇,同时将房 ...
- 如何用AI抠图助手进行直播--新手指南
如何用AI抠图助手进行直播 因AI抠图助手目前还没有提供推流直播,所以,可以采用抖音的"手游直播"方式,即抖音开启手游直播后会录制你手机屏幕画面,进行录屏直播:所以我们只要打开AI ...
- 基于docker搭建单机测试ELK
说明:本次使用的windows系统,利用vm进行安装虚拟机,安装的只是单测试单机版elk. 一.下载vm 自行官网下载 二.安装centos7系统 自己有现成的镜像跳过,没有自行查找资料完成 三.进行 ...
- Python新手爬虫二:爬取搜狗图片(动态)
经过上一期爬取豆瓣影评成功后,感觉爬虫还不错,于是想爬点图片来玩玩... 搜狗图片地址:https://pic.sogou.com/?from=category 先上最后成功的源码(在D盘下创建sou ...
- 模N取余法实现大整数进制转换 ——C语言版(2-16进制均可)
思路如标题所说采用模N取余法,难点是这个除法过程如何实现. 个人推荐先到这篇博客学习一下,大佬的思路就是不一样:大数除法--超详细讲解 我所做的就是在上面博文代码的基础上增加了循环,用一个字符数组逆序 ...
- ArgoWorkflow教程(四)---Workflow & 日志归档
上一篇我们分析了argo-workflow 中的 artifact,包括 artifact-repository 配置以及 Workflow 中如何使用 artifact.本篇主要分析流水线 GC 以 ...
- C++ STL set/multiset容器
set/multiset容器 简介 Set的特性是,所有元素都会根据元素的值自动被排序.Set不允许两个元素有相同的值. Set的迭代器iterator是一种const_iterator,不能通过迭代 ...