EasyPytest測試平臺開發日誌之系統設計

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章