一、什么是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博客当中基本都有涉猎,大家需要什么就去搜索什么吧!
学习上
作为一个软件测试的过来人,我想尽自己最大的努力,帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源,现在免费分享给大家,有需要的小伙伴可以关注【公众号:开心螺蛳粉】自提!
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群:1150305204,里面有各种测试开发资料和技术可以一起交流哦。