av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

大廠接口測(cè)試都在用的技術(shù)-Diff(附源碼)

Diff概念介紹

Diff是Unix系統(tǒng)的一個(gè)很重要的工具程序。它用來(lái)比較兩個(gè)文本文件的差異,是代碼版本管理的基石之一。

接口Diff測(cè)試

接口Diff測(cè)試,簡(jiǎn)單來(lái)說(shuō)就是比對(duì)相同接口在不同版本不同環(huán)境下面的返回內(nèi)容是否符合預(yù)期。對(duì)于日常迭代的接口來(lái)說(shuō),Diff測(cè)試是我們接口基本功能測(cè)試的有效補(bǔ)充!當(dāng)測(cè)試的接口響應(yīng)中包括100+的字段需要校驗(yàn)時(shí),對(duì)字段逐一校驗(yàn)的傳統(tǒng)方式效率差的問(wèn)題就會(huì)突顯出來(lái)了。這種場(chǎng)景我們可以把某一版本(v1)接口的響應(yīng)作為基準(zhǔn),然后再對(duì)比新版本(v2)的響應(yīng),通過(guò)工具或者編寫(xiě)代碼直接查看響應(yīng)的異同,進(jìn)而快速定位接口響應(yīng)信息。通過(guò)工具比對(duì)接口在這里就不重點(diǎn)介紹了,有很多方法,包括:linux系統(tǒng)中的diff命令,windows可使用工具notepad++等等。在這里我重點(diǎn)介紹一下如何通過(guò)代碼實(shí)現(xiàn)diff操作,我們以python為例。

Difflib

Difflib作為python的標(biāo)準(zhǔn)庫(kù),無(wú)需安裝,作用是對(duì)比文本之間的差異,而且支持輸出可讀性比較強(qiáng)的HTML文檔。

代碼寫(xiě)起來(lái)也非常簡(jiǎn)單,實(shí)例如下:

 
 
 
 
  1. import difflib 
  2. import sys 
  3. #讀文件 
  4. def read_file(filename): 
  5.       try: 
  6.            with open(filename, 'r') as f: 
  7.            return f.readlines() 
  8.       except IOError: 
  9.            print("ERROR: 沒(méi)有找到文件:%s或讀取文件失敗!"% filename) 
  10.            sys.exit(1) 
  11. def compare_file(file1, file2, out_file): 
  12.     file1_content = read_file(file1) 
  13.     file2_content = read_file(file2) 
  14.     d = difflib.HtmlDiff() #以html方式比較 
  15.     result = d.make_file(file1_content,file2_content) #生成html文本 
  16. with open(out_file, 'w') as f: #把html文本寫(xiě)入html文件 
  17.         f.writelines(result) 
  18. if __name__ == '__main__': 
  19.     compare_file(r'D:\logs\log1.log', r'D:\logs\log2.log',r'D:\logs\result.html') 

 打開(kāi)html報(bào)告,我們可以清楚地看到兩個(gè)文檔中的差別,顯示如下:

其中左邊是文件log1.log,右邊是log2.log

紅色表示log1.log的內(nèi)容被刪除了

綠色表示log2.log新增的內(nèi)容

黃色表示log1.log和log2.log中發(fā)生變化的內(nèi)容

Difflib改進(jìn)

上面的例子是從兩個(gè)文件中讀取數(shù)據(jù),然后進(jìn)行的比較,代碼如下:

 
 
 
 
  1. file1_content =read_file(file1) 
  2.  
  3. file2_content = read_file(file2) 

 那么在真實(shí)測(cè)試時(shí),我們需要的是接口響應(yīng)的比對(duì),怎么做呢?也很容易,我們只需要把read_file換成,發(fā)送接口請(qǐng)求(使用requests模塊)并獲取響應(yīng)即可。

 
 
 
 
  1. response1=requests.get(req) 
  2.  
  3. response2=requests.get(req) 

 在這里仍然有一個(gè)問(wèn)題,我們做接口測(cè)試時(shí),是一個(gè)請(qǐng)求一個(gè)請(qǐng)求校驗(yàn)的,當(dāng)多個(gè)請(qǐng)求批量校驗(yàn)時(shí),我們是否有必要每做一個(gè)請(qǐng)求就生成一個(gè)比對(duì)錯(cuò)誤的html報(bào)告呢?顯然是不需要的,理想情況是,當(dāng)兩個(gè)請(qǐng)求響應(yīng)出現(xiàn)錯(cuò)誤的時(shí)候生成錯(cuò)誤報(bào)告!那么接下來(lái)需要思考的是怎么樣判斷html報(bào)告中是否有錯(cuò)誤出現(xiàn)呢?在這里我介紹一個(gè)比較簡(jiǎn)單的方法,在diff生成的html報(bào)告,我們通過(guò)報(bào)告中的顏色標(biāo)識(shí)來(lái)判斷(紅色、綠色和紅色)diff結(jié)果,如下圖:

查看一下生成的html文件源碼,發(fā)現(xiàn)文件底部帶顏色的Add、Changed和Deleted 對(duì)應(yīng)的腳本是

在html文件中搜索關(guān)鍵字class="diff_sub",發(fā)現(xiàn):

2018,對(duì)應(yīng)

可見(jiàn),發(fā)現(xiàn)一處文字刪除就會(huì)出現(xiàn)一個(gè),因此我們可以通過(guò)如下代碼實(shí)現(xiàn)

 
 
 
 
  1. if result.count('') >0 or result.count('')>0 or result.count('')>0: 
  2.     print ("find diff") 
  3.     with open(out_file, 'w', encoding='utf-8') as f: 
  4.            f.writelines(result) 
  5. else: 
  6.       print("not find diff, no html report generate!") 

 好了,這就是通過(guò)difflib進(jìn)行接口比對(duì)操作的實(shí)現(xiàn)原理。


名稱欄目:大廠接口測(cè)試都在用的技術(shù)-Diff(附源碼)
網(wǎng)頁(yè)地址:http://uogjgqi.cn/article/dpscppc.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流