测试学习记录,仅供参考!
MySQL数据库连接
封装MySQL数据库连接操作;一般像这种连接之类的是做到配置文件中;
在测试环境测试功能性需求,测试完成之后清理测试时产生的测试数据,需要到测试库里面去操作;
实现测试结束后清理测试数据(数据库调用完成后释放资源)
例如:
每次跑完测试用例之后,需要到数据库中把注册用户给删除(清理)掉,下次再跑测试用例时可以重复的使用测试数据;
若没有清理测试数据的话,每次跑测试用例之前需要手动修改相关的测试(注册用户)数据;
测试场景:每次跑完(测试用例)数据之后,连接到数据库,把本次的数据删除掉;下次再执行时,每次就可以使用同一套数据去验证相关的页面功能;数据之间不会相互污染;
目的:研究数据库,做执行完的后置操作"清理数据";
一、示例
1、 以开源电商商城系统为例(之前新建过名称为的 ecshop 的空数据库);
2、 打开 XAMPP Control Panel 控制面板→启动 apache 和 MySQL 服务;

3、成功启动 apache 和 MySQL 服务(内置 MySQL)后,可以使用工具去测试一下数据库连接(连接数据库的工具有很多种,自行选择)
连接名:ECShop
主机:localhost(本地 127.0.0.1)
端口:3306(默认)
用户名:root
密码:密码若未设置过可以为空

4、数据库连接成功后可自行查看商城网站的数据库(ecshop);
例如:ecs_goods 表是后台管理中心添加的商品信息;
ecs_users 表是用户信息;等等(自行查看);
5、或者直接点击 XAMPP Control Panel 控制面板 MySQL 服务中的 Admin 按钮查看在线网页版数据库;

二、安装
6、 在项目中代码实现;使用 python 第三方模块,安装第三方库;
命令行安装;
pip install pymysql
Python 解释器→软件包安装;


三、实现方式
7、 在项目根目录 util_tools 软件包下新建一个名称为 connectMysql.py (连接 mysql 数据库)的 Python 文件;
(1)、导包,第三方库 pymysql 模块、日志和解析 ini 文件模块;
(2)、conf = ConfigParse():在最外层先实例化读取解析 ini文件对象;
(3)、class ConnectMysql: 封装去读取 mysql 数据库的方法(以类的形式封装起来);
(4)、def init(self):初始化构造函数先写好;
(5)、调用 pymysql 模块 .点 connect() 方法去连接数据库;
connect 方法中需要传的参数有很多个,许多都是默认的可以不传,这里需要用到的有 5 个;
user:数据库用户名 user='root'
password:数据库密码(密码没有可以为空) password=''
host:主机 host='localhost'
database:需要连接哪个数据库名 database='ecshop'
port:端口号 port=3306

(6)、要连接数据库需要传入五个参数才能访问到数据库,最后把结果返回出去给一个实例变量(后面需要在别的函数里面去调用);
# 导包
import pymysql
from util_tools.handle_data.configParse import ConfigParse
from util_tools.logs_util.recordlog import logs
# 在最外层先实例化读取ini文件对象
conf = ConfigParse()
class ConnectMysql:
# 初始化构造函数
def __init__(self):
# 返回出去给实例变量 self.conn--拿到数据库连接对象
self.conn = pymysql.connect(host='localhost', port=3306, user='root', password='', database='ecshop')
8、但是数据库的连接已经存放到配置文件(根目录 config 软件包 config.ini 文件)中了,所以通过已经封装好的读取解析 ini 配置文件(根目录 util_tools 软件包 handle_data 软件包 configParse.py 文件)去拿到里面的数据库相关信息,后续若有需要更改时,不需要修改代码,直接改配置文件即可;
9、优化项目根目录 util_tools 软件包 handle_data 软件包下 configParse.py 解析文件,添加专门读取 mysql 数据函数方法;
import configparser
from util_tools.logs_util.recordlog import logs
from config.setting import FILE_PATH
class ConfigParse:
"""解析.ini配置文件"""
# 初始化函数--传一个需要解析的文件路径--指定默认读取配置文件路径
def __init__(self, file_path=FILE_PATH['ini']):
# 调用 configparser 模块里面的 ConfigParser 类(调用方法去解析配置文件)
self.config = configparser.ConfigParser()
# self.file_path = 等于初始化传进来的文件路径
self.file_path = file_path
# 定义好 read_config 方法后,再调用
self.read_config()
# 定义一个方法--读取配置文件
def read_config(self):
# 通过 config 调用 configparser 模块 ConfigParser 类里面的对象,调用 read() 函数去读取 传进来的配置文件路径
self.config.read(self.file_path)
# 解析文件内容--第一个 section 参数是配置文件中的头参数"[HOST]、[MYSQL]",第二个 option 参数是所属头参数下面的键值参数
def get_value(self, section, option):
try:
# 直接调用 config 这个对象 .get() 再把这两个"section, option"参数传进来--最后把结果返回出去
value = self.config.get(section, option)
return value
except Exception as e:
logs.error(f'解析配置文件出现异常,原因为{e}')
# 定义一个方法只用于获取 host--只传一个 option 参数
def get_host(self, option):
# 调用上面的 get_value 方法--第一个参数写固定,第二个参数才去传 option --最后直接返回
return self.get_value('HOST', option)
# 这个函数专门去读取mysql里面的数据
def get_section_mysql(self, option):
return self.get_value('MYSQL', option)
10、优化项目根目录 config 软件包下 config.ini 文件内容;更改正确的数据信息;
[HOST]
host = http://localhost:8088/ecshop
[MYSQL]
host = localhost
port = 3306
username = root
password =
database = ecshop
11、 优化 connectMysql.py 文件;
(1)、定义一个字典;
值可以通过配置文件去读取,通过最外层的实例化对象 conf 点 .get_section_mysql 方法去读取;
(2)、添加异常处理,像这种连接的均可以加个异常处理;
# 导包
import pymysql
from util_tools.handle_data.configParse import ConfigParse
from util_tools.logs_util.recordlog import logs
# 在最外层先实例化读取ini文件对象
conf = ConfigParse()
class ConnectMysql:
# 初始化构造函数
def __init__(self):
# 定义一个字典,里面去写数据库的配置参数,值通过配置文件去读取
self.conf = {
'host': conf.get_section_mysql('host'),
'port': int(conf.get_section_mysql('port')),
'user': conf.get_section_mysql('username'),
'password': conf.get_section_mysql('password'),
'database': conf.get_section_mysql('database')
}
try:
# 返回出去给实例变量 self.conn--拿到数据库连接对象
# self.conn = pymysql.connect(host='localhost', port=3306, user='root', password='', database='ecshop')
# 关键字传参在python中可以通过 **self.conf 以key:value形式--拿到数据库连接对象
self.conn = pymysql.connect(**self.conf)
# 获取操作游标--通过连接对象 点 .cursor() 去获取连接数据库的游标--然后把它的对象给返回出去
self.cursor = self.conn.cursor()
logs.info(f'成功连接到数据库,数据库ip为:{self.conf.get("host")}')
except Exception as e:
logs.error(f'连接数据库失败,原因为:{e}')
四、释放资源(关闭连接对象)
打开文件、打开数据库等(缓存等等) 一系列操作,最后均需要释放资源,如运行很长时间的话,产生数据量庞大,会造成"内存"相关的问题(自行学习了解内存问题);
12、优化 connectMysql.py 文件;添加关闭连接对象方法;
# 导包
import pymysql
from util_tools.handle_data.configParse import ConfigParse
from util_tools.logs_util.recordlog import logs
# 在最外层先实例化读取ini文件对象
conf = ConfigParse()
class ConnectMysql:
# 初始化构造函数
def __init__(self):
# 定义一个字典,里面去写数据库的配置参数,值通过配置文件去读取
self.conf = {
'host': conf.get_section_mysql('host'),
'port': int(conf.get_section_mysql('port')),
'user': conf.get_section_mysql('username'),
'password': conf.get_section_mysql('password'),
'database': conf.get_section_mysql('database')
}
try:
# 返回出去给实例变量 self.conn--拿到数据库连接对象
# self.conn = pymysql.connect(host='localhost', port=3306, user='root', password='', database='ecshop')
# 关键字传参在python中可以通过 **self.conf 以key:value形式--拿到数据库连接对象
self.conn = pymysql.connect(**self.conf)
# 获取操作游标--通过连接对象 点 .cursor() 去获取连接数据库的游标--然后把它的对象给返回出去
self.cursor = self.conn.cursor()
logs.info(f'成功连接到数据库,数据库ip为:{self.conf.get("host")}')
except Exception as e:
logs.error(f'连接数据库失败,原因为:{e}')
# 关闭连接对象
def close(self):
# if判断一下 连接 和 游标 存在的情况
if self.conn and self.cursor:
# 直接调用里面close()方法关闭
self.conn.close()
self.cursor.close()
return True
未完待续。。。