如果想從頭學起接口自動化測試,可以去看看這個系列的文章哦!
https://www.cnblogs.com/miki-peng/category/1671261.html
前言
什么是 PyMySQL?
PyMySQL是在Python3.x版本中用於連接MySQL服務器的一個庫,Python2中則使用mysqldb。它是一個遵循 Python數據庫APIv2.0規范,並包含了pure-Python MySQL客戶端的庫。
為什么需要連接數據庫?
在接口測試過程中,常常會有增刪改查的操作,但是單從接口返回不能確保數據是否真的按照我們期望的結果來走,這時就需要查詢數據庫來核對,如注冊接口,需要查詢賬號是否新建成功;接口修改數據,數據庫的數據是否被更新到最新等等。
安裝
cmd命令行執行pip install pymysql
操作數據庫
連接數據庫之前,要先確保數據庫已經建立。操作數據庫的步驟可以簡單分為三步:
1. 連接數據庫pymysql.connect(host, user, password, port, charset)
2. 創建游標對象cursor()
3. 執行sqlexecute(sql)
import pymysql
con = pymysql.connect(host="192.168.100.101", # 連接數據庫
user="test",
password="123456",
port=3306,
charset="utf8"
)
cur = con.cursor() # 創建游標
sql = "SELECT * FROM member WHERE username ='test'"
res = cur.execute(sql) # 執行sql
上面中提到一個概念:游標,實際上就是一種能從包括多條數據記錄的結果集中每次提取一條記錄的機制,就等於光標的上下移動,盡管游標能遍歷結果中的所有行,但它一次只指向一行。游標的作用就是用於對查詢數據庫所返回的記錄進行遍歷,以便進行相應的操作,就像電腦的鼠標一樣。

提取查詢結果
🎈 fetchall:返回的是一個查詢集(元祖的形式,查詢到的每一條數據為這個元祖中的一個元素)
🎈 fatchone:獲取查詢到的數據中的第一條
import pymysql
con = pymysql.connect(host="127.0.0.1",
user="test",
password="123456",
port=3306,
charset="utf8"
)
cur = con.cursor() # 創建游標
sql = "SELECT mobile_phone FROM futureloan.member limit 4"
res = cur.execute(sql)
datas = cur.fetchall()
print(datas)
for i in datas:
print(i)
運行結果:
C:\software\python\python.exe D:/learn/test.py
(('13678703234',), ('15690403234',), ('15680113234',), ('13503071234',))
('13678703234',)
('15690403234',)
('15680113234',)
('13503071234',)
Process finished with exit code 0
🚩特別注意:
執行完增刪改的sql語句之后,需要進行commit
提交確認,這里commit
的作用相當於數據庫中的提交事務。
封裝
凡是需要重復使用的,我們都可以對它進行二次封裝,寫成我們自己的版本,還可以在封裝過程中加入我們想要的內容,使用的時候直接調用即可。
import pymysql
from common.my_config import conf
class HandleDB:
def __init__(self):
# 讀取配置文件的數據庫信息
self.con = pymysql.connect(host=conf.get_str("mysql", "host"),
user=conf.get_str("mysql", "user"),
password=conf.get_str("mysql", "password"),
port=conf.get_int("mysql", "port"),
charset="utf8"
)
self.cur = self.con.cursor()
def get_one(self, sql):
"""獲取查詢到的第一條數據"""
self.con.commit()
self.cur.execute(sql)
return self.cur.fetchone()
def get_all(self, sql):
"""獲取sql語句查詢到的所有數據"""
pass
def count(self, sql):
"""統計sql語句查詢到的數據"""
pass
def close(self):
self.cur.close() # 關閉游標對象
self.con.close() # 斷開連接