新聞中心
Diff概念介紹

Diff是Unix系統(tǒng)的一個很重要的工具程序。它用來比較兩個文本文件的差異,是代碼版本管理的基石之一。
接口Diff測試
接口Diff測試,簡單來說就是比對相同接口在不同版本不同環(huán)境下面的返回內(nèi)容是否符合預(yù)期。對于日常迭代的接口來說,Diff測試是我們接口基本功能測試的有效補(bǔ)充!當(dāng)測試的接口響應(yīng)中包括100+的字段需要校驗(yàn)時,對字段逐一校驗(yàn)的傳統(tǒng)方式效率差的問題就會突顯出來了。這種場景我們可以把某一版本(v1)接口的響應(yīng)作為基準(zhǔn),然后再對比新版本(v2)的響應(yīng),通過工具或者編寫代碼直接查看響應(yīng)的異同,進(jìn)而快速定位接口響應(yīng)信息。通過工具比對接口在這里就不重點(diǎn)介紹了,有很多方法,包括:linux系統(tǒng)中的diff命令,windows可使用工具notepad++等等。在這里我重點(diǎn)介紹一下如何通過代碼實(shí)現(xiàn)diff操作,我們以python為例。
Difflib
Difflib作為python的標(biāo)準(zhǔn)庫,無需安裝,作用是對比文本之間的差異,而且支持輸出可讀性比較強(qiáng)的HTML文檔。
代碼寫起來也非常簡單,實(shí)例如下:
- import difflib
- import sys
- #讀文件
- def read_file(filename):
- try:
- with open(filename, 'r') as f:
- return f.readlines()
- except IOError:
- print("ERROR: 沒有找到文件:%s或讀取文件失?。?% filename)
- sys.exit(1)
- def compare_file(file1, file2, out_file):
- file1_content = read_file(file1)
- file2_content = read_file(file2)
- d = difflib.HtmlDiff() #以html方式比較
- result = d.make_file(file1_content,file2_content) #生成html文本
- with open(out_file, 'w') as f: #把html文本寫入html文件
- f.writelines(result)
- if __name__ == '__main__':
- compare_file(r'D:\logs\log1.log', r'D:\logs\log2.log',r'D:\logs\result.html')
打開html報(bào)告,我們可以清楚地看到兩個文檔中的差別,顯示如下:
其中左邊是文件log1.log,右邊是log2.log
紅色表示log1.log的內(nèi)容被刪除了
綠色表示log2.log新增的內(nèi)容
黃色表示log1.log和log2.log中發(fā)生變化的內(nèi)容
Difflib改進(jìn)
上面的例子是從兩個文件中讀取數(shù)據(jù),然后進(jìn)行的比較,代碼如下:
- file1_content =read_file(file1)
- file2_content = read_file(file2)
那么在真實(shí)測試時,我們需要的是接口響應(yīng)的比對,怎么做呢?也很容易,我們只需要把read_file換成,發(fā)送接口請求(使用requests模塊)并獲取響應(yīng)即可。
- response1=requests.get(req)
- response2=requests.get(req)
在這里仍然有一個問題,我們做接口測試時,是一個請求一個請求校驗(yàn)的,當(dāng)多個請求批量校驗(yàn)時,我們是否有必要每做一個請求就生成一個比對錯誤的html報(bào)告呢?顯然是不需要的,理想情況是,當(dāng)兩個請求響應(yīng)出現(xiàn)錯誤的時候生成錯誤報(bào)告!那么接下來需要思考的是怎么樣判斷html報(bào)告中是否有錯誤出現(xiàn)呢?在這里我介紹一個比較簡單的方法,在diff生成的html報(bào)告,我們通過報(bào)告中的顏色標(biāo)識來判斷(紅色、綠色和紅色)diff結(jié)果,如下圖:
查看一下生成的html文件源碼,發(fā)現(xiàn)文件底部帶顏色的Add、Changed和Deleted 對應(yīng)的腳本是
在html文件中搜索關(guān)鍵字class="diff_sub",發(fā)現(xiàn):
2018,對應(yīng)
可見,發(fā)現(xiàn)一處文字刪除就會出現(xiàn)一個,因此我們可以通過如下代碼實(shí)現(xiàn)
- if result.count('') >0 or result.count('')>0 or result.count('')>0:
- print ("find diff")
- with open(out_file, 'w', encoding='utf-8') as f:
- f.writelines(result)
- else:
- print("not find diff, no html report generate!")
好了,這就是通過difflib進(jìn)行接口比對操作的實(shí)現(xiàn)原理。
當(dāng)前題目:大廠接口測試都在用的技術(shù)-Diff(附源碼)
路徑分享:http://www.5511xx.com/article/dpscppc.html


咨詢
建站咨詢
