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

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

ccwgpt 2024-10-03 18:47 49 浏览 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连接数据库,也就是本篇博文了 。

相关推荐

阿里大数据技术架构师整理分享java面试核心知识点框架篇文档

前言本文是对Java程序员面试中常见的微服务、网络编程、分布式存储和分布式计算等必备知识点的总结,包括Spring原理及应用、SpringCloud原理及应用、Netty网络编程原理及应用、Zoo...

初探分布式Agent系统架构,及全新AutoGen框架下分布式Agent 体验

AIAgent(智能体)系统发展迅猛,且关注点已经不再局限在Agent的规划推理等基本能力,智能体系统在扩展性、互操作、安全性等工程化方面的挑战也越来越引起重视,比如最近的MCP和A2A。上一篇我们...

微软分布式云计算框架Orleans(2):容灾与集群(1)

在上一篇:微软分布式云计算框架Orleans(1):HelloWorld,我们大概了解了Orleans如何运用,当然上一篇的例子可以说是简单且无效的,因为用了Orleans不可能只写一个Hello...

分布式光伏发电项目合作框架协议模板

分布式光伏发电项目合作框架协议模板复制链接-微信或浏览器打开-领取电子档:https://mp.weixin.qq.com/s/0QU_rZEDG0cuS1jxSlaOeA...

晶科科技:签署户用分布式光伏项目合作框架协议

晶科科技公告,公司近日与湖南新华水利电力有限公司(简称“湖南新华”)签署《关于户用分布式光伏项目合作框架协议》,公司拟与湖南新华在2024年—2026年内累计合作开展不低于6GW户用分布式光伏项目。每...

国人之光-分布式存储框架FastDFS入门篇

在这里插入图片描述一、分布式文件存储1.分布式文件存储的由来在我们的项目中有很多需要存储的内容出现,比如图片,视频,文件等等,在早期的时候用户量不大,产生的文件也不是很多,这时我们可以把文件和服务...

分布式计算框架——Hadoop(hadoop分布式计算框架是)

Hadoop是一个开源的分布式计算框架,旨在解决大规模数据集的存储和处理问题。它基于Google的MapReduce论文和Google文件系统(GFS),提供了一种可靠、可扩展的方式来处理海量数据。以...

坐读与行读 精读与泛览(读写坐立行)

【我是这样做学问的】作者:荣新江(北京大学历史学系教授)在大学里教书,如果有初入史学之门的学生问我这个问题,我会把做学问的一般方法讲给他们来听,这里面既有我自己的经验之谈,也有很多其他成功学者的治学之...

文言文实词“顾”的解析(高中文言文实词120个精编汇总)

文言文实词“顾”的解析A笔记栏(KeyNotes)核心知识点具体内容/例句/解析实词“顾”的本义与引申义-本义:回头看(形旁“页”与“头”相关,强调头部动作)例:“临行反顾”(临走时回头看)...

快期中考试了,串讲人教版七下道法,我的知识库清晰了好多…

自从道法上了主科赛道,已经不再是背书那么简单的了。开卷,更是加大了难度。不知道考的是啥,要翻到哪里抄。下周期中考试,出于各种原因,我给儿子班上的一些同学串讲了一下第一单元内容。从备考任务、梳理框架、单...

杜甫《佳人》的图像解读及其意义(杜甫《佳人》的图像解读及其意义概括)

杜甫《佳人》“天寒翠袖薄,日暮倚修竹”一句,凄丽动人,宋人据此作《天寒翠袖图》(现藏于北京故宫博物院)与《竹林仕女图》(现藏于美国费城艺术博物馆)。二图布局极为相似,当为同源画本。杜甫《佳人》诗因诗意...

窠字不读guǒ,不念cháo,窠怎么读,什么意思?窠臼是什么意思?

中午的学校食堂,热闹非凡。一位阿姨在窗口忙着打饭,勺子与餐盘的碰撞声“叮叮当当”。一位同学一边排队一边和身边的朋友讨论着下午的课程,话语声此起彼伏。打饭的声音和讨论声交织在充满期待的午休时光里。言归正...

字象字母B,又象眼镜镜框,这是个什么字?

字象字母B,又象眼镜镜框,这是个什么字?在《殷周金文集成》8498号金文中,有如图这样一个古文字,字形近似一个大写的英文字母B,也象一副框架眼镜的镜框,这是个什么古文字?容庚《金文编》、严志斌《商金文...

文言文实词“当”的解析(文言文实词"当"的解析研究)

文言文实词“当”的解析笔记栏(KeyContent)1.核心义项与语境解析c义项1:掌管、主持(dāng)例:“李斯为秦相,当政”(担任宰相,掌管政权)。搭配:当政、当权(强调权力或职位的执...

语文班主任:三年级下册单元知识点归纳,孩子期末复习的好帮手!

家人们,孩子步入三年级,语文学习难度直线上升,马上又到期末,复习压力是不是扑面而来别慌!作为班主任,今天给大家带来一份超实用的三年级下册单元知识点归纳,堪称孩子期末复习的王炸好帮手!三年级语文的知识...

取消回复欢迎 发表评论: