首页 > 其他分享 >25.自动化测试架构优化

25.自动化测试架构优化

时间:2023-12-23 10:34:42浏览次数:29  
标签:25 架构 框架 kwargs args black 自动化 return find

打造测试框架的需求与价值

  • 领域模型适配:封装业务实现,实现业务管理
  • 提高效率:降低用例维护成本,提高执行效率
  • 增强功能:解决已有框架不满足的情况

自动化框架应具备的功能

  • 支持管理用例,运行用例
  • 支持查找元素/定位元素,对元素/页面 进行各种操作(点击,滑动,输入等等)
  • 支持生成测试报告
  • 能够实现功能的复用,(比如登录,搜索等)
  • 当页面有异常弹框的时候,可以进行有效的处理
  • 当用例失败,需要添加失败时的日志,截图,等信息,放在测试报告中
  • 多设备并发
  • 支持平台化

自动化测试框架实现

 
功能实现
管理用例,运行用例 pytest
查找元素/定位元素 Appium
测试报告 Allure
功能复用 PO 实现
异常弹框 编写代码
失败时的日志,截图 编写代码
多设备并发 selenium grid
平台化 VUE+FLASK/Django
   

项目结构

为什么要封装框架?

  • 复用
  • 平台化

增强功能

  • 需求与价值
  • 项目结构优化
  • 框架封装

需求与价值

项目结构优化

  • 框架层
  • 业务层
  • 用例层

框架封装

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

异常处理(弹窗黑名单)

# 声明一个黑名单
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)

日志记录

  • 运行日志记录
  • 错误日志记录
import logging
logging.basicConfig(level=logging.INFO)

def black_wrapper(fun):
def run(*args, **kwargs):
basepage = args[0]
try:
logging.info("start find: \nargs: " + str(args) + " kwargs: " + str(kwargs))
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 basepage.black_list:
eles = basepage.driver.find_elements(*black)
if len(eles) > 0:
eles[0].click()
return fun(*args, **kwargs)
raise e

return run

报告生成

  • 异常日志
  • 异常截图
  • 测试用例步骤
  • 测试描述
  • bug,issue 关联
  • 用例分类(feature,story,step 等)

参数化与数据驱动

  • 支持支持测试用例 / 步骤层级的参数化驱动配置
  • 配置方式包括三个部分
  • 参数定义(指定名字)
  • 数据源指定(指定 yaml 文件 /或者其它格式文件)
  • 数据源准备(无论是从线上环境 捞的数据,还是自己创建的测试数据)

总结

  • 自动化测试框架应具备的功能
  • 自动化测试框架优化(在 PO 的基础上,添加异常处理,日志,报告 ,截图,参数化与数据驱动等)逐步的将框架完善
pip install allure-pytest
pytest test_xxx.py --alluredir=./result
allure serve ./result

数据驱动

- find: //*[@text='xxxx']
  action: find_and_click
- find: //*[@text='xxxx']
  action: send
  content: 123
def load(self, yaml_path):
    with open(yaml_path, encoding="utf-8") as f:
        data = yaml.load(f)
    for step in data:
        xpath_expr = step.get("find")
        action = step.get("action")
        if action == "find_and_click":
            self.find_and_click(By.XPATH, xpath_expr)
        elif action == "send":
            content = step.get("content")
            self.send(By.XPATH, xpath_expr, content)
 

标签:25,架构,框架,kwargs,args,black,自动化,return,find
From: https://www.cnblogs.com/csfsz/p/17922752.html

相关文章

  • 数据处理架构知识
    Lambda架构Lambda架构由Twitter的首席科学家NathanMarz提出。这种架构试图平衡延迟、吞吐量、容错性和系统复杂性四个方面,以满足大数据和实时数据处理的需求。Lambda架构主要由三个层次组成:批处理层(BatchLayer):负责处理大量的历史数据,生成批处理视图。速度层(SpeedLayer):负责处......
  • java接口自动化测试实战003----fastjson处理传入参数为JSON格式数据
    一、fastjson概述1、概述   fastjson是阿里爸爸开发的一款专门用于Java开发的包,可以方便的实现json对象与JavaBean对象的转换,实现JavaBean对象与json字符串的转换,实现json对象与json字符串的转换。2、常用API   fastjsonAPI入口类是com.alibaba.fastjson.JSON,常......
  • java接口自动化测试实战002----测试数据封装及ExcelUtil优化
    一、利用testNG测试框架进行封装1、封装实现新建测试类,类中新增多个方法,每个方法存储一条测试数据并调用HttpUtl类中的doGet或doPost方法。缺点:代码复杂、繁琐,且不适用测试数据量大的情况。2、封装步骤(1)maven的pom.xml文件中添加testNG测试框架的依赖,如下所示:<!--https://......
  • java接口自动化测试实战004----分表存储接口信息和用例信息之CaseUtil和RestUtil
    一、分表存储用例信息和接口信息1、实现思想  将用例相关信息存储在用例表单中,将接口信息存储在接口信息表单中,创建对应的类存储表单中的信息。2、实现步骤(1)修改表格文件,分表存储用例信息和接口信息,如下图所示:     (2)修改ExcelUtil中的读取函数datas,让表单名称......
  • python自动化学习笔记5-----allure测试报告
    1、运行测试报告 2、allure注解的使用  3、优化测试报告之添加对应的标签 4、注解的使用     5、yaml文件格式 6、更改logo(1)allure目录下找到allure.yml的文件,增加插件    (2)在插件目录下添加要展示的图片    (3)修改styles.cs......
  • python自动化学习笔记6-----jekins环境搭建及使用
        msi版本安装后,要去电脑服务里面设置为自启动,否则重启电脑后使用不了。  web自动化1、实现linux部署jekins,window运行自动化代码,不在同一个机器上运行在执行机(自己的电脑上)访问jekins网址进行相应设置        运行后,进行连接,连接成功后,小......
  • python自动化学习笔记4-----pytest单元测试框架
            ......
  • 代码随想录算法训练营第十天 | 栈与队列理论基础,232.用栈实现队列,225.用队列实现栈
    一、栈与队列理论基础学习:1.定义栈先进后出队列先进先出2.底层实现均可以通过数组或链表进行实现二、232.用栈实现队列题目链接:LeetCode232.用栈实现队列学习前:思路:无学习后:不同方法有部分功能实现是一致的,则可以进行抽象提取,实现复用性两个栈实现队列时......
  • Selenium - 自动化测试框架
    Selenium介绍Selenium是目前用的最广泛的WebUI自动化测试框架,核心功能就是可以在多个浏览器上进行自动化测试,支持多种编程语言,目前已经被google,百度,腾讯等公司广泛使用。开发步骤1、配置google驱动的环境变量,如果不配置需要在代码中指定驱动位置。2、eclipse中导......
  • 2023常见自动化测试工具集合
    1、Appium------->AppUI自动化测试官网:http://appium.ioAppium是一个移动端自动化测试开源工具,支持iOS和Android平台,支持Python、Java等语言,即同一套Java或Python脚本可以同时运行在iOS和Android平台,Appium是一个C/S架构,核心是一个Web服务器,它提供了一套REST的......