数据工厂系列(29)数据报表展示

大家好~我是小方,欢迎大家关注笋货测试笔记 体完记得俾个like

回顾

在上篇中,整个数据工厂的核心已经是开发完毕了,但是平台的话,肯定得有一些数据报表,好看的报表可以给你升职加薪带来帮助···

数据报表

数据报表有几个指标,大家可以看看下图

用户数、场景数、项目数、业务线数、调用成功率、调用量···

执行状态、调用方式、业务线分布饼图

最后有最近7天场景调用量、创建量、成功数、异常数、失败数···

  • 最上面6个指标

直接调用BaseCrud.get_with_count方法即可,直接查询出数量

  • 中间饼图指标

运行状态和调用方式直接查log表,进行分组统计数量,业务线分布查case表,方式同上···

  • 最近7天场景趋势图

这里指标有调用量、成功数、失败数、异常数、创建数,其中除了创建数,其他指标都可以通过log查询得出

先通过开始时间和结束时间进行筛选数据,开始时间为今天,结束时间为今天-6天,再通过日期进行分组,通过函数case_whensum算出成功数、失败数、异常数,通过count算出总数,但是这里需要注意一点,有些日期确实没有数据,这时候需要手动补充数据,通过while,从开始日期开始算起,如果在源数据取不到数据,就默认补充0,循环结束条件为开始日期大于结束日期···

最终效果图

git Webhook同步项目

因为我们的服务跟项目进行解耦了,项目存放在git上,每次我们更新代码,是不是都得在平台上执行一下同步项目,长久下来确实比较繁琐,为此,我们可以使用git的webhook功能,每当有push代码时,通过webhook调用数据工厂的api,执行同步项目···

我们可以来看看gitee的webhook功能,简介地址:gitee.com/help/articl...

  • WebHook 简介

简单来讲就是我们只要维护一个api,每次push时,post请求这个api,就能实现同步项目功能

  • WebHook 密钥验证和验证算法

gitee webhook文档有说到,webhook可使用签名方式,什么是签名呢?通俗来讲就是服务端确认收到的请求完整且可信任,才执行操作,这种就是防止恶意刷api

这里采用了HmacSHA256算法计算签名,下面也给了个demo,但是demo只支持Python2,不得不不吐槽一下···不过问题不大,自己另写一个呗,签名算法代码如下

python 复制代码
class Sha256(object):

    @classmethod
    def encrypt(cls, timestamp: str):
        secret = constants.SECRET
        data = f"{timestamp}\n{secret}"
        sign = base64.b64encode(
            hmac.new(secret.encode('utf-8'), data.encode('utf-8'), digestmod=sha256).digest()).decode()
        return sign
  • 同步逻辑代码改造

将之前的sync_project_logic方法改造一下,判断是哪个sys过来的请求,如果是平台上就通过主键id查出项目信息,执行人默认为请求的那个人,如果是gitee的webhook就通过git的项目名称查出项目信息,执行人为admin用户,后续的逻辑跟之前一样

上面已经写了个签名方法,我们只需要验证gitee传过来的签名数据是否与后端服务加密生成的签名数据一致,一致即可后续的操作···

这里我们只需要从request中获取请求头信息,再进行校验好了,check逻辑比较简单,大家可看看下面的代码

其实这里校验逻辑可以放在中间件里做,但是就这么一个api没什么必要···具体原因可看看解释哈,溜达哥yyds!!!

最终sync_project_logic_by_git逻辑如下

路由函数这里就不截图,直接看看源码好了···比较简单,添加路由

最后记得给这个路由加上白名单

其他优化点

脚本执行引入运行日志,日志的话,需要手工注入进去,然后最后return回来,平台只负责接收日志

最后给大家看看内部数据工厂的日志吧,后续我也把相关日志装饰器放上去,在funcase项目哦~

总结

今天到这里的话,数据工厂已经开发完了,大家还有什么需求或者想法可以咨询我,大家一起交流学习哈~下篇我们来进行部署上线,继续补充使用说明文档、功能介绍文档和部署文档等等···

相关推荐
tryCbest9 分钟前
FastAPI中passlib包的作用
python·fastapi·passlib
心中有你021423 分钟前
Python Tkinter 情侣恋爱日记桌面小程序(本地文件存储,无数据库)
开发语言·python
PFFstronger26 分钟前
从 0 到 1 搭建接口自动化测试框架:分层架构 + 数据驱动 + 接口依赖编排
python·架构·自动化
Andya_net30 分钟前
Spring Boot | 条件注解完全指南:从 @Conditional 到 @ConditionalOnExpression 的原理、实践与避坑
spring boot·后端·python
weixin_440730501 小时前
playwright浏览器自动化实战笔记3-登陆以及退出登陆流程-多用户操作
笔记·python·自动化
卷无止境1 小时前
测试全绿,功能能跑,代码却烂到没法上线:AI编程助手留下的十个坑
后端·python
卷无止境1 小时前
终端里的AI战争,命令行编程代理全景扫描
python·agent
SamChan901 小时前
PDF多语言翻译的格式还原技术拆解:从版面分析到内容重排的工程实现
python·ai·pdf·机器翻译
liuze4082 小时前
安装boss-zhipin-mcp(招聘)
开发语言·python
TickDB2 小时前
Python 接入 A 股盘前集合竞价数据:AkShare 报错到 TickDB 实测的完整解法
python·websocket·行情数据 api