自动化测试po模式是什么?自动化测试po分层如何实现?

一、什么是PO模式

全称:page object model  简称:POM/PO

PO模式最核心的思想是分层,实现松耦合!实现脚本重复使用,实现脚本易维护性!

主要分三层:

1.基础层BasePage:封装一些最基础的selenium的原生的api方法,元素定位,框架跳转等。

2.PO层:元素定位、获得元素对象,页面动作

3.测试用例层:业务逻辑,数据驱动!

三者的关系:PO层继承继承层,测试用例层调用PO层!

二、什么是自动化测试框架

 

说到自动化框架,我相信很多人应该都听过这个词,但是不知其到底是个什么东西,为什么要用自动化框架。有很多人堆自动化框架都是懵懵懂懂,就跟谈恋爱一样,朦胧美!

一个好的自动化测试框架是可以让不那么懂技术的人也可以写自动化测试脚本的,

一个好的自动化测试框架可以减少自动化测试中脚本管理和维护当中的人力物力和财力。

其实自动化框架的一个最大的意义在于可重用性。因为在框架里,你可以实现很多的通用功能来简化整个脚本的开发过程。并且生成美观的测试报告。

三、非PO模式和PO模式优缺点对比

 

非PO模式PO模式
面向过程的线性脚本POM把页面元素定位和业务操作流程分开。实现松耦合。
复用性差UI元素的改变不需要修改业务逻辑代码。只需要找到对应的PO页修改定位即可,数据代码分离
维护性差PO能使我们的测试代码提高代码的可读性,高复用性,可维护性。

四、如何从0到1搭建PO模型 

非PO模式举个栗子:有如下百度搜索脚本:

import unittest

from selenium import webdriver

from selenium.webdriver.common.by import By

class Test(unittest.TestCase):

def test01(self):

# 打开浏览器

driver = webdriver.Chrome()

# 加载百度首页

driver.get('http://www.baidu.com')

# 在百度搜索栏中输入软件测试

driver.find_element(By.ID, 'kw').send_keys('软件测试')

# 点击百度一下按钮

driver.find_element(By.ID, 'su').click()

def test02(self):

# 打开浏览器

driver = webdriver.Chrome()

# 加载百度首页

driver.get('http://www.baidu.com')

# 在百度搜索栏中输入软件测试

driver.find_element(By.ID, 'kw').send_keys('硬件测试')

# 点击百度一下按钮

driver.find_element(By.ID, 'su').click()

 

如何把上述栗子改成PO模式呢?

1、基础层BasePage

from selenium import webdriver

class BasePage:

#构造方法

def __init__(self):

# 打开浏览器

self.driver = webdriver.Chrome() # Alt+Enter

# 加载百度首页

self.driver.get('http://www.baidu.com')

#封装定位元素

def find_ele(self,*args):

ele = self.driver.find_element(*args)

return ele

2、PO层:封装百度页面元素定位,元素对象以及页面操作

from selenium.webdriver.common.by import By

from base.base_page import BasePage

class BaiduPage(BasePage):

#元素定位,

baidu_text_loc = (By.ID, 'kw')

baidu_submit_loc = (By.ID, 'su')

#获得元素对象,

def get_text_obj(self):

ele = self.find_ele(*BaiduPage.baidu_text_loc)

return ele

def get_submit_obj(self):

ele = self.find_ele(*BaiduPage.baidu_submit_loc)

return ele

#页面操作

def search(self,search_string):

self.get_text_obj().send_keys(search_string)

self.get_submit_obj().click()

3、测试用例层:业务逻辑和数据驱动

from ddt import ddt, data

from po.baidu_page import BaiduPage

@ddt

class BaiduTest(unittest.TestCase):

@data('软件测试','硬件测试')

def test01(self,seaString):

BaiduPage().search(seaString)

time.sleep(5)

if __name__ == '__main__':

unittest.main()

从上面的PO案例:让我们更加了解清晰PO的优点在于:

1.POM把页面元素定位和业务操作流程分开。实现松耦合。
2.UI元素的改变不需要修改业务逻辑代码。只需要找到对应的PO页修改定位即可,数据代码分离
3.PO能使我们的测试代码提高代码的可读性,高复用性,可维护性。

五、自动化测试框架和PO的关系 

自动化框架=po+各种封装(日志处理封装,全局配置文件的封装,数据库连接的封装,excel操作封装,数据驱动封装等)

其实想要胜任UI自动化测试岗位还需要掌握以下内容:

1.python或java

2.selenium的API

3.unittest/pytest单元测试框架

4.htmltestrunner/allure测试报告

5.数据驱动dtt(excel,yaml,mysql)或pytest中的fixtrue

6.关键字驱动:公共类,方法封装,随机数,数据库连接,全局登录

7.全局配置文件处理

8.日志处理

9.断言

10.第三方库

11.git和github或码云集成开发!

12.jenkins持续集成

这些内容在我的CSDN博客当中基本都有涉猎,大家需要什么就去搜索什么吧!

六、总结

全文笔者耗时两小时,纯手打,纯干货,如果您觉得对您有帮助,请点赞,收藏,分享三连!您的支持是笔者最大的动力!

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

 

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/277962.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

10、RabbitMQ高频面试题

1、你们项目中哪里用到了RabbitMQ RabbitMQ是我们项目中服务通信的主要方式之一 , 我们项目中服务通信主要有二种方式实现 : 通过Feign实现服务的同步调用通过MQ实现服务的异步通信 下面要结合自己的项目中功能来说两个地方 xxx xxx 2、为什么会选择使用RabbitMQ 我们项…

flutter 之proto

和嵌入式用proto协议来通信,以mac来演示 先在电脑上安装protobuf(在博主文章内容里面搜Mac安装protobuf),然后在桌面上放这几个文件,且build_proto_dart.sh文件内容如图所示 #!/bin/bashSCRIPT$(readlink -f "$0…

【数据结构】C语言实现双链表的基本操作

双链表及其基本操作的实现 导言一、单链表与双链表二、双链表类型的创建三、双链表的初始化四、双链表的创建五、双链表的遍历六、双链表的查找七、双链表的插入八、双链表的删除结语 导言 大家好,很高兴又和大家见面啦!!! 经过…

Spire.Office for Java 8.12.0

Spire.Office for Java 8.12.0 发布。在该版本中,Spire.XLS for Java支持检索使用WPS工具添加的嵌入图像;Spire.PDF for Java 增强了从 PDF 到 SVG、PDF/A1B 和 PDF/A2A 的转换。此外,该版本还修复了许多已知问题。下面列出了更多详细信息。 …

算法基础day1

归并排序模版 #include <iostream> using namespace std; int n; const int N 1e610; int q[N],tmp[N]; void merge_sort(int l,int r,int q[]){if(l>r) return;int mid lr>>1;merge_sort(l,mid,q);merge_sort(mid1,r,q);//归并的的过程int k0,il,jmid1;while(…

蔓灵花组织wmRAT攻击武器对比分析

概述 蔓灵花&#xff0c;又名"Bitter"、"APT-C-08"、"T-APT-17"以及"苦象"&#xff0c;常对南亚周边及孟加拉湾海域的相关国家发起网络攻击&#xff0c;主要针对巴基斯坦和中国两国。其攻击目标主要包括政府部门、核工业、能源、国防…

openGauss学习笔记-178 openGauss 数据库运维-逻辑复制-逻辑解码-使用SQL函数接口进行逻辑解码

文章目录 openGauss学习笔记-178 openGauss 数据库运维-逻辑复制-逻辑解码-使用SQL函数接口进行逻辑解码178.1 前提条件178.2 操作步骤 openGauss学习笔记-178 openGauss 数据库运维-逻辑复制-逻辑解码-使用SQL函数接口进行逻辑解码 openGauss可以通过调用SQL函数&#xff0c;…

GLTF编辑器-位移贴图实现破碎的路面

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 位移贴图是一种可以用于增加模型细节和形状的贴图。它能够在渲染时针…

PCL 空间直角坐标转大地坐标(直接求解法C++详细过程版)

目录 一、算法原理二、代码实现三、结果展示四、测试数据本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 二、代码实现 由于此类坐标系的转换涉及到大坐标,PCL的float类型数据结构,无法保证数据精度,用…

彭涛:2023年终复盘,工作,团队,个人!

眨眼2023即将结束&#xff0c;2024即将开启&#xff0c;每年这个时候&#xff0c;都会简单总结下自己这一年&#xff0c;既是对今年的一个复盘和回顾&#xff0c;也是对新一年的向往和期待。 我的2023年&#xff0c;大概分为 「个人」&#xff0c;「家庭」&#xff0c;「团队」…

Qt篇——QwtPainter::drawPie绘制扇形

QwtPainter::drawPie(QPainter *painter, const QRectF &rect, int startAngle, int angle); 一、参数含义&#xff1a; painter&#xff1a; 重绘函数中的painter对象 rect&#xff1a; 要绘制扇形的圆的外切矩形。 startAngle: 要绘制的扇形的起始角 …

【Unity地形】使用地形工具创建场景环境-Terrain

如上图Unity的地形工具可以让我们实现创建复杂、丰富的3D室外环境。 我们创建地形很简单&#xff0c;在层级面板中右键-3Dobject-Terrain 就可以创建一个默认的地形模型&#xff01;这个模型是Unity内置的。 接下来的地形编辑功能全部集中在这个地形的组件上 主要功能如下&…

万物简单AIoT物联网平台快速开始

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; 万物简单AIoT物联网提供一站式的AI物联网的学习平台&#xff0c;以及物联网SaaS私有化部署的解决方案。从终端硬件系统、云平台到APP前端的物联网能力&#xff0c;助力企业和开发者的设备具备1分钟快速上云的…

Matplotlib找不到Times New Roman的解决方案

问题背景 在使用seaborn或者matplotlib进行论文画图的时候&#xff0c;一般都会用Times New Roman这个字体&#xff0c;但是在Linux系统里&#xff0c;经常会遇到以下的问题: findfont: Font family [Times New Roman] not found. Falling back to DejaVu Sans. 也就是说找不…

实战14 权限处理

目录 1、权限处理后端接口 1.1 SpringSecurityConfig 1.2 在控制器中加入权限控制 2、前端页面按钮权限判断 2.1 保存权限字段 2.2 编写按钮权限判断 2.3 引入按钮权限判断脚本 2.4 按钮权限判断脚本使用 3、token过期处理 3.1 编写Store代码 3.2 编写刷新token新代码…

算法设计与分析实验报告-贪心算法

校课程的简单实验报告。 算法设计与分析实验报告-递归与分治策略 算法设计与分析实验报告-动态规划算法 算法设计与分析实验报告-贪心算法 dijkstra迪杰斯特拉算法&#xff08;邻接表法&#xff09; 算法设计与分析实验报告-回溯法 算法设计与分析实验报告-分支限界法 …

基于Java车间工时管理系统(源码+部署文档)

博主介绍&#xff1a; ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅 &#x1f447;&#x1f3fb; 不然下次找不到 Java项目精品实…

web等保评测需要实机查看的操作系统、服务器、数据库和应用部分

“等保测评”全称是信息安全等级保护测评。是经公安部认证的具有资质的测评机构&#xff0c;依据国家信息安全等级保护规范规定&#xff0c;受有关单位委托&#xff0c;按照有关管理规范和技术标准&#xff0c;对信息系统安全等级保护状况进行检测评估的活动。 本文陆续将遇到的…

Python教程(18)——python文件操作详解

Python文件操作 Python文件操作基础操作使用with语句管理文件处理文件操作的异常处理文件路径 文本格式和二进制格式文本格式 (Text Mode)二进制格式 (Binary Mode)例子说明 文件操作的相关函数 所谓的文件操作是指对计算机中的文件进行读取、写入、修改和删除等操作。简单来说…