项目中数据库应用:
-
1、数据准备
-
为什么在自动化测试中需要连接项目数据库?
- 在特定场景下,需要从数据库获取相关记录来断言或判断相关接口是否执行成功。
-
为什么准备数据?
- 由于无管理员权限,无法直接连接黑马头条线上数据库,所以将黑马头条数据库恢复到本机来达到学习的目的
-
如何在本机创建数据库及相关表
- 打开localhost ->鼠标右键–>运行sql文件—>hmtt.sql
- 验证:关闭数据库连接–>重新打开数据库连接—>查看到hmtt
-
2、数据库相关操作方法封装
-
主要方法
- def get_sql_one(sql):
- 定义变量 cursor 、data
- 获取游标对象
- 调用指定方法 sql
- data= 获取结果
- 关闭游标对象
- 关闭连接对象
- 返回结果数据
- def get_sql_one(sql):
-
辅助方法
- 获取连接对象封装
- 获取游标对象封装
- 关闭游标对象
- 关闭连接对象
-
代码:
"""
目标:完成数据库相关工具类封装
分析:
1. 主要方法
假设: def get_sql_one(sql)
2. 辅助方法
1. 获取连接对象
2. 获取游标对象
3. 关闭游标对象方法
4. 关闭连接对象方法
"""
import pymysql
class ReadDB:
# 定义连接对象
conn=None
# 获取连对象方法封装
def get_conn(self):
if self.conn is None:
self.conn=pymysql.connect("127.0.0.1","root","dpl1215","hmtt",charset="utf8")
return self.conn
# 获取游标对象方法封装
def get_cursor(self):
return self.get_conn().cursor()
# 关闭游标对象方法封装
def close_cursor(self,cursor):
if cursor:
cursor.close()
# 关闭连接对象方法封装
def close_conn(self):
if self.conn:
self.conn.close()
# 注意:关闭连接对象后,对象还存在内存中,需要手工设置为None
self.conn=None
# 主要 执行方法 获取单条结果 -> 在外界调用次方法就可以完成数据相应的操作
def get_sql_one(self,sql):
# 定义游标对象及数据变量
sursor=None
data=None
try:
#获取游标对象
sursor=self.get_cursor()
#执行sql
sursor.execute(sql)
#获取结果
data=sursor.fetchone()
except Exception as e:
print("get_sql_one error",e)
finally:
#关闭游标和连接
self.close_cursor(sursor)
self.close_conn()
#返回执行结果
return data
# 获取 所有数据库结果集
def get_sql_all(self, sql):
# 定义游标对象及数据变量
sursor = None
data = None
try:
# 获取游标对象
sursor = self.get_cursor()
# 调用执行方法
sursor.execute(sql)
# 获取所有结果
data = sursor.fetchall()
except Exception as e:
print("get_sql_one error:", e)
finally:
# 关闭游标对象
self.close_cursor(sursor)
# 关闭连接对象
self.close_conn()
# 返回执行结果
return data
# 修改、删除、新增
def update_sql(self, sql):
# 定义游标对象及数据变量
sursor = None
data = None
try:
# 获取游标对象
sursor = self.get_cursor()
# 调用执行方法
sursor.execute(sql)
# 提交事务
self.conn.commit()
except Exception as e:
# 事务回滚
self.conn.rollback()
print("get_sql_one error:", e)
finally:
# 关闭游标对象
self.close_cursor(sursor)
# 关闭连接对象
self.close_conn()
- 结合unittest执行
- 步骤
- 导包 unittest 数据库工具类
- 新建测试类 继承
- 新建测试方法
- 定义 sql语句
- 调用执行 数据库主方法 (get_sql_one)
- 断言
- 代码:
- 步骤
"""
目标:1、自动化测试操作头条项目数据库
2、在数据库的news_collection表中,判断用户id(1)是否收藏了id(2)的文章,1代表未收藏、0代表收藏
"""
import unittest
from tools.read_database import ReadDB
class TestDataBase(unittest.TestCase):
def test_db(self):
#sql语句
sql = "select is_deleted from news_collection where user_id=1 and article_id=2"
#调用工具类
data=ReadDB().get_sql_one(sql)
# print(data)
#设置断言
self.assertEquals(0,data[0])
if __name__ == '__main__':
unittest.main()
- 扩展
- 获取所有结果集
- 获取单条数据 fetchone() 修改成fetchall()
- 新增、删除、修改
- 提交事务
- 回滚事务