转载请注明出处:http://blog.csdn.net/cici_li
在近期的crosswalk GUI automation项目中,结果pass/fail的判断大致有以下几种
1. 期望结果可量化:期望结果即UI展现的web element的字符串,或者数值等,抓取web页面元素,跟期望结果比对;
2. 期望结果为ref data:调用另一种方法来实现相同的效果,以此产生ref html data,然后将结果html与ref html做对比
3. 期望结果为之前运行的正确结果(baseline data):在GUI中,之前运行的正确结果可以截屏(screenshot)保存,作为baseline img,然后将本次执行结果与之比对。
该方法有个弊端,就是在不同device上执行时,由于分辨率不同,baseline img会不同,这种情况下baseline img需要构造多份。
这里我们讲下在第三种方法中,如何将结果数据与baseline img来比对。这就涉及到图片相似度计算,我们调用python image library (PIL)来处理,代码如下:
#!/usr/bin/env python
import Image
#standardize the image
def make_regalur_image(img, size = (256, 256)):
return img.resize(size).convert('RGB')
def hist_similar(lh, rh):
assert len(lh) == len(rh)
return sum(1 - (0 if l == r else float(abs(l - r))/max(l, r)) for l, r in zip(lh, rh))/len(lh)
#Images similarity calculation
def cal_images_similar(img1,img2):
#open two images
fimg1=Image.open(img1)
fimg2=Image.open(img2)
#regular the image
reg_img1 = make_regalur_image(fimg1)
reg_img2 = make_regalur_image(fimg2)
#calculate the similar
ret=hist_similar(reg_img1.histogram(), reg_img2.histogram())
return ret*100
def main():
img1 = "./a.png"
img2 = "./b.png"
img3 = "./asame.png"
similarity = cal_images_similar(img1,img2)
print "similarity of a,b is: ", similarity
similarity = cal_images_similar(img1,img3)
print "similarity of a,asame is: ", similarity
if __name__ =="__main__":
main()