作為一個(gè)測試,數(shù)據(jù)庫對我們來說那是異常熟悉,基本的查詢語言啥的更是不在話下。今天,我們要學(xué)習(xí)的是自動化測試中對數(shù)據(jù)庫的操作。對于自動化而言,對于數(shù)據(jù)庫的操作90%也是限于查詢操作。話不多說,進(jìn)入正題!
1.數(shù)據(jù)庫連接基礎(chǔ)
操作過數(shù)據(jù)庫的我們都知道,要操作數(shù)據(jù)庫,首先安裝一個(gè)電腦客戶端(嗯~廢話)。然后怎么連接數(shù)據(jù)庫呢,就是后端給我們一個(gè)用戶名和密碼去連接一個(gè)數(shù)據(jù)庫。如圖:
只要我們把上面的東西都準(zhǔn)確無誤的填好,我們就連上了數(shù)據(jù)庫。連上之后,哈哈,想操作哪個(gè)表就操作哪個(gè)表。
由此我們可以得知,如果用代碼操作數(shù)據(jù)庫。那么無外乎就兩步操作:
1.連接上你所需要操作的數(shù)據(jù)庫。
2.通過sql語句來操作你所需要的數(shù)據(jù)。
2.pymysql
2.1 什么是pymysql
為了使python連接上數(shù)據(jù)庫,你需要一個(gè)驅(qū)動,這個(gè)驅(qū)動是用于與數(shù)據(jù)庫交互的庫。python中與數(shù)據(jù)庫交互的庫有很多:
- 對接mysql數(shù)據(jù)庫使用到的庫為pymysql模塊
- 對接oracle數(shù)據(jù)庫,使用的第三方庫為cx_Oracle
- 對接sqlserver使用的第三方庫:pymssql
在這里我們以pymysql為例。安裝pymysql與安裝其他依賴庫沒有區(qū)別,要么直接pip install,要么pycharm中手動搜索后安裝。這里不詳細(xì)講安裝過程。
3.數(shù)據(jù)庫模塊封裝
3.1 pymysql基本方法
安裝完成后我們就可以直接使用pymysql了,pymysql中提供一個(gè)方法connect();入?yún)橹鳈C(jī)名、用戶名、密碼、端口號等等,正好與我們上面“mysql連接圖”中要輸入的內(nèi)容一一對應(yīng)。執(zhí)行完connect()方法,我們就成功的連接上了想要連接的數(shù)據(jù)庫。這一步就對應(yīng)了我們平時(shí)Navicat上的數(shù)據(jù)庫連接操作。那么,我們怎么執(zhí)行sql語句呢?
調(diào)用connect()方法成功后,會返回一個(gè)connect的對象,我們通過返回的connect對象的.cursor()方法再創(chuàng)建一個(gè)cursor對象,通過cursor.execute()方法,將自己所要執(zhí)行的sql語句作為入?yún)?zhí)行execute方法,就能對數(shù)據(jù)進(jìn)行操作了!
3.1 數(shù)據(jù)庫操作的簡單封裝
對于我們?nèi)粘J褂?,下面封裝的數(shù)據(jù)庫模塊足夠使用,具體參照如下代碼:
import pymysql
from scripts.handle_config import ConfigLoader
class HandleMySql:
"""數(shù)據(jù)庫處理類"""
def __init__(self):
config = ConfigLoader()
self.conn = pymysql.connect(host=config.get_value("mysql", "host"),
user=config.get_value("mysql", "user"),
password=config.get_value("mysql", "password"),
db=config.get_value("mysql", "db"),
port=config.get_int("mysql", "port"),
charset="utf8",
cursorclass=pymysql.cursors.DictCursor)
self.cursor = self.conn.cursor()
def get_value(self, sql, args=None, is_more=False):
"""
獲取數(shù)據(jù)庫的值
:param sql: sql語句
:param args: 其他參數(shù)
:param is_more: 是否顯示全部,默認(rèn)顯示一套條數(shù)據(jù)
:return: 字典為item的列表數(shù)據(jù)
"""
self.cursor.execute(sql, args)
self.conn.commit()
if is_more:
return self.cursor.fetchall()
else:
return self.cursor.fetchone()
def close(self):
"""關(guān)閉"""
self.cursor.close()
self.conn.close()
# if __name__ == '__main__':
# handle_sql = HandleMySql()
# sql = "select * from member where MobilePhone = %s;"
# single_data = handle_sql.get_value(sql, "15828641020")
# print(single_data)
使用時(shí)就像main函數(shù)紅一樣,先創(chuàng)建一個(gè)HandleMySql對象,然后調(diào)用此對象的get_value()方法,就可以得到一條數(shù)據(jù)或者一個(gè)列表格式的數(shù)據(jù),很是方便!哈哈,打完收工??!