测试平台系列(51) 编写数据库连接相关方法

简介: 编写数据库连接相关方法

大家好~我是米洛



我在从0到1打造一个开源平台, 也在编写一套完整的接口测试平台系列教程,希望大家能够多多支持。


回顾


上一节我们边写了数据库配置的功能接口,但是前端页面还没有做展示。

如果完成了前端页面增删改查页面,我想我们还需要几个功能:

  • 在线测试连接
    因为有的时候数据库配置会发生变化,如果我们不支持在线测试功能的话,可能大家还需要手动去连接一下,非常难用
  • 在线执行SQL
    这个是为了能够给用户在线运行sql语句,类似于小ide的功能,当然我们只做最核心的部分。
    那么今天我们就来完善前端页面并完成在线连接测试功能

前端部分


前端部分还是以往的dispatch模式,service.js用于发送http请求,model用于管理变量,组件通过dispatch去调用具体的方法。

10.jpg

image

前端页面还是分3个部分,可以理解为3个div:

  • 搜索栏
  • 添加栏
  • 表格栏

11.jpg

这是需要填写的表单

大概的页面展示是这样,我们今天重点讲一下数据库连接这块。

思考怎么做


连接部分我们仍然打算采用sqlalchemy,既然已经开始用了,而且他也支持异步session,在没遇到大坑的时候我们就不考虑更换了。

首先我们考虑以下几个点:

连接复用


首先要清楚,我们之所以做数据库连接配置,是因为我们在构造数据的时候会用到,那么我们势必要维护一个数据库连接的map,充当缓存的作用。

当我们的账号密码等连接信息没有变化的时候,我们是不是可以把次连接用的session拿出来继续使用?答案是肯定的!

而且当我们测试连接以后,这个数据库配置就被缓存了起来,如果我们要使用,直接从连接缓存里面拿就可以了。配合sqlalchemy本身自带的连接池,基本上我们要做的就比较简单,只是包一层dict即可。

缓存扩张问题


举个例子,我现在配置了A数据库连接,测试了一遍,你给我缓存起来了,接着我把A改成B,由于A和B的配置不一样,所以缓存里面现在需要插入一条B数据,如果改的频繁,就会使得这个dict无限扩张,内存也会占用变大。但因为数据库配置不太可能经常变化,我们也可以在update配置的时候清楚之前的缓存。

多线程访问缓存的问题


Python的多线程我不是太熟悉,不太确定Fastapi内部是否会有多个线程同时读写缓存的情况,如果有,那肯定会出问题的,我们需要加🔒,暂时我们可以先观望一下

动起手来

我们对之前的models/init.py方法进行一些改造,我们需要增加一个DatabaseHelper类。

12.jpg

为什么要传入这么多参数,是因为传入配置id的话,需要再次查询数据库,比较麻烦

  • init方法
    init方法创建了我们内部的dict缓存,key是数据库的连接信息,value是对应的session。
  • get_connection
    通过数据库配置去获取到对应的连接信息,首先拼接key,拿到唯一的key标识,接着去缓存找有没有初始化这个连接,有的话直接返回,没有就开始建立连接。
  • get_jdbc_url

13.jpg

这里其实是把数据库配置转为了数据库连接url

注意: pg我还没有找到合适的异步库,所以暂时先不支持它,后面再支持,总感觉pg用的人并没有那么多

  • 删除缓存的方法

14.jpg

先判断是否有该key,有则删除

  • 测试连接的方法

15.jpg

image

接受一个session,如果为空,则返回错误信息。最后execute一句select 1测试是否能够正常连上数据库,不能则返回错误信息。

16.jpg

最后我们再实例化这个Helper,统一调用这个对象即可


  • 改写update方法

17.jpg

加入删除缓存的部分


  • 编写在线测试方法

18.jpg

如果session没获取到,返回错误信息

测试一哈


19.jpg

密码不正确的时候

20.jpg

这是密码正确的情况下


今天的内容到这里就结束了,下一节我们编写在线执行SQL功能。


相关文章
|
14天前
|
Kubernetes 测试技术 Perl
混沌测试平台 Chaos Mesh
混沌测试平台 Chaos Mesh
34 1
|
2天前
|
存储 关系型数据库 MySQL
mysql数据库查询时用到的分页方法有哪些
【8月更文挑战第16天】在MySQL中,实现分页的主要方法包括:1)使用`LIMIT`子句,简单直接但随页数增加性能下降;2)通过子查询优化`LIMIT`分页,提高大页码时的查询效率;3)利用存储过程封装分页逻辑,便于复用但需额外维护;4)借助MySQL变量实现,可能提供更好的性能但实现较复杂。这些方法各有优缺点,可根据实际需求选择适用方案。
|
10天前
|
SQL 关系型数据库 数据库
【python】python社交交友平台系统设计与实现(源码+数据库)【独一无二】
【python】python社交交友平台系统设计与实现(源码+数据库)【独一无二】
40 10
|
6天前
|
运维 Kubernetes 监控
|
5天前
|
存储 SQL 数据库
触发器的设计、掌握存储过程的基本概念和创建、执行、删除方法。掌握数据库备份的方法和数据库恢复的方法。
这篇文章介绍了数据库中触发器的设计概念,包括创建、修改、删除触发器的方法,并通过实验内容教授如何使用SQL命令创建DML触发器以及如何利用触发器实现数据的完整性和自动化处理。
触发器的设计、掌握存储过程的基本概念和创建、执行、删除方法。掌握数据库备份的方法和数据库恢复的方法。
|
13天前
|
敏捷开发 测试技术 持续交付
软件测试中的探索性测试方法及其重要性
【8月更文挑战第6天】在软件开发周期中,测试环节是不可或缺的。它确保了产品的质量、性能与可靠性。然而,传统的测试方法往往侧重于预设的测试用例和场景,可能忽略了用户实际使用过程中的非预期行为。探索性测试(ET)应运而生,它强调测试人员的自主性和创造性,通过不断学习和适应来发现软件的潜在缺陷。本文将探讨探索性测试的概念、实施策略及其在现代软件开发中的重要性。
|
11天前
|
SQL 安全 测试技术
[go 面试] 接口测试的方法与技巧
[go 面试] 接口测试的方法与技巧
|
14天前
|
测试技术 持续交付
探索式测试:一种灵活的软件质量保证方法
在软件测试领域,探索式测试是一种与传统脚本测试截然不同的方法。它强调测试人员的自主性与创造性,允许他们在执行测试时即时设计和执行测试用例。这种方法的灵活性和适应性使其成为发现复杂软件系统中难以预测的错误的有效手段。本文将深入探讨探索式测试的核心概念、实施策略以及它在现代软件开发生命周期中的价值。
29 4
|
13天前
|
敏捷开发 测试技术
探索式测试:一种高效灵活的质量保证方法
在软件生命周期中,确保产品质量是至关重要的一环。传统的测试方法往往依赖于预设的测试用例,而忽视了测试过程中的灵活性和创造性。本文将介绍一种与传统测试截然不同的方法—探索式测试,它强调个人技能与经验的应用,鼓励测试人员发挥主观能动性,通过不断探索来发现更多潜在的软件缺陷。文章将详细阐述探索式测试的核心概念、实施步骤及其在现代软件开发中的实际应用案例,旨在为读者提供一种更为高效和灵活的测试策略。
|
13天前
|
数据可视化 搜索推荐 数据挖掘
基于Python flask 的数据可视化平台,可定制,可连接数据库
本文介绍了一个基于Python Flask框架开发的可定制数据可视化平台,该平台支持多种数据库连接,并提供丰富的图表类型和个性化设置,以实现交互式数据分析和展示。
基于Python flask 的数据可视化平台,可定制,可连接数据库