测试平台系列(31) 编写环境配置页面(上)

简介: 编写环境配置页面(上)

编写环境管理页面


之前的篇幅里面说过,用例没有根据环境去划分它的归属,其实这样也是不太合理的,毕竟不同的环境需要的数据可能不一致,并不一定能编写完全通用的用例。所以今天我打算从这个页面下手,手把手教大家编写一个完整的CRUD功能(带前端+联调)。后面前端的部分,如果大家不感兴趣的话,只看后端就好了。因为会有一系列的截图!看完不说半条命,那半小时肯定没了。

有的人可能不理解,环境不就是那几套吗?测试/预发/线上等等。是的,但是各个公司会叫不同的名字,所以我们为了制作一款大众且通用的工具,所以提供他们维护自己环境的功能。

CRUD/CURD是什么


经常逛脉脉的同学肯定都知道,经常能看到CURD CRUD CRUD boy这样的词汇。直白点说,curd指的就是增删改查,我们今天的内容就是这个,且听我一一道来。


  • 公司最近开了一个新的环境:fat2,我们系统得维护起来,所以我们需要新增一条fat2环境的数据。

  • 公司又不用这个环境了,想去掉这个环境,免得混淆视听。

  • fat2环境公司觉得不好听,公司决定改成fat-beta。

  • 公司现在有100多种环境,太多了,需要查询是否有fat77这个环境。

没错,其实很多开发做的功能都与这个接近。大部分时间都是在做一些crud的工作。上述是细化到我们这一次环境管理的功能点,如果你觉得难的话,耐心看完(抄完)你就不会觉得难了。

明确思路


首先我们先要搞清楚本次需求,其实需求很简单,就是想给用户提供自定义环境名的功能。那么我们是不是在数据库需要存储这些环境的信息。最基本的信息需要哪些呢?我这里列一下:

数据表准备

核心字段:

  • 环境名称

比如fat uat pro (是否能重复?那肯定是不能重复的呀!)

  • 环境备注

比如fat是测试环境啥的啥的,其实也可以不要,但是给你一个选项,万一你需要添加一些说明呢

基本字段:

  • 创建人是谁
  • 修改人是谁
  • 什么时候创建的
  • 什么时候更新的
  • 被删除了木有

功能需求准备

  • 环境可以通过名字模糊查询
  • 可以编辑,编辑后会更新编辑时间
  • 可以添加
  • 可以删除
    功能一拆分,是不是特别简单了,其实需求没多少,后端可能1小时不到就搞定了,前端还是费时间的。

开始行动


定义model

既然表的字段不多,数据也不复杂,那么我们可以先定义model。

1.jpg

image

内容不难,熟悉sqlalchemy就更轻松了。目的是为了映射一个数据表(环境表)的类

tablename 表示当前class对应的数据库表名,我们这里为了区分,统一加上pity_前缀。

后面的内容就是对字段的定义以及初始化类。

生成model


2.jpg

image

为了能自动生成数据表,我们需要在dao/init.py里面import这个model类。

定义Pydantic的schema


3.jpg

image

这一步的目的很简单,就是为了做参数校验,比如有的哥们很坏,他创建环境的时候,直接给你来个空字符串或者空格字符串的环境名,所以遇到这样的人,我们要鄙视他,在数据插入数据库之前就检测到,并给他沉重打击。这里熟悉pydantic的同学,都了解,不熟悉的话建议去阅读以下Pydantic的官方文档,或者照着抄就是了。

大体意思就是定义了一个Environment的表单,里面有3个参数: id、name、remarks,对应的就是id,环境名和备注。其中name不能为空,备注随便你,写不写都行,id你也可以不传,不传就默认为None。

编写Dao层(与db交互的核心内容)


新增环境

4.jpg

image

由于环境也算配置里面的一套内容,后续要和全局变量放到一起,所以我们给他归档到config目录下。

来看看这个新增环境的功能都做了啥。

首先固定搭配,这个dddd(懂的都懂)。从数据库拿到一个session,类似于db.cursor()也类似于jdbc里面的getConnection。


with Session() as session:

接着,根据我们的业务逻辑,虽然咱们数据库设置name为unique,我们还是先查询是否有这个name并且deleted_at=None(删除时间=None 代表未被删除的)的环境数据,如果有的话,我们不继续新增了,返回一个提示信息就行。

否则呢,我们就把数据插到数据库并用session进行提交。如果中途发生异常,我们就该记录日志的记录日志,该返回错误的返回错误。如果没啥问题就返回None,代表大吉大利,相安无事

  • 编辑环境

5.jpg

image

套路都是一样的,甚至代码也很接近。但是注意到有个区别,这里调用了update_model方法,这个方法是干啥的哩?

我们知道,更新一条数据,我们除了需要更改的字段以外,还得有更新人和更新时间这2个字段跟着修改。所以我们编写了一套通用的方法,把你传入的data数据,改到query里面,顺便改写一下更新时间和更新人。

6.jpg

image

not_null指的是,只更新非空字段,比如我本来有个数据是abc,你传None进来,我给他改成None了,这样可能会有误会。这里借鉴了gorm,只更新非null的字段。dist代表目标,source代表数据源。

  • 删除环境

7.jpg

image

其实删除环境,我们这里做的是软删除,所以其实它还是一个update的操作。我们通过id找到对应的数据,把它的deleted_at改成当前时间即可,顺便改一下更新人(留下罪证)。

  • 查询环境

8.jpg

image

注意,我这儿用的是list_env名称,为啥不是search呢?这里随你的便,我其实是把list和search合体了一下。可以看到我的name参数,如果不是None的时候,它就是个search动作,否则它是一个list操作。

search的根本条件是,deleted_at == None,也就是说不管怎么样,咱们都得保证数据没被删除。


if name:
    search.append(Environment.name.ilike("%{}%".format(name)))

如果name有传,或者不为""也不为None,那么我们加上对name的模糊查询,等价于where name ilike xxxxx

最后就是自动分页了,我们查出来的数据很多的话,不可能全部做展示,所以我们需要进行分页。page和size指的就是当前页码一页多少条数据

最后咱们通过created_at进行倒序排列,也就是说最新创建的在最前面。返回一个total,就是本次查询查到了多少条数据,以便于前端进行展示。

编写router


9.jpg

image

router层很简单,通过ApiRouter新建路由,并把list/insert/update/delete方法注册到路由。可以看到基本上代码量很少,属于调用dao层的核心方法,根据返回结果来返回http response。

10.jpg

image

值得注意的是,我没有用restful api去写接口,所以udpate/insert都是post请求,其他是get请求。(未出现put delete)

注册router


11.jpg

image

最后把刚才编写的router注册到app(pity)就可以了。

剧透下效果:

12.jpg

image


本期内容就到这里了,不水文虽然少点乐趣,但是hin充实呀!下一期以前端怎么curd为主,各位观众姥爷,拜了个拜!




相关文章
|
3月前
|
Kubernetes 测试技术 Perl
混沌测试平台 Chaos Mesh
混沌测试平台 Chaos Mesh
109 1
|
10天前
|
监控 安全 测试技术
构建高效的精准测试平台:设计与实现指南
在软件开发过程中,精准测试是确保产品质量和性能的关键环节。一个精准的测试平台能够自动化测试流程,提高测试效率,缩短测试周期,并提供准确的测试结果。本文将分享如何设计和实现一个精准测试平台,从需求分析到技术选型,再到具体的实现步骤。
45 1
|
28天前
|
人工智能 监控 测试技术
云应用开发平台测试
云应用开发平台测试
44 2
|
10天前
|
监控 安全 测试技术
构建高效精准测试平台:设计与实现全攻略
在软件开发过程中,精准测试是确保产品质量的关键环节。一个高效、精准的测试平台能够自动化测试流程,提高测试覆盖率,缩短测试周期。本文将分享如何设计和实现一个精准测试平台,从需求分析到技术选型,再到具体的实现步骤。
31 0
|
1月前
|
测试技术 数据安全/隐私保护
北邮人论坛登录页面测试用例
北邮人论坛登录页面测试用例
35 1
|
3月前
|
XML JavaScript 测试技术
Web自动化测试框架(基础篇)--HTML页面元素和DOM对象
本文为Web自动化测试入门指南,介绍了HTML页面元素和DOM对象的基础知识,以及如何使用Python中的Selenium WebDriver进行元素定位、操作和等待机制,旨在帮助初学者理解Web自动化测试中的关键概念和操作技巧。
52 1
|
3月前
|
测试技术 Android开发 iOS开发
Appium 是一个开源的自动化测试框架,它支持多种平台和多种编程语言
Appium是一款开源自动化测试框架,支持iOS和Android多平台及多种编程语言。通过WebDriver协议,开发者可编写自动化测试脚本。在iPhone上实现屏幕点击等操作需安装Appium及其依赖,启动服务器,并设置所需的测试环境参数。利用Python等语言编写测试脚本,模拟用户交互行为,最后运行测试脚本来验证应用功能。对于iPhone测试,需准备真实设备或Xcode模拟器。
115 1
|
3月前
|
运维 Kubernetes 监控
|
6天前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
34 3
|
1月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
57 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)