一、概述
接口测试中,应用到数据库操作的场景:
1.校验测试数据
接口发送请求后明确会对数据库中的某个字段进行修改(编辑,更新、删除操作),但,响应结果中无该字段数据时。
例如:删除订单接口,is_delete 字段,没有 在响应结果中出现! 需要借助数据库校验! 例如删除订单接口,
2.构造测试数据
测试数据使用一次就失效,测试前,无法保证测试数据是否存在。
二、pyMySql使用步骤
2.1 安装第三方库PyMySQL
# 方法一:
pip install PyMySQL
# 方法二:
pip install PyMySQL -i https://pypi.douban.com/simple/
2.2 数据库查询操作
# 1. 导包
import pymysql
# 2. 建立连接
conn = pymysql.connect(host="10.51.102.22", port=3306, user="xxxx",
password="fxxxxxxxXPF33", database="xxxxxx", charset="utf8")
# 3. 获取游标
cursor = conn.cursor() # 指向 0 号位置。
# 4. 执行 sql 语句(查询)
cursor.execute("select * from charge_order;")
# 5. 获取结果 - 提取第一条
res1 = cursor.fetchone()
print("res1 =", res1)
print("res1类型", type(res1))
# 修改游标位置:回零
cursor.rownumber = 0
# 关闭游标
cursor.close()
# 7. 关闭连接
conn.close()
fetchone()
:从结果集中,提取一行。
fetchmany(size)
:从结果集中,提取
size
行。
fetchall()
:提取所有结果集。
2.3 数据库增、删、改操作
import pymysql
# 定义全局变量
conn = None
cursor = None
try:
# 2. 创建连接
conn = pymysql.connect(host="10.51.102.22", port=3306, user="xxx",
password="xxxx33", database="xxxx", charset="utf8")
# 3. 获取游标
cursor = conn.cursor()
# 4. 执行 insert 语句(新增运营商信息)
cursor.execute("INSERT INTO cs_operator "
"(id, pay_app_id)"
" VALUES(1036, '6124105280304');")
# 查看 sql执行,影响多少行
print("影响的行数:", conn.affected_rows())
# 5. 提交事务
conn.commit()
except Exception as err:
print("插入数据错误:", str(err))
# 回滚事务
conn.rollback()
finally:
# 6. 关闭游标
cursor.close()
# 7. 关闭连接
conn.close()
删除、修改语句除了sql语句的参数不一致,其余步骤同上。
2.4 数据库工具类封装
import pymysql
# 封装数据库工具类
class DBUtil(object):
# 添加类属性
conn = None
@classmethod
def __get_conn(cls):
# 判断 conn 是否为空,如果是,再创建
if cls.conn is None:
cls.conn = pymysql.connect(host="10.51.102.22", port=3306, user="xxxxxxxxxxx",
password="xxxxxxxx", database="xxxxxxx", charset="utf8")
# 返回 非空连接
return cls.conn
@classmethod
def __close_conn(cls):
# 判断,conn 不为空,需要关闭。
if cls.conn is not None:
cls.conn.close()
cls.conn = None
# 常用方法:查询一条
@classmethod
def select_one(cls, sql):
cursor = None
res = None
try:
# 获取连接
cls.conn = cls.__get_conn()
# 获取游标
cursor = cls.conn.cursor()
# 执行 查询语句
cursor.execute(sql)
# 提取一条结果
res = cursor.fetchone()
except Exception as err:
print("查询sql错误:", str(err))
finally:
# 关闭游标
cursor.close()
# 关闭连接
cls.__close_conn()
# 将查询sql执行的 结果,返回
return res
# 常用方法:增删改
@classmethod
def uid_db(cls, sql):
cursor = None
try:
# 获取连接
cls.conn = cls.__get_conn()
# 获取游标
cursor = cls.conn.cursor()
# 执行 uid 语句
cursor.execute(sql)
print("影响的行数:", cls.conn.affected_rows())
# 提交事务
cls.conn.commit()
except Exception as err:
# 回滚事务
cls.conn.rollback()
print("增删改 SQL 执行失败:", str(err))
finally:
# 关闭游标
cursor.close()
# 关闭连接
cls.__close_conn()