引言
在上一篇《基於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