百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

编写自动化测试框架时要连接数据库怎么办?这个三方包你的掌握。

ccwgpt 2024-10-03 18:47 56 浏览 0 评论

1.常用数据库模块

在做自动化测试时,我们经常会查库的需求 ,那么该如何使用python去查找数据库呢 ? 这里介绍一个python的第三方包PyMySQL . 通过它使用python语言可以连接mysql数据库 。

以下为安装和验证 :

#安装: pip install pymysql
#验证: pip show pymysql 

2.数据库操作流程

首先我们可以通过查看客户端工具连接数据库的流程 :

如果使用pymysql进行连接数据库的流程具体如下:

  1. 导包
  2. 创建数据库连接
  3. 获取游标对象
  4. 执行操作
  5. 关闭游标对象
  6. 关闭数据库连接

将工具和pymysql的连接流程放在一起做个比对,将会是如下:

3.使用pymysql操作

3.1 建立连接

如果想使用pymysql操作数据库 ,你就需要调用pymysql中的connect()方法建立连接 。

# 建立连接对象 
conn = pymysql.connect(host=None,user=None,password="",database=None,port=0,charset="")

# 参数说明:
    host :数据库服务器地址
    user :登录用户名
    password : 密码
    database : 数据库名称
    port : 数据库连接端口,默认为3306时刻不填写。
    charset : 数据库编码,一般设置为utf8
        

案例 :使用pymysql进行建立连接数据库 ,连接school数据库

conn = pymysql.connect(host="localhost",user="root",password="root",database="school",charset='utf8')

3.2常用方法

常用的操作数据库方法:

  • cursor() : 获取游标对象
  • close() : 关闭对象
  • execute(sql) : 执行SQL语句 ,sql参数为需要传入的SQL语句。
  • fetchone() : 查询一条数据返回,从指针的下一条开始查一条数据。 。
  • fetchmany(num) : 查询num条数据返回
  • fetchall() : 获取全部的返回行
  • rowcount : 获取execute()方法执行后影响的行数

将以上的方法和操作步骤进行对应

3.3项目案例

对数据库表数据进行查询

"""
连接数据库的流程 :
1. 导包 :import pymysql
2. 建立连接 : connect(host,user,password,port,database,chaset)
3. 创建游标 : cursor()
4. 执行SQL语句
    (1) 执行SQL :execute(sql)
    (2) 查询一条数据 : fetchone()
    (3) 查询多条数据 : fetchmany(number)  , number代表的是传入多条数据
    (4) 查询所有数据 : fetchall()
5. 关闭游标 : close()
6. 关闭连接 : close()
"""

# 1. 导包
import pymysql

# 2. 建立连接对象
connect = pymysql.connect(host='localhost',user='root',password='root',database='school',charset='utf8')

print(connect)

# 3.  创建游标
cursor = connect.cursor()

# 4. 执行SQL语句
sql = "select * from students"
res = cursor.execute(sql)
print(res)

# 需求1 :查询所有的数据
# all_data = cursor.fetchall()
# print(all_data)               , 查询结果返回一个元组,每一条数据也是一个元组

# 需求2 : 查询一条数据
# one_data = cursor.fetchone()
# print(one_data)               ,返回的这条数据为元组 

# 需求3 : 查询5条数据
five_data = cursor.fetchmany(5)
print(five_data)                # 查询结果返回一个元组,每一条数据也是一个元组

# 5. 关闭游标
cursor.close()

# 6. 关闭连接对象
connect.close()

# 总结 :以上的三个查询方法,若只返回一条数据 ,这一条数据就在一个元组中。若返回多条数据 ,每一条数据是构成一个元组 ,然后多条数据又放在一个大的元组中。

对数据库表数据进行增删改


# 1. 导包
import pymysql

# 2. 建立连接对象
connect = pymysql.connect(host='localhost',user='root',password='root',database='school',charset='utf8')

print(connect)

# 3.  创建游标
cursor = connect.cursor()

# 4. 执行SQL语句
#需求1 :数据的修改
# sql = "update students set age = 54 where name = '王伟'"
# res = cursor.execute(sql)
# print(res)

# 需求2数据的插入
# sql = "insert into students values(27,'李四',19,'男','2班',345678943,'天津')"
# res = cursor.execute(sql)
# print(res)

# 需求3 :数据的删除
sql = "delete from students where name = '李四'"
res = cursor.execute(sql)
print(res)


# 5. 关闭游标
cursor.close()

# 6. 关闭连接对象
connect.close()

# 总结 : 使用cursor.execute()方法就可以进行增删改,只需要将SQL语句传入该方法中即可。

4.数据库封装

这里的数据库封装其实就是将项目的数据库连接对象封装进来,大家不需要每次进行初始化连接,而是执行调用一个方法就可以执行相应的SQL语句即可 。

当然数据库封装应该是最灵活的一种情况 ,10个人有10个人的封装法 ,这里只给出一种最基本的封装方式 。具体如下 :


# 数据库类
import pymysql
from setting import DB_INFO
from loguru import logger


class MysqlClient(object):

    # 初始化方法,建立连接
    def __init__(self):
        self.conn = pymysql.connect(**DB_INFO)  # 初始化数据库连接

    # 执行SQL语句的增删改
    def execute(self,sql):
        try:
            with self.conn.cursor() as cursor:
                cursor.execute(sql)
                self.conn.commit()
                logger.info("执行的SQL语句:{}".format(sql))
        except Exception as e:
            logger.error("执行SQL错误,报错原因{},执行SQL:{}".format(e,sql))
            self.conn.rollback()


    # 执行查询
    def get_data(self,sql):
        try:
            with self.conn.cursor() as cursor:
                cursor.execute(sql)
                result = cursor.fetchall()
                logger.info("执行的SQL语句:{}".format(sql))
                return result
        except Exception as e:
            logger.error("执行SQL错误:{},执行SQL:{}".format(e, sql))
            
            
    # 关闭对象
    def close(self):
        self.conn.close()

5.项目集成

在项目中添加一个mysql的包名,在此包中除了编写封装数据库连接的代码,主要就是编写各模块需要执行的SQL语句。 具体如下 :

  1. 在创建项目框架时,创建mysql包名 。然后此包下创建一个连接数据库的模块 。 比如:mysql_client.py
  2. 在mysql包下可以创建项目中所需要的SQL语句模块 ,比如user_sql.py
  3. 在测试用例中调用响应的SQL语句 。

5.1 创建连接数据和所需执行的SQL语句模块

5.2 在测试用例中调用对应模块

6.项目总结

至此,我们已经实现了五步了 ,分别是 :

第一 、如何编写一个接口自动化框架 ,在第一篇博文中介绍了 。https://www.toutiao.com/item/7223778665283404323/

第二、如何使用unittest编写测试用例 ,已经在第二篇博文中介绍了 。https://www.toutiao.com/item/7225986414469825024/

第三、如何使用requests实现接口请求 ,并和测试用例如何对接 ,已经在第三篇博文中介绍了。https://www.toutiao.com/item/7231485629643997748/

第四、如何使用yaml编写测试数据 ,已经在第四篇博文中介绍了 。https://www.toutiao.com/item/7236369710286733861/

第五,如何使用allure生成测试报告,已经在第五篇博文中介绍了 。https://www.toutiao.com/item/7243783682144944697/

第六 ,如何使用loguru记录日志 ,已经在第六篇博文中介绍了 。https://www.toutiao.com/item/7253833815246815796/

第七,如何使用pymysql连接数据库,也就是本篇博文了 。

相关推荐

一个基于.Net Core遵循Clean Architecture原则开源架构

今天给大家推荐一个遵循CleanArchitecture原则开源架构。项目简介这是基于Asp.netCore6开发的,遵循CleanArchitecture原则,可以高效、快速地构建基于Ra...

AI写代码翻车无数次,我发现只要提前做好这3步,bug立减80%

写十万行全是bug之后终于找到方法了开发"提示词管理助手"新版本那会儿,我差点被bug整崩溃。刚开始两周,全靠AI改代码架构,结果十万行程序漏洞百出。本来以为AI说没问题就稳了,结果...

OneCode低代码平台的事件驱动设计:架构解析与实践

引言:低代码平台的事件驱动范式在现代软件开发中,事件驱动架构(EDA)已成为构建灵活、松耦合系统的核心范式。OneCode低代码平台通过创新性的注解驱动设计,将事件驱动理念深度融入平台架构,实现了业务...

国内大厂AI插件评测:根据UI图生成Vue前端代码

在IDEA中安装大厂的AI插件,打开ruoyi增强项目:yudao-ui-admin-vue31.CodeBuddy插件登录腾讯的CodeBuddy后,大模型选择deepseek-v3,输入提示语:...

AI+低代码技术揭秘(二):核心架构

本文档介绍了为VTJ低代码平台提供支持的基本架构组件,包括Engine编排层、Provider服务系统、数据模型和代码生成管道。有关UI组件库和widget系统的信息,请参阅UI...

GitDiagram用AI把代码库变成可视化架构图

这是一个名为gitdiagram的开源工具,可将GitHub仓库实时转换为交互式架构图,帮助开发者快速理解代码结构。核心功能一键可视化:替换GitHubURL中的"hub...

30天自制操作系统:第六天:代码架构整理与中断处理

1.拆开bootpack.c文件。根据设计模式将对应的功能封装成独立的文件。2.初始化pic:pic(可编程中断控制器):在设计上,cpu单独只能处理一个中断。而pic是将8个中断信号集合成一个中断...

AI写代码越帮越忙?2025年研究揭露惊人真相

近年来,AI工具如雨后春笋般涌现,许多人开始幻想程序员的未来就是“对着AI说几句话”,就能轻松写出完美的代码。然而,2025年的一项最新研究却颠覆了这一期待,揭示了一个令人意外的结果。研究邀请了16位...

一键理解开源项目:两个自动生成GitHub代码架构图与说明书工具

一、GitDiagram可以一键生成github代码仓库的架构图如果想要可视化github开源项目:https://github.com/luler/reflex_ai_fast,也可以直接把域名替换...

5分钟掌握 c# 网络通讯架构及代码示例

以下是C#网络通讯架构的核心要点及代码示例,按协议类型分类整理:一、TCP协议(可靠连接)1.同步通信//服务器端usingSystem.Net.Sockets;usingTcpListene...

从复杂到优雅:用建造者和责任链重塑代码架构

引用设计模式是软件开发中的重要工具,它为解决常见问题提供了标准化的解决方案,提高了代码的可维护性和可扩展性,提升了开发效率,促进了团队协作,提高了软件质量,并帮助开发者更好地适应需求变化。通过学习和应...

低代码开发当道,我还需要学习LangChain这些框架吗?| IT杂谈

专注LLM深度应用,关注我不迷路前两天有位兄弟问了个问题:当然我很能理解这位朋友的担忧:期望效率最大化,时间用在刀刃上,“不要重新发明轮子”嘛。铺天盖地的AI信息轰炸与概念炒作,很容易让人浮躁与迷茫。...

框架设计并不是简单粗暴地写代码,而是要先弄清逻辑

3.框架设计3.框架设计本节我们要开发一个UI框架,底层以白鹭引擎为例。框架设计的第一步并不是直接撸代码,而是先想清楚设计思想,抽象。一个一个的UI窗口是独立的吗?不是的,...

大佬用 Avalonia 框架开发的 C# 代码 IDE

AvalonStudioAvalonStudio是一个开源的跨平台的开发编辑器(IDE),AvalonStudio的目标是成为一个功能齐全,并且可以让开发者快速使用的IDE,提高开发的生产力。A...

轻量级框架Lagent 仅需20行代码即可构建自己的智能代理

站长之家(ChinaZ.com)8月30日消息:Lagent是一个专注于基于LLM模型的代理开发的轻量级框架。它的设计旨在简化和提高这种模型下代理的开发效率。LLM模型是一种强大的工具,可以...

取消回复欢迎 发表评论: