頭條項目接口自動化測試(七)之數據庫測試

項目中數據庫應用:

  • 1、數據準備

  • 爲什麼在自動化測試中需要連接項目數據庫?

    • 在特定場景下,需要從數據庫獲取相關記錄來斷言或判斷相關接口是否執行成功。
  • 爲什麼準備數據?

    • 由於無管理員權限,無法直接連接黑馬頭條線上數據庫,所以將黑馬頭條數據庫恢復到本機來達到學習的目的
  • 如何在本機創建數據庫及相關表

    • 打開localhost ->鼠標右鍵–>運行sql文件—>hmtt.sql
    • 驗證:關閉數據庫連接–>重新打開數據庫連接—>查看到hmtt
  • 2、數據庫相關操作方法封裝

  • 主要方法

    • def get_sql_one(sql):
      • 定義變量 cursor 、data
      • 獲取遊標對象
      • 調用指定方法 sql
      • data= 獲取結果
      • 關閉遊標對象
      • 關閉連接對象
      • 返回結果數據
  • 輔助方法

    • 獲取連接對象封裝
    • 獲取遊標對象封裝
    • 關閉遊標對象
    • 關閉連接對象
  • 代碼:

"""
    目標:完成數據庫相關工具類封裝
    分析:
        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()
    • 新增、刪除、修改
    • 提交事務
    • 回滾事務
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章