selenium用例执行过程采集操作形成测试报告上的回复

在代码执行的过程中不断的进行截图,把截图拼接成gif动态图,放在测试报告上

1、每条用例执行启动一个线程,这个线程会每隔0.3秒进行截图

  • 项目下创建一个临时目录video用来存储所有截图以及gif动态图

  • 封装不断截图的方法,每隔0.3秒进行截图

    python 复制代码
    # 封装一个普通函数,实现每隔0.3秒截图
    # dr代表核心操作对象
    # worker_id代表当前进程id,主要是用来在多进程并发时区分不同进程下的截图
    def shot(dr,worker_id):
        global shot_flag
        shot_flag = True # 全局变量,用来标识每条用例截图的开始和结束,用例结束后把shot_flag变为fasle
        # 每次截图开始前,清除当前进程下临时图片及gif动态图
        for img in os.listdir(f'{project_path}/video'):
            # img就是拿到的每个文件名称
            if img.startswith(worker_id):
                os.remove(f'{project_path}/video/{img}')
        i = 0
        while shot_flag:
            try:
                dr.get_screetshot_as_file(f'{project_path}/video/{worker_id}_{i}.png')
                time.sleep(0.3)
                i += 1
            except:
                return
  • 没条用例开始执行的时候开启一个线程,执行截图

    python 复制代码
    @pytest.fixture(scope='function',autouse=True)
    def case_setup(worker_id):
        # 创建线程
        # target表示该线程要执行的动作,只写函数名称就行
        # args指的是要执行这个函数时需要的入参
        thd = threading.Thread(target=shot,args=(DriverOperate.globalDriverOperate,worker_id))
        thd.start()
  • 将图片按照顺序拼接成gif动态图,把当前用例形成的gif动态图放在测试报告上

python 复制代码
@pytest.fixture(scope='function',autouse=True)
def case_teardown(worker_id,common_info):
    yield
    global shot_flag
    shot_flag=False
    # 完成当前用例临时图片的拼接,形成gif动态图
    # 1.得到当前用例所有的临时图片名称
    img_list = []# 存储多个图片名称
    # 图片名称规则 gw0_0.png/gw0_1.png/gw0_2.png
    for img in os.listdir(f'{project_path}/video'):
        if img.startswith(worker_id) and img.endswith('.png'):
            img_list.append(img)

    # img_list = ['gw0_0.png','gw0_1.png','gw0_11.png','gw0_31.png']
    # 从目录得到的所有图片名称的排序上可能不对,拼接gif必须按照顺序来
    # 因此我们主要针对img_list中的图片名称进行排序
    img_list.sort(key=lambda name: int(name.split('_')[1][:-4]))
    # 完成图片拼接,需要用到一个图片操作的第三方库
    # pip  install pillow -i https://pypi.doubanio.com/simple
    first_img = Image.open(f'{project_path}/video/{img_list[0]}')
    eles_img = [] # 存储除了第一张图以外的其他图片的二进制对象
    for img in img_list[1:]:
        cur_img = Image.open(f'{project_path}/video/{img}')
        eles_img.append(cur_img)
    # 完成拼接
    first_img.save(f'{project_path}/video/{worker_id}_record.gif',
                   append_images=eles_img,
                   duration=300,# 每隔多长时间播放一张图片,单位是毫秒
                   save_all=True,
                   loop=1 # 表示循环播放次数
                   )

    # 将生成的gif动态图放入到allure测试报告上
    with open(f'{project_path}/video/{worker_id}_record.gif',mode='rb') as f:
        allure.attach(f.read(),'执行回放',attachment_type=allure.attachment_type.GIF)
    # 每次用例执行结束后,清除当前进程下临时图片及gif动态图
    for img in os.listdir(f'{project_path}/video'):
        # img就是拿到的每个文件名称
        if img.startswith(worker_id):
            os.remove(f'{project_path}/video/{img}')
相关推荐
测试人社区-小明20 小时前
智能弹性伸缩算法在测试环境中的实践与验证
人工智能·测试工具·算法·机器学习·金融·机器人·量子计算
中冕—霍格沃兹软件开发测试1 天前
边界值分析:功能测试中的精度利器
人工智能·功能测试·科技·测试工具·appium·bug
Wpa.wk1 天前
自动化测试-鼠标+键盘操作 - Actions高级控件
java·开发语言·测试工具·自动化·计算机外设·actions·高级控件
我的xiaodoujiao1 天前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 32--开源电商商城系统项目实战--如何区分登录状态
python·学习·测试工具·pytest
mike04121 天前
Eclipse+maven+selenium自动化测试开发环境搭建
selenium·eclipse·maven
我的xiaodoujiao1 天前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 33--基础知识 8--切换窗口句柄
python·学习·测试工具·pytest
卓码软件测评2 天前
第三方高校软件课题验收测试机构:【使用Apifox测试gRPC服务步骤和技巧】
网络·测试工具·测试用例
2501_924064112 天前
如何测试接口最大并发量及推荐实用工具
测试工具
玩转数据库管理工具FOR DBLENS2 天前
DBLens:开启数据库管理新纪元——永久免费,智能高效的国产化开发利器
数据结构·数据库·测试工具·数据库开发
微尘hjx2 天前
【目标检测软件 01】YOLO识别软件功能与操作指南
人工智能·测试工具·yolo·目标检测·计算机视觉·ai·pyqt