①连接数据库
con = pymysql.connect(host='api.ggg.com',
port=3306,
user='future',
password='123456',
charset='utf-8',
# 执行sql返回数据已字典格式返回,默认是元组
cursorclass=pymysql.cursors.DictCursor)
②创建一个游标对象
cur = con.cursor()
③执行sql
sql = 'select * from student'
res = cur.execute(sql)
④提交事务(如果涉及增删改查操作的sql,执行完一定要提交事务才会生效)
con.commit()
⑤创建一个游标对象(自动提交事务)可以代替②③④
with con as cur:
sql = 'select * from student'
cur.excute(sql)
with启动对象,上下文管理器的关键字
上下文管理器协议:如果一个类中定义了如下两个方法那么该类就实现了上下文管理器协议(可以通过with进行操作)
enter:with xxx as 后面的变量接受的是该方法返回值
exit:with中代码执行完毕之后汇之星该方法
⑥获取查询结果
# 获取第一条数据
cur.fetchone()
# 获取所有数据
cur.fetchall()
封装Pymysql
import pymysql
from common.handle_conf import conf
class HandleDB:
def __init__(self):
self.con = pymysql.connect(host=conf.get('mysql', 'host'),
port=conf.getint('mysql', 'host'),
user=conf.get('mysql', 'user'),
password=conf.get('mysql', 'password'),
charset='utf-8',
# 执行sql返回数据已字典格式返回,默认是元组
cursorclass=pymysql.cursors.DictCursor)
def find_all(self, sql):
# 查询所有数据
with self.con as cur:
cur.excute(sql)
res = cur.fetchall()
cur.close()
return res
def find_one(self,sql):
# 查询一条数据
with self.con as cur:
cur.excute(sql)
res = cur.fetchone()
cur.close()
return res
def find_count(self, sql):
# sql执行完之后,返回的数据条数
with self.con as cur:
res = cur.excute(sql)
cur.close()
return res
# 自动销毁
def __del__(self):
self.con.close()
充值接口加入数据库断言:
①执行sql查询余额(接口请求之前)
start_amount = self.db.find_one(sql)[0]
print("执行之前,用户余额:",start_amount)
②接口请求
response = requests.request(method=method, url=url, json=params, headers=headers)
③执行完sql之后
end_amount = self.db.find_one(sql)[0]
print("执行之后,用户余额:",end_amount)
④断言:
try:
self.assertEqual(expected['code'], res['code'])
self.assertEqual(expected['msg'], res['msg'])
if res['msg'] == 'OK':
# 充值冲程,余额变化为充值余额
self.assertEqual(float(end_amount), params['amount'])
else:
# 充值失败,用户余额变化为0
self.assertEqual(float(end_amount), 0)