首页 > 其他分享 >26.基于 page object 模式的测试框架优化实战

26.基于 page object 模式的测试框架优化实战

时间:2023-12-23 10:34:30浏览次数:40  
标签:26 args return object eles black kwargs fun page

目录

  • 异常处理(弹窗黑名单)
  • 日志记录
  • 报告生成
  • 测试数据的数据驱动

异常弹框处理

  • 定义黑名单列表
  • 处理弹框
# 声明一个黑名单
def black_wrapper(fun):
    def run(*args, **kwargs):
        basepage = args[0]
        try:
            return fun(*args, **kwargs)
        except Exception as e:
            for black in black_list:
                eles = basepage.driver.find_elements(*black)
                if len(eles) > 0:
                    eles[0].click()
                    return fun(*args, **kwargs)
            raise e
    return run

@black_wrapper
def find(self, by, locator)
    return self.driver.find_element(by, locator)

异常截图

  • 封装screenshot()截图方法
  • 出现异常时调用截图
# 封装截图方法
def screenshot(self, path):
    self.driver.save_screenshot(path)
...
# 声明一个黑名单
def black_wrapper(fun):
    def run(*args, **kwargs):
        basepage = args[0]
        try:
            return fun(*args, **kwargs)
        except Exception as e:
            basepage.screenshot("tmp.png")
            for black in black_list:
                eles = basepage.driver.find_elements(*black)
                if len(eles) > 0:
                    eles[0].click()
                    return fun(*args, **kwargs)
            raise e
    return run

生成报告

  • 添加日志
    • 使用 logging 日志模块
    • 配置 pytest.ini
  • 添加截图
import logging

def black_wrapper(fun):
    def run(*args, **kwargs):
        basepage = args[0]
        try:
            logging.info(f"查找元素:{args[2]}")
            return fun(*args, **kwargs)
        except Exception as e:
            basepage.screenshot("tmp.png")
            with open("./tmp.png", 'rb') as f:
                picture_data = f.read()
            allure.attach(picture_data, attachment_type=\
                allure.attachment_type.PNG)
            for black in black_list:
                eles = basepage.driver.find_elements(*black)
                if len(eles) > 0:
                    eles[0].click()
                    return fun(*args, **kwargs)
            raise e
    return run

数据驱动

  • 减少冗余代码
  • 集中管理测试数据
  • 便于维护
@pytest.mark.parametrize('参数1,参数2', [
        ('参数1-值1', '参数2-值1'),
        ('参数1-值2', '参数2-值2'),
    ])

总结

  • 异常处理(弹窗黑名单),异常截图
  • 日志记录
  • 报告生成
  • 测试数据的数据驱动

标签:26,args,return,object,eles,black,kwargs,fun,page
From: https://www.cnblogs.com/csfsz/p/17922755.html

相关文章

  • Springboot下PageHelper分页不生效问题
    今天在做一个小项目,引入PageHelper时踩了一个坑,记录一下。解决方案参考:SpringBoot+MyBatis使用pagehelper分页插件及其注意事项(含解决分页不生效问题)环境:SpringBoot3.2.0JDK17Postgresql15PageHelper1.2.12依赖<dependency><groupId>com.github.pagehelper</......
  • 【转载】内存基本概念-node, zone ,page
    1.Linux描述物理内存在linux内存管理(一)中介绍了UMA和NUMA,Linux通过巧妙办法把UMA和NUMA的差别隐藏了起来,所谓的UMA其实就是只有一个结点的NUMA。内存的每个结点关联到系统中的一个处理器内存控制器,每个服务器处理器可以有多个内存控制器,所以每个服务器处理器可以有多个内存结......
  • 适用于双电机控制和PFC控制的R5F526TAADFM、R5F526T8AGFM 32位微控制器
    简介RX26T微控制器产品群是可在单芯片上实现磁场定向控制(FOC)双电机控制和功率因数校正(PFC)控制的5V兼容产品。它搭载工作频率为120MHz的RX第三代CPU内核“RXv3内核”,通过可实现120MHz读取操作的高速闪存和三角函数运算单元(TFUv2)实现超高计算性能。定时器功能支持120MHzPWM(三......
  • CSS object-fit
    一、object-fitobject-fit属性定义了被替换的元素(如img或video)的内容应如何调整大小以适应其容器。object-fit的默认值是fill,这可能导致图像被挤压或拉伸。让我们来看看可能的值。object-fit的可能值:contain、cover、fill、none1、object-fit:contain在这种情况下,图像的大......
  • Kotlin内部实现-01-companion_object
    Kotlin内部实现_01_companionobject1.companionobject概述在Kotlin中,companionobject是一种特殊的对象声明,它用于在类内部创建静态成员。这是Kotlin对Java中静态成员的一种替代方案,因为Kotlin自身不直接支持传统意义上的静态方法或属性。主要用途和特点包括:静......
  • pageoffice6 实现提取数据区域为子文件(Word拆分)
    在实际的开发过程中,有时会遇到希望提取Word文档中部分内容保存为子文件的需求,PageOffice支持提取Word文档数据区域中的内容为一个Word文件流,在服务器端创建PageOffice的WordReader命名空间中的WordDocument对象并获取到DataRegion对象,再调用DataRegion对象的FileBytes属性就可以得......
  • 26k star!Linux不熟悉,快用这个帮助你
    作为一个IT从业者,熟练使用Linux是一项非常重要的能力,不过我想问问电脑前的你,你真的对Linux命令很熟悉吗?我想答案可不一定都是肯定的,说实话笔者就经常不记得改用什么命令或具体怎么用。今天我们推荐一款涵盖了大部分的Linux命令的开源项目,在GitHub已超过23KStar,它就是:linux-command......
  • RV1126 分区教程
    一、前言期初我是想弄一个分区存放自己的APP程序,如果需要更改应用的时候,只需要烧写独立的分区即可,就不需要重新烧写rootfs。这是一个简单的操作,为啥还需要记录了,因为我在里面遇到了一些坑,思路走错了,便折腾了几天。为啥会有这样的需求了,一是为了管理方便,二是将应用程序给新手的......
  • Java中的page集合的遍历(取值/赋值)
    Page<FwSjJbEntity>page1=newPage<>(page,pageSize);LambdaQueryWrapper<FwSjJbEntity>queryWrapper=newLambdaQueryWrapper<>();Page<FwSjJbEntity>jbEntityPage=newPage<FwSjJbEntity>();if(name==null||name.equals......
  • [ABC265E] Warp
    首先,这一题很显然是一个Dp。考虑如何转移状态,因为一开始的坐标是\((0,0)\)。发现最后的坐标是\((A\timesi+C\timesj+E\timesk,B\timesi+D\timesj+F\timesk)\)。如果是统计最后的种类的话,那么就比较简单,枚举\(i\),\(j\)和\(k\)。但是题目要求的是方案数,所......