python UI自动化图片断言

1、图片对比方法封装

# encoding=utf-8
from PIL import Image

class ImageCompare(object):
    '''
    本类实现了对两张图片通过像素比对的算法,获取文件的像素个数大小
    然后使用循环的方式将两张图片的所有项目进行一一对比,
    并计算比对结果的相似度的百分比
    '''

    def make_regalur_image(self, img, size=(256, 256)):
        # 将图片尺寸强制重置为指定的size大小
        # 然后再将其转换成RGB值
        return img.resize(size).convert('RGB')

    def split_image(self, img, part_size=(64, 64)):
        # 将图片按给定大小切分
        w, h = img.size
        pw, ph = part_size
        assert w % pw == h % ph == 0
        return [img.crop((i, j, i + pw, j + ph)).copy() \
                for i in range(0, w, pw) for j in range(0, h, ph)]

    def hist_similar(self, 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)

    def calc_similar(self, li, ri):
        # 计算两张图片的相似度
        return sum(self.hist_similar(l.histogram(), r.histogram()) \
                   for l, r in zip(self.split_image(li), self.split_image(ri))) / 16.0

    def calc_similar_by_path(self, lf, rf):
        # 两张图片对比并返回相似度
        li, ri = self.make_regalur_image(Image.open(lf)), \
                 self.make_regalur_image(Image.open(rf))
        return self.calc_similar(li, ri)

2、UI自动化执行时自动截图及对比

    def compare_image(driver, original_image_path):
        """
        图片对比
        :param original_image: 原图路径,推荐png类型图片
        :return: 返回对比图片的匹配度
        """
        current_stamp = datetime.datetime.now().timestamp()
        file_time = datetime.datetime.fromtimestamp(current_stamp).strftime("%Y%m%d%H%M%S")
        file_dir = os.path.split(original_image_path)
        file_name = os.path.splitext(file_dir[1])
        print(file_dir)
        print(file_name)
        new_imge_path = os.path.join(file_dir[0], file_name[0] + file_time + ".png")
        print(new_imge_path)
        driver.save_screenshot(new_imge_path)
        from myweb.tools.image_compare import ImageCompare
        img_comp = ImageCompare()
        return img_comp.calc_similar_by_path(original_image_path, new_imge_path) * 100


    def assert_compare_image_mach(soriginal_image_path, percentage=100):
        """
        断言图片匹配度
        :param original_image_path: 原图路径
        :param percentage: 匹配程度,默认100匹配,传小数或整数
        :return:
        """
        image_percentage = compare_image(original_image_path)
        if image_percentage >= percentage:
            return True
        else:
            return False
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值