基于Python的接口自动化-pymysql模块操作数据库

news2024/11/26 22:23:55

目录

引言

一、PyMySQL安装

二、Python操作数据库

写在最后


引言

        在进行功能或者接口测试时常常需要通过连接数据库,操作和查看相关的数据表数据,用于构建测试数据、核对功能、验证数据一致性,接口的数据库操作是否正确等。

因此,在进行接口自动化测试时,我们一样绕不开接口和数据库的交互,我们需要用代码连接数据库,通过操作数据库完成数据的准备、环境检查以及数据库断言的功能。

在python3中,使用python操作MySQL数据库需要使用到第三方库:pymysql,该模块本质上就是一个套接字的客户端软件包,它提供了诸多连接数据库、操作数据库表等一系列的方法。

一、PyMySQL安装

1.在windows环境下安装

由于python3.6及以上版本安装python后就自带了pip3,python版本低于3.6的,手动安装下pip即可,因此可以直接使用pip安装该模块

pip3 install pymysql

2.在linux环境下安装

下载安装pymysql的tar包,解压后,进入解压的目录下,按如下安装即可:

[root@localhost opt]#tar -xzvf PyMySQL-0.7.11.tar.gz
[root@localhost opt]#cd PyMySQL-0.7.11
[root@localhost PyMySQL-0.7.11]#python36 setup.py install

3.在PyCharm中安装

在PyCharm中直接检索该模块,并安装,步骤如下:

二、Python操作数据库

因为方便测试,我们首先在mysql数据库创建测试表:userinfo,表信息如下:

 

有了数据库和数据表后,我们就可以导入pymysql模块,使用该模块下封装的方法实现数据库操作

数据库连接

pymysql提供的方法如下:

1. 建立数据库连接 conn = pymysql.connect()
2. 从连接建立操作游标 cur = conn.cursor()
3. 使用游标执行sql(读/写) cur.execute(sql)
4. 获取结果(读)/ 提交更改(写) cur.fetchall() / conn.commit()
5. 关闭游标及连接 cur.close();conn.close()

代码示例:

import pymysql
# 建立连接
connection = pymysql.connect(host='119.29.78.234', port=3306, user='root', password='dhcc@2020', db='test123')
cursor = connection.cursor()       # 创建游标
cursor.execute("SELECT * FROM userinfo")   #使用execute()方法执行SQL语句
data = cursor.fetchall()  #使用fetall()获取全部数据
print(data)
cursor.close()   #关闭游标和数据库的连接
connection.close()<br><br>#运行结果<br>((1, '艾佛森', '123'), (2, '科比', '123'), (3, '詹姆斯', '123'), (4, '库里', '123'))

什么是游标? 游标类似文件句柄,可以逐条的访问数据库执行结果集。pymysql中只能通过游标来执行sql和获取结果

以上代码执行后,默认返回的是一个嵌套元组数据类型

数据库增删改查

 查询操作:

使用cur.execute(), 执行数据库查询后无返回的是影响的行数,而非查询结果。我们要使用cur.fetchone()/cur.fetchmany()/cur.fetchall()来获取查询结果
cur.fetchone(): 获取一条数据(同时获取的数据会从结果集删除),返回元组
cur.fetchmany(3): 获取多条数据,返回嵌套元组
cur.fetchall(): 获取所有数据,返回嵌套元组

代码示例:

查询单条数据:

import pymysql
db_config = {
      "host":"119.29.78.234",
       "port":3306,
       "user":"root",
       "password":"dhcc@2020",
       "db":"test123"
}
db = pymysql.connect(**db_config)
cursor = db.cursor()
sql = "SELECT * FROM userinfo"
cursor.execute(sql)
res = cursor.fetchone()    # fetchone()第一次只能查询表中的首行数据
print(res)
res = cursor.fetchone()    # 第二次查询下一行数据
print(res)
cursor.close()
db.close()<br><br># 返回结果

((1, '艾佛森', '123'))

((2, '科比', '123'))

查询多条数据:

import pymysql
db_config = {
      "host":"119.29.78.234",
       "port":3306,
       "user":"root",
       "password":"dhcc@2020",
       "db":"test123"
}
db = pymysql.connect(**db_config)
cursor = db.cursor()
sql = "SELECT * FROM userinfo"
cursor.execute(sql)
res = cursor.fetchmany(3)   # 第一次查询表中的前3行数据
print(res)
res = cursor.fetchmany(3)    # 第二次查询下一个3行的数据
print(res)
cursor.close()
db.close()<br>
#返回结果
((1, '艾佛森', '123'), (2, '科比', '123'), (3, '詹姆斯', '123'))
((4, '库里', '123'),)

查询所有数据:

import pymysql
db_config = {
      "host":"119.29.78.234",
       "port":3306,
       "user":"root",
       "password":"dhcc@2020",
       "db":"test123"
}
db = pymysql.connect(**db_config)
cursor = db.cursor()
sql = "SELECT * FROM userinfo"
cursor.execute(sql)
res = cursor.fetchall()   # 第一次查询表中的所有数据
print(res)
res = cursor.fetchall()    # 第二次查询无数据
print(res)
cursor.close()
db.close()<br>
#返回结果
((1, '艾佛森', '123'), (2, '科比', '123'), (3, '詹姆斯', '123'), (4, '库里', '123'))
()

 默认都是返回元组的数据类型,看起来不太直观,因此,在实例化时可以将游标设置成如下这样,就可以返回字典类型的数据

cursor = db.cursor(cursor=pymysql.cursors.DictCursor)<br><br>#返回结果

[{'username': '艾佛森', 'id': 1, 'passwd': '123'}, {'username': '科比', 'id': 2, 'passwd': '123'}, {'username': '詹姆斯', 'id': 3, 'passwd': '123'}, {'username': '库里', 'id': 4, 'passwd': '123'}]

增删改操作:

在进行增删改,执行修改数据库的操作后不立即生效,使用连接conn.commit()提交后才生效,支持事物及回滚

 代码示例:

import pymysql
db_config = {
      "host":"119.29.78.234",
       "port":3306,
       "user":"root",
       "password":"dhcc@2020",
       "db":"test123"
}
db = pymysql.connect(**db_config)
cursor = db.cursor()
sql = "INSERT INTO userinfo(username,passwd) VALUES('克莱','123')"
#sql = "UPDATE userinfo SET username = '奥尼尔' WHERE username = '科比'"  # 修改数据
#sql = "DELETE FROM username WHERE username ='奥尼尔'"                    # 删除数据
try:
    cursor.execute(sql)
    db.commit()
except Exception as e :   # 执行异常回滚
    db.rollback()
cursor.close()
db.close()
#或者在execute提供需要插入的数据
import pymysql
db_config = {
      "host":"119.29.78.234",
       "port":3306,
       "user":"root",
       "password":"dhcc@2020",
       "db":"test123"
}
db = pymysql.connect(**db_config)
cursor = db.cursor()
sql = "INSERT INTO userinfo(username,passwd) VALUES(%s,%s)"
try:
    cursor.execute(sql,("克莱","123"))
    db.commit()
except Exception as e :
    db.rollback()
cursor.close()
db.close()
#批量插入数据
import pymysql
db_config = {
      "host":"119.29.78.234",
       "port":3306,
       "user":"root",
       "password":"dhcc@2020",
       "db":"test123"
}
db = pymysql.connect(**db_config)
cursor = db.cursor()
sql = "INSERT INTO userinfo(username,passwd) VALUES(%s,%s)"
try:
    cursor.executemany(sql,[("韦德","123"),("字母哥","123")])
    db.commit()
except Exception as e :
    db.rollback()
cursor.close()
db.close()

封装数据库操作

由于经常要使用到数据库操作,建议将所有数据库操作封装成公用的数据库模块

封装的代码示例如下:

import pymysql.cursors
 
class Operation_mysql(object):
    def __init__(self):
        # 建立连接
        db_config = {
            "host": "119.29.78.234",
            "port": 3306,
            "user": "root",
            "password": "dhcc@2020",
            "db": "test123"
        }
        self.connection = pymysql.connect(**db_config)
        # 创建游标
        self.cursor = self.connection.cursor()
 
    def execute_sql(self, sql):
        try:
            self.cursor.execute(sql)
            self.connection.commit()
        except Exception as e:  # 执行异常回滚
            db.rollback()
 
    def get_data(self):
        data = self.cursor.fetchone()
        #data = self.cursor.fetchall() # 查询所有数据
        return data
 
    def close_mysql(self):
        # 关闭游标
        self.cursor.close()
        # 关闭数据库连接
        self.connection.close()

这样封装后后续接口测试用例需要操作数据库时,就可以引入该模块,实例化对象调用该模块下的方法。

写在最后

这篇贴子到这里就结束了,最后,希望看这篇帖子的朋友能够有所收获。

都到这了记得三连支持一下吧。

-------------------------------------------------

完整版文档下载方式:

这些资料,对于从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享。

在评论区和我互动交流或者私❤我【软件测试学习】领取即可,拿走不谢。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/615865.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MES系统选择指南:企业如何选择适合需求的MES管理系统?

MES&#xff08;Manufacturing Execution System&#xff09;管理系统是一种用于生产管理的软件系统&#xff0c;可以帮助企业提高生产效率、降低成本和提高质量。然而&#xff0c;不同类型的MES管理系统适用于不同类型的企业需求&#xff0c;因此选择适合自己企业需求的MES管理…

基于瑞芯微芯片RK3399学习

同是soc&#xff0c;参加新星计划学习下大佬的思路 sys系统 针对&#xff1a;&#xff08;内核&#xff09;1.1、通过sysfs清楚了解设备的系统状况的学习 通过了解sys目录和文件了解嵌入式设备的系统状况。 sysfs把连接在系统上的设备和总线组织成为一个分级的文件&#xff0c…

全国职业院校技能大赛信息安全管理与评估赛题一

全国职业院校技能大赛 高等职业教育组 信息安全管理与评估 赛题一 模块一 网络平台搭建与设备安全防护 赛项时间 共计180分钟。 赛项信息 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段 网络平台搭建与设备安全防护 任务1 网络平台搭建 XX:XX- XX:XX 50 任务…

第6章SpringMVC的RESTful

一、RESTful 1.RESTful简介 REST&#xff1a;Representational State Transfer&#xff0c;表现层资源状态转移 ①资源 将服务器看作是由很多离散的资源组成。每个资源是服务器上一个可命名的抽象概念 ②资源的表述 源的表述可以有多种格式&#xff0c;例如HTML/XML/JSON…

yolo v5

参考 睿智的目标检测56——Pytorch搭建YoloV5目标检测平台 原理 前处理 网络结构 整体思想 思想框架 特征提取-特征加强-预测先验框对应的物体情况。 改进部分 1、主干部分&#xff1a;使用了Focus网络结构&#xff0c;具体操作是在一张图片中每隔一个像素拿到一个值&…

118. 杨辉三角解题思路

文章目录 题目解题思路 题目 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2: 输入: num…

【Java基础】集合List/Set/Map

零、重点 初始大小加载因子扩容大小底层机制ArrayList101(存满)1.5倍动态数组&#xff0c;Arrays.copyof()HashMap160.752.0倍 jdk1.7及其之前&#xff1a;数组单向链表&#xff08;有扩容死锁问题&#xff09; jdk1.8及其之后&#xff1a;Node 数组 单向Node链表 红黑树 …

大专苦学 37 天,5 轮面试,6 小时灵魂拷问,含泪拿下阿里 offer~

先纠正一下大家的错误认知&#xff0c;大专学历不是不能进大厂&#xff0c;只不过很难罢了&#xff0c;比如阿里就有很多大专学历的人&#xff1b;学历低想进大厂很难的&#xff0c;不光需要的技术足够厉害&#xff0c;还需要有合适的内推人&#xff08;人脉&#xff09;以及恰…

机器的眼睛:漫谈机器视觉(文末送书)

眼睛是人心灵的窗户&#xff0c;我们可以通过凝视对方的眼神来理解他人。当有一天你走过一道需要刷脸才能通过的大门&#xff0c;突然间看到一个冰冷的摄像头在凝视着你的时候&#xff0c;你是否也曾若有所思地看着它&#xff0c;心中充满了疑惑——它是如何工作的&#xff1f;…

苹果颠覆性新品取代iPhone,5万元新电脑告别 Intel

今日凌晨苹果正式举行了 WWDC23 Apple 全球开发者大会。 和往年相比 WWDC23 可以说是倍受关注&#xff0c;在召开前就有号称革命性产品问世的消息。 场面如此壮观&#xff0c;今年到底苹果又带来了什么引领时代的玩意&#xff1f; 革命性产品又是否能接力乔布斯时代&#xff…

day06——朴素贝叶斯算法

朴素贝叶斯算法 一、什么是朴素贝叶斯分类方法二、概率基础知识1&#xff0c;联合概率2&#xff0c;条件概率 三、贝叶斯公式1&#xff0c;公式2&#xff0c;拉普拉斯平滑系数 四、API五、实操案例&#xff1a;20类新闻分类代码 六、总结 一、什么是朴素贝叶斯分类方法 朴素贝…

漫谈大数据 - 如何设计业务埋点方案与数据采集应用

业务埋点和数据分析是在用户行为和业务数据上进行跟踪、收集和分析的关键方法&#xff0c;用于了解用户行为模式、改进产品和服务&#xff0c;并做出数据驱动的决策。 全文1.5万字&#xff0c;建议阅读时间35min。 目录 业务埋点 埋点的重要性 埋点的类型 全埋点 代码埋点…

springboot3自动装配机制原理(小白也看得懂)

springbootApplication注解 实现自动装配的核心就是EnableAutoConfiguration。(springboot就是通过此注解实现自动装配机制&#xff0c;主要作用就是让springboot去扫描默认的配置类&#xff0c;如果没有这个类的话&#xff0c;springboot只会默认扫描启动类下包中各个类的注解…

nuxt3项目在宝塔上使用pm2放到服务器

最近在将nuxt3项目扔到服务器上的时候遇到了一些问题&#xff0c;发现打包后的nuxt项目与正常的vue文件有些差别&#xff0c;缺失了index.html文件。 这边就记录下nuxt3项目是怎么放到服务器上的&#x1f914; 一、打包nuxt3项目 执行对应的打包命令 yarn build 二、找…

Electron详解(一):基本介绍

文章目录 一、electron简介二、发展历史三、electron优缺点四、electron和Qt的对比五、使用electron开发的实际案例六、electron 的原理 一、electron简介 Electron&#xff08;官网&#xff1a;https://www.electronjs.org/zh/&#xff09;是由Github开发&#xff0c;用HTML&…

17:00面试,还没10分钟就出来了,问的实在是太...

从外包出来&#xff0c;没想到死在另一家厂子 自从加入这家公司&#xff0c;每天都在加班&#xff0c;钱倒是给的不少&#xff0c;所以也就忍了。没想到8月一纸通知&#xff0c;所有人不许加班&#xff0c;薪资直降30%&#xff0c;顿时有吃不起饭的赶脚。 好在有个兄弟内推我去…

CVE-2022-30887

文章目录 CVE-2022-30887一、漏洞介绍二、渗透步骤1、打开网站2、登录网站3、shell4、文件上传5、查看flag CVE-2022-30887 一、漏洞介绍 多语言药房管理系统 (MPMS) 是用 PHP 和 MySQL 开发的, 该软件的主要目的是在药房和客户之间提供一套接口&#xff0c;客户是该软件的主要…

MLC Chat App上架苹果App Store可在本地运行语言模型;谷歌推出AI设计工具StyleDrop

&#x1f989; AI新闻 &#x1f680; 开源项目MLC Chat App上架苹果App Store&#xff0c;可在本地运行语言模型 摘要&#xff1a;CMU助理陈天其教授表示&#xff0c;开源项目MLC LLM的独立聊天应用程序MLC Chat App已上架苹果App Store&#xff0c;允许将任何语言模型本地部…

3.用图神经网络进行图分类

在本教程中&#xff0c;我们将更深入地了解如何将图神经网络&#xff08;GNN&#xff09;应用于图分类任务。图分类是指在给定图的数据集的情况下&#xff0c;基于一些结构图的属性对整个图&#xff08;与节点相反&#xff09;进行分类的问题。在这里&#xff0c;我们希望嵌入整…

uniapp:HbuildeX项目实现jenkins自动化打包上传

前序: 基于HBuilderX创建的项目。 配置uniapp 指令式打包APP、微信小程序、H5。 ubuntu系统上的jenkins部署基础指令,发送给windows服务器上,windows服务器使用HBuilderX软件的cli.exe执行相关cli命令打包,然后jenkins再调用接口下载打包后的文件。 可实现多线程同时打…