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

六、总结

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

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

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

相关推荐
TomEval3 小时前
【测AI】第17篇:大模型评测方法论 —— LLM 怎么测?
人工智能·python·aigc·测试用例
蒲公英内测分发3 小时前
智能手表卖出去后,包装、说明书和官网里的 App 下载入口怎么统一?
前端·人工智能·测试工具·智能家居·智能硬件·智能手表
蒲公英内测分发5 小时前
智能手环出海测试,海外合作方分散在不同国家,Android 测试包怎么持续分发和更新?
android·前端·人工智能·测试工具·智能手表
无语的小歪歪7 小时前
ATF 智测 1.0
python·测试工具·集成测试
SHENGWEI胜为21 小时前
交换机端口显示正常,终端却获取不到 IP 地址?从 DHCP 流程定位故障
服务器·网络·测试工具·缓存·通信工程
TomEval1 天前
【测AI】第16篇:模型公平性与可解释性测试 — AI 的偏见与黑箱
人工智能·python·功能测试·ai·测试用例
xie881018021 天前
长表格跨页重复表头:排版上的做法
测试工具
llilian_161 天前
脉冲时间间隔及计数如何精准测试?
功能测试·嵌入式硬件·51单片机·软件工程
老孟说禅1 天前
测试工具示波器的使用
测试工具
川石课堂软件测试2 天前
涨薪技术|0到1学会性能测试第9课-HTTP响应统计
数据库·功能测试·网络协议·http·kubernetes·单元测试·测试用例