基于python3+unittest+sqlalchemy实现数据库测试实践指南
开源优测
共 2163字,需浏览 5分钟
·
2024-06-14 08:31
下方查看历史精选文章
首先我们看一下什么是数据库测试
数据库测试是检查被测数据库的模式、表、触发器等。
它可能涉及创建复杂的查询来加载/压力测试数据库并检查其响应性。
它检查数据的完整性和一致性。
我们在细化成具体的就是,我们需要验证表结构、字段、长度、主键、索引、unique等等属性。
如何做呢?
可能你是直接通过命令行这样验证
也可能你是通过工具这样验证
不管哪种,似乎达到目的就行,那好,我们通过Python写代码验证试试。
毕竟写代码显得比较有意思点!!!
先看下技术准备,需要以下东西
1. Python,笔者用Python3
2. sqlalchemy库(这是什么?你应该要知道的喲)
3. pymysql库(本文以mysql为例,所以选择该mysql驱动库)
4 unittest
IDE,笔者用PyCharm Community版本,最新的嗷嗷嗷~~
以验证mysql默认的mysql数据库中的user表为例,直接上代码实例了
以下代码示例仅验证以下几个目标:
- 表名
- 字段名
- 主键
其他的验证自行研究学习,或是加微信群里讨论即可。
# -*- coding: utf-8 -*-
__author__ = "苦叶子"
import unittest
from sqlalchemy import create_engine
from sqlalchemy.engine import reflection
class TestMySQL(unittest.TestCase):
def setUp(self):
# 创建连接
self.engine = create_engine("mysql+pymysql://root:12345678@127.0.0.1:3306/mysql")
# 创建inspector对象
self.insp = reflection.Inspector.from_engine(self.engine)
def test_table_name(self):
# 判断user表是否在mysql这个实例库中
self.assertIn("user", self.insp.get_table_names())
def test_column(self):
# user表中是否有User字段
User = None
columns = self.insp.get_columns("user")
for col in columns:
if "User" == col["name"]:
User = col["name"]
self.assertIsNotNone(User)
def test_keyprimary(self):
# 验证user表中User字段是否为主键
k = self.insp.get_pk_constraint("user")
self.assertIn("User", k["constrained_columns"])
if __name__ == "__main__":
unittest.main()
保存上述代码在db_test.py中,运行下看结果如下
评论
cache_timing_db基于 Redis 的简单时序数据库实现
cache_timing_db是基于Redis的一个时序数据库实现,支持高效的查询时间分布的数据,提
cache_timing_db基于 Redis 的简单时序数据库实现
0
cache_timing_db基于 Redis 的简单时序数据库实现
cache_timing_db是基于Redis的一个时序数据库实现,支持高效的查询时间分布的数据,提供数据的加载器和查询器,能够实现自动化的数据加载和高性能的查询。背景在我负责的一个系统中,有一个数据
cache_timing_db基于 Redis 的简单时序数据库实现
0
db_state_machine基于数据库状态进行的状态机实现
db_state_machine,基于数据库的状态机,并提供可视化日志监控。使用说明在 spring
db_state_machine基于数据库状态进行的状态机实现
0
db_state_machine基于数据库状态进行的状态机实现
db_state_machine,基于数据库的状态机,并提供可视化日志监控。使用说明在spring配置文件中添加<context:component-scanbase-package="com.
db_state_machine基于数据库状态进行的状态机实现
0