当前位置: 首页 > news >正文

前言:自动化框架的设计模式

1、UI自动化框架的设计模式

自动化测试框架有很多种,常见的自动化框架分类如下:

image.png

在使用上面的自动化框架时,通常会结合使用分层思想,也就是一些自动化框架设计模式,今天重点分享一下UI自动化框架设计使用比较多的一种设计模式:Page Object设计模式。

一、什么是PO模式?

PO模式,全称为Page Object Model ,简称POM,是页面对象模式。
对页面进行抽象或建模的过程,把一个具体的页面转化为编程语言当中的一个对象,页面特性转化成对象属性,页面操作转化为对象方法。把页面的元素设计为页面对象的属性,把页面上的操作(如点击、输入等)设计为页面对象的行为。
在自动化测试当中,主要用来实现对页面操作和测试逻辑的一个分离,目的是达到业务和实现分开,使自动化测试脚本具备更高的可维护性。

二、PO模式的做法:

  • 以页面为单位独立建模
  • 隐藏实现细节
  • 本质是面向接口编程

三、PO模式的优点:

  • 减少重复find click样板代码
  • 提高易读性
  • 页面修改不影响测试用例

四、PO模式六大设计原则:

  1. 用公共方法代表UI所提供的功能,比如把登录封装成一个 login 方法,把搜索方法封装成一个设施方法,把注册操作封装成一个 register 的方法
  2. 方法应该返回其他的Page Object或者返回用于断言的数据
  3. 同样的行为不同的结果可以建模为不同的方法,比如说登录成功有跳转,登录失败有报错,还有一种登陆授权的状况,那么可以封装成三个单独的方法:login success、login error、login invalid
  4. 不在方法内加断言,做到页面逻辑和测试逻辑的分离
  5. 不暴露页面的内部元素给外部,比如一个HTML的页面还有一个页面的上下结构
  6. 不需要建模UI内的所有元素,用到什么逻辑就封装什么

五、UI自动化测试用例如何设计

UI自动化测试用例是从手工测试用例中提取出来的,跟手工测试用例相比,自动化测试用例更加注重用例的严谨性,选择用例的时候遵循以下原则:

  • 优先选取覆盖产品核心功能的用例;
  • 从成本考量,不要选择流程过于复杂的用例;
  • 选取的用例可以是重复执行,繁琐的部分,比如字段验证、提示信息验证;
  • 优先实现正向的测试用例,反向用例一般情况复杂、数量多;

六、怎么提高UI自动化脚本的稳定性

  • 尽量用相对路径的xpath表达式
  • 查找元素优先用显示等待
  • 用例与用例之间尽量避免产生依赖,用例可以独立执行
  • 用例执行结束后对测试场景进行还原,避免影响其他用例的执行
  • 脚本执行失败后加入重试机制,提升用例的稳定性
  • 尽量保证单独的测试环境,避免其他的测试同步进行

2、数据驱动

1、概念

数据驱动:是以数据来驱动整个测试用例的执行,也就是测试数据决定测试结果。

2、特点

  • 数据驱动本身不是一个工业级标准的概念,因此在不同的公司都会有不同的解释
  • 可以把数据驱动理解为一种模式或者一种思想
  • 数据驱动技术可以将用户把关注点放在对测试数据的构建和维护上,而不是直接维护脚本,可以利用同样的过程对不同的数据输入进行测试
  • 数据驱动的实现要依赖参数化的技术

3、传入数据的方式

  • 直接定义在测试脚本中(简单直观、但数据和代码未实现分离,不方便后期维护)
  • 从文件中读取数据,如JSON、excel、xml、txt等格式文件(重点)
  • 从数据库中读取数据
  • 直接调用接口获取数据源
  • 本地封装一些生成数据的方法

4、传入数据的操作(以JSON为例)

4.1 JSON介绍

JSON的全称是”JavaScript Object Notation”,是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式。

4.2 JSON特点

  • JSON是纯文本
  • JSON具有良好的自我描述性,便于阅读和编写
  • JSON具有清晰的层级结构
  • 有效地提升网络传输效率

4.3 JSON语法规则

  • 大括号保存对象
  • 中括号保存数组
  • 对象数组可以相互嵌套
  • 数据采用键值对表示
  • 多个数据由逗号分隔

4.4 JSON的值

  • 数字(整数或浮点数)
  • 字符串(在双引号中)
  • 逻辑值(true 或 false)
  • 数组(在中括号中)
  • 对象(在大括号中)
  • null

3、基于PO和单例设计模式用python+selenium进行ui自动化框架设计

po设计

image.png

关键字驱动
image.png
基于PO和单例设计模式用python+selenium进行ui自动化框架设计【多测师_王sir】_多测师_王sir的技术博客_51CTO博客

接口自动化框架模型设计 - 爱好者zz - 博客园

相关文章:

前言:自动化框架的设计模式

1、UI自动化框架的设计模式 自动化测试框架有很多种,常见的自动化框架分类如下: 在使用上面的自动化框架时,通常会结合使用分层思想,也就是一些自动化框架设计模式,今天重点分享一下UI自动化框架设计使用比较多的一种…...

Web架构安全分析/http/URL/Cookie攻击

Web 架构安全分析 Web 工作机制及基本概念 传统 Web 架构 LAMP 网页 概念 网页就是我们可以通过浏览器上网看到的精美页面,一般都是经过浏览器渲染过的 .html 页面,html 语言在浏览器中渲染。其中包含了CSS、JavaScript 等前端技术。通过浏览器访问…...

.git 目录中有什么?

好吧,我想你们中的大多数人每天都或多或少地使用 git,但是您是否研究过 git 创建的 .git 文件夹中的内容?本文[1]我们将一起探索一下,了解里面到底发生了什么。 ❝ git 在基本层面上只是一堆通过文件名相互链接的文本文件。 ❞ in…...

Debian11系统简单配置

debian11系统简单配置 网卡配置 修改/etc/network/interfaces address 192.168.0.188 gateway 192.168.0.1 netmask 255.255.255.0重启网卡systemctl restart networking.service systemctl restart networking 执行apt 报错 rootdebian:~# apt update 忽略:1 cdrom://[D…...

家装、家居两不误,VR全景打造沉浸式家装体验

当下,用户对生活品质要求日益提升,越来越多的用户对多功能家装用品需求较大,由此造就了VR全景家装开始盛行。VR全景家装打破传统二维空间模式,通过视觉、交互等功能让用户更加真实、直观的体验和感受家居布置的效果。 一般来说&am…...

Ubuntu服务器 Clash Dashboard

正文发不出来 链接:【Linux】解决Ubuntu服务器版本无法使用Clash Dashboard的问题 这个图展示了RNA-Seq实验数据生成的流程。下面是该流程的逐步解释: mRNA或总RNA提取:首先,从细胞或组织样本中提取mRNA或总RNA。mRNA是经过剪切…...

创建数据库表的命令

创建数据库表的通用语法: ​CREATE TABLE table_name (column1 datatype constraint,column2 datatype constraint,...columnN datatype constraint ); 其中,table_name 为要创建的表名,column1 到 columnN 为表的列名,datatype …...

ubuntu18.04 LTS卸载qtcreator-10.0.2

之前通过命令,通过.run文件,安装了Qt Creator 默认安装路径是/opt/ 卸载 在安装路径下,可以看到QtCreatorUninstaller文件 命令行运行该执行文件,会弹出卸载窗口,记得勾选下面的“仅卸载”...

通过字符设备驱动并编写应用程序控制三盏灯亮灭

现象 键盘按1三灯全亮 按0三灯全灭 头文件.h #ifndef __HEAD_H__ #define __HEAD_H__ #define PHY_LED1_MODER 0X50006000 #define PHY_LED1_ODR 0X50006014 #define PHY_RCC 0X50000A28#define PHY_LED2_MODER 0X50007000 #define PHY_LED2_ODR 0X50007014#defin…...

SpringCloud链路追踪——Spring Cloud Sleuth 和 Zipkin 介绍 Windows 下使用初步

前言 在微服务中,随着服务越来越多,对调用链的分析越来越复杂。如何能够分析调用链,定位微服务中的调用瓶颈,并对其进行解决。 本篇博客介绍springCloud中用到的链路追踪的组件,Spring Cloud Sleuth和Zipkin&#xf…...

深入探究音视频开源库 WebRTC 中 NetEQ 音频抗网络延时与抗丢包的实现机制

目录 1、引言 2、什么是NetEQ? 3、NetEQ技术详解 3.1、NetEQ概述 3.2、抖动消除技术 3.3、丢包补偿技术 3.4、NetEQ概要设计 3.5、NetEQ的命令机制 3.6、NetEQ的播放机制 3.7、MCU的控制机制 3.8、DSP的算法处理 3.9、DSP算法的模拟测试 4、NetEQ源文件…...

一篇文章教会你C++11入门知识点

C11入门 列表初始化1. {}初始化2. initializer_list 声明1. auto2. decltype3. nullptr 范围for循环STL新增容器1. array2. forward_list3. unordered_map和unordered_set 右值引用和移动语义1. 左值引用和右值引用2. 左值引用和右值引用比较3. 右值引用使用场景和意义4. 右值引…...

idea leetcode配置

idea leetcode配置 配置页面如下图所示,根据需要,填入登录用户名、密码、文件存放路径,注意如果要使用自定义的代码结构配置,要勾选图中框出来的选项。 Code FileName: $!velocityTool.camelCaseName(${question.tit…...

Golang通道(Channel)原理解析

引言 并发编程是现代软件开发中的一个重要主题。Golang作为一门并发友好的编程语言,提供了一种简单而强大的机制,即通道(Channel),用于在不同的Goroutine之间进行通信和同步。通道的设计和原理是Golang并发模型的核心…...

使用树莓派搭建文件共享服务器-samba服务器

局域网内部通过文件共享来传输文件是一种非常方便的方式,小米摄像头也支持用文件共享smb模式将视频备份到局域网中的文件服务器上。之前我一直使用荣耀pro路由器游戏版,是自带USB接口支持文件共享服务的,接上USB移动硬盘,小米摄像…...

GitLab使用webhook触发Jenkins自动构建

1、jenkins安装gitlab插件 在插件管理中,搜索gitlab安装这个插件。 2、job中配置webhook地址和密钥 进入job设置,构建触发器中就可以看到gitlab的webhook配置,复制URL地址和随机令牌至gitlab中 勾选后,就可以展开设置&#xff…...

柔性数组的使用及注意事项

1.柔性数组在结构体当中,并且在结构体的最后面. 2.结构体中除了柔型数组外至少还要有一个其他成员. 3.sizeof()返回结构体的大小不包含柔性数组的大小. 4.malloc 例:struct sdshdr16 *p malloc(sizeof (struct sdshdr16) 32); // 32 为柔性数组的大小 5.free 例: fre…...

数学建模——最优连接(基于最小支撑树)

一、概念 1、图的生成树 由图G(V,E)的生成子图G1(V,E1)(E1是E的子集)是一棵树,则称该树为图G的生成树(支撑树),简称G的树。图G有支撑树的充分必要条件为图G连通。 2、最小生成树问题 连通图G(V,E),每条边…...

【LeetCode】43. 字符串相乘

1 问题 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。 示例 1: 输入: num1 “2”, num2 “3” 输出: “…...

车联网之电子围栏模型使用翻滚窗口【二十一】

1. 电子围栏模型使用翻滚窗口 l 创建90秒翻滚窗口,计算中电子围栏信息(ElectricFenceModel中的值根据车辆是否在围栏内进行设置) 设置电子围栏水印 根据vin进行分组 创建翻滚窗口,90秒为一个窗口周期 自定义窗口函数,计算电子围栏中和围栏外车辆信息 1.1 创建90秒翻滚窗口 …...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...