EasyPytest测试平台开发日志之系统设计

news2025/2/28 0:20:03

EasyPytest测试平台,帮你高效管理Pytest测试用例。

EP平台的定位是Pytest测试用例管理平台,80%的自动化用例开发在PyCharm等专业的IDE中进行,20%的用例调度和结果查看就交给EP平台来管理。

EP平台是对teprunner测试平台的一次全新升级,迭代一的开发目标是将后端Django切换为FastAPI,代码以更合理更精简更规范的方式重构,并做部分功能优化。

相对于teprunner平台,重新设计的EasyPytest平台有2个较大变化:

1、用例支持串行和并行(pytest-xdist);

2、测试计划的结果直接链接到Allure HTML报告(FastAPI mount);

业务架构图

系统架构图

数据库设计

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',
  `username` varchar(32) NOT NULL COMMENT '用户名',
  `nickname` varchar(32) NOT NULL COMMENT '昵称',
  `password` varchar(128) NOT NULL COMMENT '密码',
  `is_superuser` tinyint(2) DEFAULT '0' COMMENT '是否管理员:0-否,1-是',
  `is_deleted` tinyint(2) DEFAULT '0' COMMENT '是否逻辑删除:0-否,1-是',
  `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  `updated_at` timestamp NULL DEFAULT NULL COMMENT '最近修改时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=100000 DEFAULT CHARSET=utf8 COMMENT='用户表';

DROP TABLE IF EXISTS `project`;
CREATE TABLE `project` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',
  `name` varchar(64) NOT NULL COMMENT '项目名称',
  `is_deleted` tinyint(2) DEFAULT '0' COMMENT '是否逻辑删除:0-否,1-是',
  `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  `updated_at` timestamp NULL DEFAULT NULL COMMENT '最近修改时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=100000 DEFAULT CHARSET=utf8 COMMENT='项目表';

DROP TABLE IF EXISTS `environment`;
CREATE TABLE `environment` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',
  `name` varchar(32) NOT NULL COMMENT '环境名称',
  `project_id` bigint(20) NOT NULL COMMENT '项目id',
  `is_deleted` tinyint(2) DEFAULT '0' COMMENT '是否逻辑删除:0-否,1-是',
  `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  `updated_at` timestamp NULL DEFAULT NULL COMMENT '最近修改时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=100000 DEFAULT CHARSET=utf8 COMMENT='环境表';

DROP TABLE IF EXISTS `variable`;
CREATE TABLE `variable` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',
  `name` varchar(64) NOT NULL COMMENT '变量名',
  `value` varchar(512) NOT NULL COMMENT '变量值',
  `desc` varchar(256) NOT NULL COMMENT '变量描述',
  `project_id` bigint(20) NOT NULL COMMENT '项目id',
  `env_id` bigint(20) NOT NULL COMMENT '环境id',
  `is_deleted` tinyint(2) DEFAULT '0' COMMENT '是否逻辑删除:0-否,1-是',
  `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  `updated_at` timestamp NULL DEFAULT NULL COMMENT '最近修改时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=100000 DEFAULT CHARSET=utf8 COMMENT='变量表';

DROP TABLE IF EXISTS `fixture`;
CREATE TABLE `fixture` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',
  `name` varchar(64) NOT NULL COMMENT 'fixture名称',
  `code` text NOT NULL COMMENT 'fixture代码',
  `desc` varchar(256) NOT NULL COMMENT 'fixture描述',
  `project_id` bigint(20) NOT NULL COMMENT '项目id',
  `creator_id` bigint(20) NOT NULL COMMENT '创建人id',
  `is_deleted` tinyint(2) DEFAULT '0' COMMENT '是否逻辑删除:0-否,1-是',
  `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  `updated_at` timestamp NULL DEFAULT NULL COMMENT '最近修改时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=100000 DEFAULT CHARSET=utf8 COMMENT='用例依赖表';

DROP TABLE IF EXISTS `case`;
CREATE TABLE `case` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',
  `name` varchar(64) NOT NULL COMMENT '用例名称',
  `code` text NOT NULL COMMENT '用例代码',
  `desc` varchar(256) NOT NULL COMMENT '用例描述',
  `project_id` bigint(20) NOT NULL COMMENT '项目id',
  `creator_id` bigint(20) NOT NULL COMMENT '创建人id',
  `is_deleted` tinyint(2) DEFAULT '0' COMMENT '是否逻辑删除:0-否,1-是',
  `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  `updated_at` timestamp NULL DEFAULT NULL COMMENT '最近修改时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=100000 DEFAULT CHARSET=utf8 COMMENT='用例表';

DROP TABLE IF EXISTS `result`;
CREATE TABLE `result` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',
  `case_id` bigint(20) NOT NULL COMMENT '用例id',
  `status` varchar(32) NOT NULL COMMENT '结果状态',
  `log` text NOT NULL COMMENT '运行日志',
  `elapsed` varchar(32) NOT NULL COMMENT '运行耗时',
  `run_env_id` bigint(20) NOT NULL COMMENT '运行环境id',
  `run_user_id` bigint(20) NOT NULL COMMENT '运行用户id',
  `run_time` timestamp NOT NULL COMMENT '运行时间',
  `is_deleted` tinyint(2) DEFAULT '0' COMMENT '是否逻辑删除:0-否,1-是',
  `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  `updated_at` timestamp NULL DEFAULT NULL COMMENT '最近修改时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=100000 DEFAULT CHARSET=utf8 COMMENT='用例结果表';

DROP TABLE IF EXISTS `plan`;
CREATE TABLE `plan` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',
  `name` varchar(64) NOT NULL COMMENT '计划名称',
  `onoff` tinyint(2) NOT NULL COMMENT '启动开关:0-关闭,1-启动',
  `crontab` varchar(128) NOT NULL COMMENT 'crontab执行周期表达式',
  `run_env_id` bigint(20) NOT NULL COMMENT '运行环境id',
  `creator_id` bigint(20) NOT NULL COMMENT '创建人id',
  `is_deleted` tinyint(2) DEFAULT '0' COMMENT '是否逻辑删除:0-否,1-是',
  `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  `updated_at` timestamp NULL DEFAULT NULL COMMENT '最近修改时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=100000 DEFAULT CHARSET=utf8 COMMENT='测试计划表';

DROP TABLE IF EXISTS `plan_case`;
CREATE TABLE `plan_case` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',
  `plan_id` bigint(20) NOT NULL COMMENT '计划id',
  `case_id` bigint(20) NOT NULL COMMENT '用例id',
  `is_deleted` tinyint(2) DEFAULT '0' COMMENT '是否逻辑删除:0-否,1-是',
  `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  `updated_at` timestamp NULL DEFAULT NULL COMMENT '最近修改时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=100000 DEFAULT CHARSET=utf8 COMMENT='计划用例关系表';

DROP TABLE IF EXISTS `report`;
CREATE TABLE `report` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',
  `plan_id` bigint(20) NOT NULL COMMENT '计划id',
  `location` varchar(256) NOT NULL COMMENT '报告地址',
  `run_env_id` bigint(20) NOT NULL COMMENT '运行环境id',
  `run_user_id` bigint(20) NOT NULL COMMENT '运行用户id',
  `run_time` timestamp NOT NULL COMMENT '运行时间',
  `is_deleted` tinyint(2) DEFAULT '0' COMMENT '是否逻辑删除:0-否,1-是',
  `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  `updated_at` timestamp NULL DEFAULT NULL COMMENT '最近修改时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=100000 DEFAULT CHARSET=utf8 COMMENT='测试报告表';

接口设计

接口文档使用FastAPI生成,源码:

https://gitee.com/dongfanger/ep-api

项目目录结构设计

参考FastAPI官方项目生成器:

https://github.com/tiangolo/full-stack-fastapi-postgresql

生成的示例项目:

设计EP平台的项目目录结构:

各模块尽量独立,以尽量减少多人协作开发代码冲突,提高编码效率。

EP平台在开发过程中会不定期发布开发日志,开发完成后也会有完善的帮助手册,后续迭代应该还会采用报名+多人协作开发的模式,欢迎持续关注~

参考资料:

开发阶段源码: https://gitee.com/dongfanger/easy-pytest

发布阶段源码: https://github.com/dongfanger/EasyPytest

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【设计模式】 工厂模式 (三)

文章目录4.2 工厂模式4.2.1 概述4.2.2 简单工厂模式4.2.2.1 结构4.2.2.2 实现4.2.2.4 优缺点4.2.2.3 扩展4.2.3 工厂方法模式4.2.3.1 概念4.2.3.2 结构4.2.3.3 实现4.2.3.4 优缺点4.2.4 抽象工厂模式4.2.4.1 概念4.2.4.2 结构4.2.4.2 实现4.2.4.3 优缺点4.2.4.4 使用场景4.2.5 …

【电脑使用】硬盘无法引导进入系统,无法退出BIOS

前言 因为想要给自己的笔记本添置装备,于是想着把老电脑上的固态拆下来,但是考虑到老电脑虽然不常用,但还是偶尔会用,不能是瘫痪状态,于是想把我之前淘到的一个机械硬盘换上去,结果发现无法引导进入系统&am…

【JavaEE】HTTP(Part1 含面试题)

努力经营当下,直至未来明朗! 文章目录前言一、HTTP协议抓包工具协议总格式(重要!!)二、HTTP协议中的细节【HTTP请求】【HTTP中的“方法”】【GET】:最常用的HTTP请求【POST】【认识请求“报头”…

SecureBridge Alexandria Release 2和iOS 15的支持

SecureBridge Alexandria Release 2和iOS 15的支持 添加了对Embarcadero RAD Studio 11 Alexandria Release 2的支持。 增加了对Apple iOS模拟器ARM 64位目标平台的支持。 增加了对Lazarus 2.2.2的支持。 添加了对Apple iOS 15的支持。 增加了对Android 12的支持。 SSH、SFTP、…

ubuntu 安装 colmap

目录 一、安装colmap 二、报错解决 三、安装成功 四、colmap使用教程 一、安装colmap 参考安装:​​​​​​​chttps://blog.csdn.net/weixin_46132232/article/details/124211233 官方:COLMAP 官方information 二、报错解决 2.1 在安装colmap的…

HashMap源码解析

HashMap源码解析 基础入门 什么是哈希 核心理论:Hash 也称散列、哈希,对应的英文都是 Hash。基本原理就是把任意长度的输入,通过Hash算法变为固定长度输出。 这个映射的规则就是对应的 Hash 算法,而原始数据映射后的二进制串就…

飞桨VisualDL本地运行问题

最近参加了百度飞桨的基于深度学习的自然语言处理 免费AI课程,有一道作业题是要利用飞桨提供的可视化工具VisualDL查看词向量降维效果。由于安全方面的原因,AI Studio中的可视化服务无法使用了。当按照作业步骤,生成日志文件后: 添…

Vue3+Element-ul学生管理系统(项目实战)

Vue3Element-ul学生管理系统(项目实战) 要发奋做一个可爱的人。不埋怨谁,不嘲笑谁,也不羡慕谁,阳光下灿烂,风雨中奔跑,做自我的梦,走自我的路! 看本项目的前提自己学过Vue2Vue3Elementui组件库 …

Python学习笔记-操作数据库

记述python中关于数据库的基本操作。 一、数据库编程接口 1.连接对象 数据库连接对象(Connection Object)提供获取数据库游标对象、回滚事物的方法,以及连接、关闭数据库连接。 1.1 获取连接对象 使用connect()方法获得连接对象&#xf…

STM32F4 | 定时器中断实验

文章目录一、STM32F429 通用定时器简介二、硬件设计三、软件设计四、实验现象五、STM32CubeMX 配置定时器更新中断功能这一章介绍如何使用 STM32F429 的通用定时器, STM32F429 的定时器功能十分强大,有 TIME1 和 TIME8 等高级定时器,也有 …

从外包到拿下阿里 offer,这 2 年 5 个月 13 天到底发生了什么?

开篇介绍 个人背景: 不说太多废话,但起码要让你先对我有一个基本的了解。本人毕业于浙江某二本院校,算是科班出身,毕业后就进了一家外包公司做开发,当然不是阿里的外包,具体什么公司就不透露了&#xff0…

机器学习100天(一):001 开发环境搭建

机器学习实战需要编写代码,选择一个好的 IDE 能大大提高我们的开发效率。基于 Python 的广泛使用,我们给大家介绍当前最流行的机器学习开发工具包:Anaconda。 一、为什么选择 Anaconda 我们知道 Python 是人工智能的首选语言。为了更好、更方便地使用 Python 来编写机器学…

Linux||后续1:Ubuntu20.04安装MySQL8.0纯命令图文教程(安装+排错+可视化工具+常用命令)

我是碎碎念:) 之前写过一篇用Ubuntu20.04安装MySQL的教程,指路如下 Linux||Ubuntu20.04安装MySQL详细图文教程_Inochigohan的博客-CSDN博客 但方法不是用Linux命令安装的,感觉用着不太顺手😜 索性就重装一遍,纯当是温故而知新好啦…

为什么我们越来越反感「消息通知」?

在日常生活中,我们可以接触到很多「消息通知」: ● 响起门铃声意味着门外有人来访; ● 开车时,仪表盘上显示的发动机温度、行车速度等信息,辅助我们随时了解汽车情况; ● 每当手机电量低于20%时&#xf…

C++ 银行家算法与时间片轮转调度算法结合

一.实验目的 (1) 掌握 RR(时间片调度) 算法,了解 RR 进程调度 (2) 了解死锁概念,理解安全状态,并且理解银行家算法 (3) 利用 RR 进程调度与银行家算法结合,写出一个简单的项目 二.实验原理 2.1 时间片调度算法 在分时系统中都…

SpringBoot整合WebSocket实现简易聊天室

文章目录什么是WebSocket ?WebSocket通信模型为什么需要WebSocketWebsocket与http的关系SpringBoot集成WebSocket什么是WebSocket ? WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动…

Opencv(C++)笔记--腐蚀与膨胀操作、创建滑动条

目录 1--膨胀操作 2--腐蚀操作 3--腐蚀和膨胀的作用 4--创建滑动条 5--实例代码 1--膨胀操作 ① 原理: 将图像(原图像的一部分 A )与核矩阵(结构元素 B )进行运算,将结构元素 B 覆盖图像 A&#xff0…

[附源码]Nodejs计算机毕业设计基于的数字图书馆系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

离散被解释变量

一、二值选择模型 采用probit或者logit模型 logit y x1 x2 ,nolog r vce(cluster clustervar) ornolog表示不用显示迭代过程vce(cluster cluster)表示运用聚类标准误,由于二值选择模型一般采用稳健标准误的意义不大,所以常常使用聚类标准误。or 表示结…

数据可视化:对比漏斗图多维度分析大学在校实际开销情况

都说80后90后是“苦逼”的一代,他们读小学的时候,上大学免费;等到他们上大学了,读小学免费。可事实真的是这样吗?下面小编用一款数据可视化软件,带你解读一下现在的大学生,开销到底有多少。 漏…