1. 程式人生 > >python 的 Pillow實現圖片對比

python 的 Pillow實現圖片對比

原文:http://www.cnblogs.com/fnng/p/4881102.html 

在編寫Web自動化測試用例的時候,如何寫斷言使新手不解,嚴格意義上來講,沒有斷言的自動化指令碼不能叫測試用例。就像功能測試一樣,當測試人員做了一些操作之後必然會判斷實際結果是否等於預期結果,只不過,這個過程由測試人員的眼睛完成。而自動化測試指令碼必然要通過一此資訊來斷定用例是否成功。

這其中常用的三種資訊分別是:

title :頁面不同或顯示不同時往往title也會有所變化。

url :與title類似,當頁面發生變化時,跟著url也會改變。

text:相比前者應用更廣泛,因為通過它可以獲取頁面上的任意標識性文字,用於“證明”用例執行是成功的。例如,登陸之後人使用者名稱,查詢的結果等。

但是,在有些情況下,無法獲取這些資訊來證明用例是成功的怎麼辦?當然,下策是不寫斷言,指令碼執行沒有報錯來證明用例執行成功,這當然是無奈之舉。除此之外還可以選擇斷言兩張圖片,在用例執行正確的情況下對當前頁面進行截圖,在用例執行的過程中再次進行截圖。通過對兩張圖片進行比較,從而判斷用例是否執行成功。

根據自己的作業系統以及python版本選擇下載。

安裝:

複製程式碼
> python3 -m pip install Pillow-3.0.0-cp35-none-win_amd64.whl

Processing c:\selenium\pillow-3.0.0-cp35-none-win_amd64.whl

Installing collected packages: Pillow

Successfully installed Pillow
-3.0.0
複製程式碼

  注意,因為我本機同時安裝了Python2.7Python3.5,所以,這裡特意指定安裝在Python3的下面。

複製程式碼
from PIL import Image
import math
import operator
from functools import reduce


def image_contrast(img1, img2):

    image1 = Image.open(img1)
    image2 = Image.open(img2)

    h1 = image1.histogram()
    h2 = image2.histogram()

    result 
= math.sqrt(reduce(operator.add, list(map(lambda a,b: (a-b)**2, h1, h2)))/len(h1) ) return result if __name__ == '__main__': img1 = "./img1.jpg" # 指定圖片路徑 img2 = "./img2.jpg" result = image_contrast(img1,img2) print(result)
複製程式碼

  如果兩張圖片完全相等,則返回結果為浮點型別“0.0”,如果不相同則返回結果值越大。

  這樣就可以在自動化測試用例中呼叫該方法來斷言執行結果。

=====================

關於Pillow庫的詳細文件: