引言
在上一篇《基於Python接口自動化測試框架(初級篇)附源碼》講過了接口自動化測試框架的搭建,最核心的模塊功能就是測試數據庫初始化,再來看看之前的框架結構:

可以看出testcase下有很多測試用例,並且每個測試用例都寫了請求地址,請求參數,請求頭等相關數據,還有一些斷言的數據。如果接口很多的話,這樣每個case寫都要寫,導致后期工作量大,維護起來不方便。
針對上述情況,引入python一個非常好用的第三方庫ddt,其作用就是數據驅動,將數據與代碼分離,可以把所有的接口相關的測試用例數據存放在excel里,然后維護一個API文件,這樣做就不需要寫很多case代碼。
框架設計思路
1.大致處理流程:

2.接口自動化測試框架處理過程:
- 首先,測試數據初始化,維護的業務數據到數據庫中,也就是截圖中的第一步
- 第二步,用Excel維護一份接口測試用例數據(用例id、請求方法、請求參數、請求頭、請求類型、返回數據,測試結果等)。
- 測試框架只需寫一份調用API的代碼,讀取第二步的維護的接口測試數據,然后向被測系統發送請求,也就是圖中的第三步。
- 當調用接口的時候,會查詢數據庫,就是第四步。
- 測試框架根據接口返回的數據和Excel的數據進行比較,生成最終測試結果寫入Excel中,並且生成測試報告。
大致流程:初始化測試數據→讀取測試數據→發送請求→寫入測試結果→生成測試報告→發送測試郵件。
如圖:

框架結構

這里就不重復介紹了,可以參考初級篇,對比一下。
運行程序:
............... Time Elapsed: 0:00:01.106878 郵件發送成功!
測試報告:

PS:右側那個餅圖是鼠標放上去自動會放大。
郵件模塊
import os,sys
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
from config import setting
import smtplib
from main.newReport import new_report
import configparser
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
def send_mail(file_new):
"""
定義發送郵件
:param file_new:
:return: 成功:打印發送郵箱成功;失敗:返回失敗信息
"""
f = open(file_new,'rb')
mail_body = f.read()
f.close()
#發送附件
con = configparser.ConfigParser()
con.read(setting.TEST_CONFIG,encoding='utf-8')
report = new_report(setting.TEST_REPORT)
sendfile = open(report,'rb').read()
# --------- 讀取config.ini配置文件 ---------------
HOST = con.get("user","HOST_SERVER")
SENDER = con.get("user","FROM")
RECEIVER = con.get("user","TO")
USER = con.get("user","user")
PWD = con.get("user","password")
SUBJECT = con.get("user","SUBJECT")
att = MIMEText(sendfile,'base64','utf-8')
att["Content-Type"] = 'application/octet-stream'
att.add_header("Content-Disposition", "attachment", filename=("gbk", "", report))
msg = MIMEMultipart('related')
msg.attach(att)
msgtext = MIMEText(mail_body,'html','utf-8')
msg.attach(msgtext)
msg['Subject'] = SUBJECT
msg['from'] = SENDER
msg['to'] = RECEIVER
try:
server = smtplib.SMTP()
server.connect(HOST)
server.starttls()
server.login(USER,PWD)
server.sendmail(SENDER,RECEIVER,msg.as_string())
server.quit()
print("郵件發送成功!")
except Exception as e:
print("失敗: " + str(e))
運行代碼后:

Excel寫入測試結果
報告和郵件都有了,再來看看測試結果回寫Excel的數據:

結果和測試報告中結果一致。
總結
到此,接口自動化測試框架開發基本完成,本文主要講述利用ddt進行數據驅動,實現測試數據與測試代碼分開模式,以便提高可讀性、執行效率和降低維護成本。
還有一點需要說明,這套測試用例中的接口基本上是沒有關聯關系的,如果有上下關聯的,就不能這樣寫了,不然第一個接口執行失敗,后面基本全部失敗。所以只適用於沒有上下依賴關系的接口測試。
雖然代碼已經完成,還有一些細節的地方需要優化,比如日志、報告自動清理,定時發送郵件,Jenkins集成等等。
附錄
更多干貨:加入測試開發交流QQ群:696400122
微信公眾號:全棧測試開發日記,
CSDN地址:https://blog.csdn.net/liudinglong1989/article/details/104457379
