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

news2025/1/16 21:54:14

目录

一、什么是PO模式

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

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

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

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

六、总结


一、什么是PO模式

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

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

主要分三层:

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

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

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

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

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

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==编辑

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

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

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

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

三、非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博客当中基本都有涉猎,大家需要什么就去搜索什么吧!

六、总结

如果有疑问可以观看下面视频

【整整200集】超超超详细的Python接口自动化测试进阶教程合集,真实模拟企业项目实战

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[BJDCTF2020]ZJCTF,不过如此 preg_replace /e模式漏洞

目录 preg_replace的/e模式 为什么要变为 {${phpinfo()}} 另一个方法 版本 <?phperror_reporting(0); $text $_GET["text"]; $file $_GET["file"]; if(isset($text)&&(file_get_contents($text,r)"I have a dream")){echo &qu…

蓝桥杯备赛Day8——队列

大家好,我是牛哥带你学代码,本专栏详细介绍了蓝桥杯备赛的指南,特别适合迎战python组的小白选手。专栏以天作为单位,定期更新,将会一直更新,直到所有数据结构相关知识及高阶用法全部囊括,欢迎大家订阅本专栏! 队列也属于基础数据结构。 队列概念 队列是一种数据结构,…

谷粒学院笔记

p37 vscode安装插件 p51 前端技术 vue生命周期 前端debug p57 nodejs介绍 下载后安装 cmd node -v node 01.js 类似java运行class文件 nodejs作为服务器(了解)

树的引进以及二叉树的基础讲解——【数据结构】

W...Y的主页 &#x1f60a; 代码仓库分享 &#x1f495; 当我们学习完前面的数据结构&#xff0c;难度也就会上升&#xff0c;但是这个也是非常重要的数据结构。今天我们来学习一种新的数据类型——树。 目录 树的概念以及结构 树的概念 树的相关概念 树的表示 树在实…

【项目管理】PM vs PMO 18点区别

导读&#xff1a;项目经理跟PMO主要有哪些区别&#xff1f;首先从定义上了解&#xff0c;然后根据其他维度进行对比分析&#xff0c;基本可以了解这二者的区别&#xff0c;文中罗列18点区别供各位参考。 目录 1、定义 1.1 PMO 1.2 PM 2、两者区别 2.1 ROI 2.2 项目成功率…

Apache HTTPD (CVE-2017-15715)换行解析漏洞复现

Apache HTTPD 换行解析漏洞 CVE-2017-15715漏洞简介 组件版本漏洞名称 Apache HTTPD 换行解析漏洞&#xff08;CVE-2017-15715&#xff09; 漏洞描述 ​ Apache HTTPD是一款HTTP服务器&#xff0c;它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞&…

微信小程序本地生活(列表页面)

一、实现效果 二、实现步骤 主要实现功能&#xff1a; 页面导航并传参上拉触底时加载下一页数据下拉刷新列表数据 实现步骤 创建列表页面动态设置页面标题定义数据&#xff0c;发起请求获取数据渲染数据并美化样式实现上拉加载数据效果对上拉触底进行节流处理上拉触底请求数…

SSMP整合综合案例【SpringBoot的基本增删改查】

一、基本页面 主页面 添加 删除 分页 条件查询 实体类开发————使用Lombok快速制作实体类 Dao开发————整合MyBatisPlus&#xff0c;制作数据层测试 Service开发————基于MyBatisPlus进行增量开发&#xff0c;制作业务层测试类 Controller开发————基于Restful…

【计算机网络】什么是WebSocket?

目录 WebSocket简介协议优点使用场景 WebSocket WebSocket是一种网络传输协议,可在单个TCP连接上进行全双工通信&#xff0c;位于OSI模型的应用层。 WebSocket使得客户端和服务器之间的数据交换变得更加简单&#xff0c;允许服务器主动向客户端推送数据。在WebSocket API中&a…

第7篇 vue的模块化与babel的转换

一 babel的转换 1.1 babel的转换 Babel是一个广泛使用的转码器&#xff0c;可以将ES6代码转为ES5代码&#xff0c;从而在现有环境执行执行。 可以现在就用 ES6 编写程序&#xff0c;而不用担心现有环境是否支持。 1.2 案例 1.新建工程&#xff0c;初始化&#xff1a; npm …

【数字人】使用Mixamo动画资源

使用Mixamo动画资源 一、获取资源和数据处理1. 获取资源2. 模型选择3. 绑定骨骼4. 动画检索5. 动画参数二、面向不同平台的处理1. 面向Unity平台的使用2. 面向UE平台的使用Mixamo是一个提供动画资源的在线平台,在游戏、虚拟现实、动画等项目添加高质量的人物动画方面实现降本增…

java面试题(17):链表两数相加

两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都不会以 0 开头…

Unity Asset Bundle Browser 工具

Unity Asset Bundle Browser 工具 您可以在 Unity 项目中使用 Asset Bundle Browser 工具能够查看和编辑资源包的配置。 有关更多信息&#xff0c;请参阅 Unity Asset Bundle Browser 文档。 注意&#xff1a;此工具是不受支持的实用程序。查看极大的资源包可能会导致性能下…

Linux内存管理--smaps内存

一、内存的两个概念 了解smaps内存之前要先搞清楚Linux内存管理中的虚拟内存&#xff08;Virtual Memory&#xff09;和驻留内存&#xff08;Resident Memory&#xff09;两个概念。 1、虚拟内存 首先需要强调的是虚拟内存不同于物理内存&#xff0c;虽然两者都包含内存字眼…

数电课程设计——课设一:加减计数器

为了帮助大家更好学习FPGA硬件语言&#xff0c;创立此资源 包含文件有&#xff1a;实验报告、仿真文件&#xff0c;资料很全&#xff0c;有问题可以私信 一、实验内容 1、利用QuartusII和Modelsim实现100进制可逆计数器编码显示实验。 二、实验步骤 &#xff08;1&#xff…

GCP Architect之VPN+Network

VPN 搜索结果共计:11 [单选]As part of implementing their disaster recovery plan, your company is trying to replicate their production MySQL database from their private data center to their GCP project using a Google Cloud VPN connection. They are experien…

compressor/limiter/expander/noisegate相关总结

一&#xff0c;简介 在学习音频数字信号处理的DRC&#xff08;Dynamic Range Control&#xff09;时&#xff0c;遇到几个概念&#xff0c;分别是compressor/limiter/expander/noisegate&#xff0c;本篇文章谈一谈我对这些模块的理解。 二&#xff0c;Compressor&#xff08…

线性代数的本质(二)

文章目录 线性变换与矩阵线性变换与二阶方阵常见的线性变换复合变换与矩阵乘法矩阵的定义列空间与基矩阵的秩逆变换与逆矩阵 线性变换与矩阵 线性变换与二阶方阵 本节从二维平面出发学习线性代数。通常选用平面坐标系 O x y Oxy Oxy &#xff0c;基向量为 i , j \mathbf i,…

MySQL高级篇_16_MVCC多版本并发控制_尚硅谷_宋红康

MySQL高级篇_MVCC多版本并发控制 1. 什么是MVCC&#xff08;多版本并发控制&#xff09;2. 快照读与当前读2.1 快照读2.2 当前读 3. 复习3.1 再谈隔离级别3.2 隐藏字段、Undo Log版本链 4. MVCC实现原理之ReadView4.1 什么是ReadView4.2 设计思路4.3 ReadView的规则4.4 MVCC整体…

自动驾驶多任务框架Hybridnets——同时处理车辆检测、可驾驶区域分割、车道线分割模型部署(C++/Python)

一、多感知任务 在移动机器人的感知系统&#xff0c;包括自动驾驶汽车和无人机&#xff0c;会使用多种传感器来获取关键信息&#xff0c;从而实现对环境的感知和物体检测。这些传感器包括相机、激光雷达、雷达、惯性测量单元&#xff08;IMU&#xff09;、全球导航卫星系统&am…