大廠介面測試都在用的技術 Diff(附原始碼)

2021-10-19 18:13:27 字數 2498 閱讀 8103

diff是unix系統的乙個很重要的工具程式。它用來比較兩個文字檔案的差異,是**版本管理的基石之一。

介面diff測試,簡單來說就是比對相同介面在不同版本不同環境下面的返回內容是否符合預期。對於日常迭代的介面來說,diff測試是我們介面基本功能測試的有效補充!當測試的介面響應中包括100+的字段需要校驗時,對欄位逐一校驗的傳統方式效率差的問題就會突顯出來了。這種場景我們可以把某一版本(v1)介面的響應作為基準,然後再對比新版本(v2)的響應,通過工具或者編寫**直接檢視響應的異同,進而快速定位介面響應資訊。通過工具比對介面在這裡就不重點介紹了,有很多方法,包括:linux系統中的diff命令,windows可使用工具notepad++等等。在這裡我重點介紹一下如何通過**實現diff操作,我們以python為例。

difflib作為python的標準庫,無需安裝,作用是對比文字之間的差異,而且支援輸出可讀性比較強的html文件。

**寫起來也非常簡單,例項如下:

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報告,我們可以清楚的看到兩個文件中的差別,顯示如下:

其中左邊是檔案log1.log,右邊是log2.log

紅色表示log1.log的內容被刪除了

綠色表示log2.log新增的內容

黃色表示log1.log和log2.log中發生變化的內容

上面的例子是從兩個檔案中讀取資料,然後進行的比較,**如下:

file1_content =read_file(file1)

file2_content = read_file(file2)

那麼在真實測試時,我們需要的是介面響應的比對,怎麼做呢?也很容易,我們只需要把read_file換成,傳送介面請求(使用requests模組)並獲取響應即可。

response1=requests.get(req)

response2=requests.get(req)

在這裡仍然有乙個問題,我們做介面測試時,是乙個請求乙個請求校驗的,當多個請求批量校驗時,我們是否有必要每做乙個請求就生成乙個比對錯誤的html報告呢?顯然是不需要的,理想情況是,當兩個請求響應出現錯誤的時候生成錯誤報告!那麼接下來需要思考的是怎麼樣判斷html報告中是否有錯誤出現呢?在這裡我介紹乙個比較簡單的方法,在diff生成的html報告,我們通過報告中的顏色標識來判斷(紅色、綠色和紅色)diff結果,如下圖:

檢視一下生成的html檔案原始碼,發現檔案底部帶顏色的add、changed和deleted 對應的指令碼是

在html檔案中搜尋關鍵字class="diff_sub",發現:

2018,對應

可見,發現一處文字刪除就會出現乙個,因此我們可以通過如下**實現

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!")

Timeboxing 業界大佬都在用的時間管理法

5月31日,spacex載人火箭發射成功了,馬斯克再一次名聲大震,要知道掌握著這家可以製造火箭的民營公司的同時,他還是特斯拉和太陽城能源的最大控股人。馬斯克同時擔任paypal tesla solarcity spacex四家公司的ceo,他是如何同時實現各公司的有效管理的?馬斯克曾經在採訪中提到的...

成功者都在用的「成功咒語」

改變一生命運的八個觀念 1 這個世界上沒有失敗這回事,只有暫時停止成功。2 過去不等於現在,現在才是將來。3 改變任何人之前,改變世界之前,需要改變的是自己。4 改變以選擇覺決定開始,決定在行動之前。5 沒有 慧根 至少學會 會跟 進入成功人士的 圈子 6 是我的決心,而不是環境在決定我的命運。7 ...

apache做yum源 大神都在用的yum源

yum 命令的使用 比如你想裝個c 環境,直接 yum install gcc c 如果裝的不是想要的版本,yum list gcc c 搜一下,一堆可安裝的包名就列出來,想裝哪個版本裝哪個版本。當然了,能裝就能卸,乙個yum remove gcc c 搞定 啥?你還想裝個docker,想裝個go,...