使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 35--二次封装MySQL数据库连接操作

测试学习记录,仅供参考!

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

未完待续。。。

相关推荐
weixin_433179337 小时前
Python - 软件对象
开发语言·python
弹简特7 小时前
【JavaEE06-后端部分】SpringMVC01-Spring MVC第一大核心URL 路由映射【建立连接】与 Postman 接口测试详解
java·spring boot·测试工具·spring·postman
Want5957 小时前
Python新春烟花代码
开发语言·python·pygame
rannn_1117 小时前
【苍穹外卖|Day3】公共字段自动填充、新增菜品功能、菜品分页查询功能、删除菜品功能、修改菜品功能、起售停售菜品
java·spring boot·后端·学习·项目
wdfk_prog7 小时前
[Linux]学习笔记系列 -- [drivers][mmc]mmc_sd
linux·笔记·学习
整点薯条7787 小时前
2026 智能体技术解析:核心架构、能力边界与学习价值评估
学习·架构
storyseek7 小时前
对Qwen3:8b进行QLora微调实现分类操作
python·深度学习·机器学习
&星痕&7 小时前
人工智能:深度学习:0.pytorch安装
人工智能·python·深度学习
铁手飞鹰7 小时前
[深度学习]常用的库与操作
人工智能·pytorch·python·深度学习·numpy·scikit-learn·matplotlib
小猪咪piggy8 小时前
【Python】(6) 文件操作
开发语言·python