項目中數據庫應用:
-
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()
- 新增、刪除、修改
- 提交事務
- 回滾事務