# 接口自动化:
1:解决接口依赖/用例依赖
1)通过fixture实现前置条件和后置条件
2)将依赖接口放到测试用例excel中第一条case_id 0,使用该用例返回的数据
2:解决数据连接的问题
1)充值接口数据校验---数据库数据校验
数据库连接的坑,db封装有缺陷
充值前,需要获取充值前的可用余额
充值后,需要获取充值后的可用余额,
然后才会进行数据校验,
但是如果充值前和充值后都是用的同一个数据库连接,那充值后获取的可用余额会有问题,
充值后获取的可用余额仍然等于充值前的可用余额,
原因:用的同一个数据库连接conn,充值后,数据有更新,但是仍然是用的旧的连接去获取的余额,在旧的连接中数据依然是之前旧的
需要使用commit,事物提交,相当于更新下数据,然后再去查询,获得的余额就是最新的。
Connection为快照。
优化后的数据库封装:
class DatabaseHandler:
"""数据库增删改查的封装"""
def __init__(self,
host="",
port=3306,
user="",
password="",
charset="utf8", # charset在mysql中是utf8,不是utf-8
database="",
cursorclass=DictCursor
):
"""
初始化方法,初始化实例属性,供数据库连接的相关参数
:param host: 数据库连接的主机名
:param port: 数据库连接的端口号
:param user: 数据库连接的用户名
:param password: 数据库连接的密码
:param charset:打开数据库的字符编码
:param database:需要操作的数据库
:param cursorclass:指定游标的类型
"""
self.conn = pymysql.Connection(host=host,
port=port,
user=user,
password=password,
database=database,
charset=charset,
cursorclass=cursorclass)
def query(self, sql, one=True):
"""
数据库查询操作
:param sql: 查询sql语句
:param one: bool,判断是否只查询一条数据,默认值为True
:return: 查询后的结果集,字典为元素的列表类型
"""
cursor = self.conn.cursor()
# 在查询前,事物提交,更新数据库,以确保查询到的是最新的数据
self.conn.commit()
cursor.execute(sql)
if one:
result = cursor.fetchone()
else:
result = cursor.fetchall()
cursor.close()
return result
def insert(self, sql):
"""
新增一条数据
:param sql: 插入sql语句
:return: bool,插入的结果
"""
cursor = self.conn.cursor()
flag = cursor.execute(sql)
cursor.close()
# 判断是否插入成功
if flag:
# 新增、更新数据需要提交,否则不生效
self.conn.commit()
return True
else:
return False
def delete(self, sql):
"""
删除数据
:param sql: 删除sql语句
:return: bool,删除结果
"""
cursor = self.conn.cursor()
flag = cursor.execute(sql)
cursor.close()
if flag:
# 新增、更新数据需要提交,否则不生效
self.conn.commit()
return True
else:
return False
def update(self, sql):
"""
更新操作
:param sql: 更新sql语句
:return: bool,更新结果
"""
cursor = self.conn.cursor()
flag = cursor.execute(sql)
cursor.close()
# 判断是否更新
if flag:
# 新增、更新数据需要提交,否则不生效
self.conn.commit()
return True
else:
return False
def close(self):
self.conn.close()
2)一个游标最好只要执行一次sql。所以在每次执行sql语句前打开一个游标,执行之后关闭游标
# middleware中间件
1:使common更加通用
2:使应用层使用起来更加简单方便,好用
任务:中间层,连接底层common和应用层tests
使用项目的配置数据,填充common模块