自动化测试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博客当中基本都有涉猎,大家需要什么就去搜索什么吧!

六、总结

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

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

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

相关推荐
ck-joker8 小时前
23个测试全绿,一个Token没花——LLM应用的单元测试该怎么写?
语言模型·单元测试
其实防守也摸鱼9 小时前
蓝队相关知识学习(1)---常用堡垒机和服务器
服务器·功能测试·学习·网络安全·网络攻击模型·攻防对抗·蓝队
测试老哥10 小时前
Pytest自动化测试详解
自动化测试·软件测试·python·测试工具·测试用例·pytest·接口测试
Lucky_55668812 小时前
软件登记测试报告用途与完整办理流程|山东本地第三方测评机构服务
经验分享·功能测试·单元测试
2601_9549165913 小时前
ChatGPT 5.6 深度实践:用 AI 重构云成本治理体系,而不是简单“降本”
人工智能·sql·chatgpt·重构·测试用例
Luminbox紫创测控15 小时前
大面积太阳模拟器设计原理与高均匀度辐照实现方法
人工智能·测试工具·安全性测试·测试标准
m0_7520356316 小时前
postman重新安装后历史接口数据不见了
测试工具·postman
her_heart17 小时前
ChatGPT 5.6 实战:用 AI 做云成本治理,从账单复盘到 K8s 优化
人工智能·云原生·chatgpt·kubernetes·测试用例
程序员小远19 小时前
性能测试之性能调优
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·性能测试
xy34531 天前
Wireshark捕获过滤器——语法元素详解
网络·测试工具·渗透测试·wireshark