当前位置:网站首页>从0开始搭建自动化测试框架之PO分层架构
从0开始搭建自动化测试框架之PO分层架构
2022-08-09 02:26:00 【软件测试自动化测试】
一、什么是PO模式
全称:page object model 简称:POM/PO
PO模式最核心的思想是分层,实现松耦合!实现脚本重复使用,实现脚本易维护性!
主要分三层:
1.基础层BasePage:封装一些最基础的selenium的原生的api方法,元素定位,框架跳转等。
2.PO层:元素定位、获得元素对象,页面动作
3.测试用例层:业务逻辑,数据驱动!
三者的关系:PO层继承继承层,测试用例层调用PO层!
二、什么是自动化测试框架
说到自动化框架,我相信很多人应该都听过这个词,但是不知其到底是个什么东西,为什么要用自动化框架。有很多人对自动化框架都是懵懵懂懂,就跟谈恋爱一样,朦胧美!
一个好的自动化测试框架是可以让不那么懂技术的人也可以写自动化测试脚本的,
一个好的自动化测试框架可以减少自动化测试中脚本管理和维护当中的人力物力和财力。
其实自动化框架的一个最大的意义在于可重用性。因为在框架里,你可以实现很多的通用功能来简化整个脚本的开发过程。并且生成美观的测试报告。
三、非PO模式和PO模式优缺点对比
更多技术干货,视频资料请加:测试技术群:953306497 | |
非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、测试用例层:业务逻辑和数据驱动
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持续集成
感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接免费拿走:
① 2000多本软件测试电子书(主流和经典的书籍应该都有了)
② 软件测试/自动化测试标准库资料(最全中文版)
③ 项目源码(四五十个有趣且经典的练手项目及源码)
④ Python编程语言、API接口自动化测试、web自动化测试、App自动化测试(适合小白学习)
⑤ Python学习路线图(告别不入流的学习)
上图的资料 在我的QQ技术交流群里(技术交流和资源共享,广告进来腿给你打断)
可以自助拿走,群号953306497(备注“csdn111”)群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。
边栏推荐
- 313. 超级丑数-暴力解法
- 通过安装VNC服务器x11vnc(或vnc4server)和配置x11vnc.service实现远程通过VNC-Viewer访问VNC服务器。
- 数字 05 verilog&vivado2018.2零散笔记
- My thoughts on software development
- ROS2错误:不支持OpenGL 1.5 GLRenderSystem:: ci initialiseContext在C: \ \ ws \构建……
- 使用JS实现数组扁平化的几种方式
- 线段树知识整理
- [LeetCode84双周赛] [模拟] 6174. 任务调度器 II,[贪心&数学] 6144. 将数组排序的最少替换次数
- 2022 China Eye Expo, China Beijing International Children and Adolescent Eye Health Industry Exhibition
- Likou Brush Question Record 5.1-----59. Spiral Matrix II
猜你喜欢
MT4 / MQ4L entry to the master of EA tutorial lesson two (2) - - MQL language commonly used function account information commonly used functions
10.1-----19. Delete the Nth node from the bottom of the linked list
【izpack】使用izpack为你的程序提供安装程序封装
数字 01 Vivado2018.2安装及实操
ApiFile配置环境
Mysql 5.7 into the pit
A40i gxl3680 ts_print报错:tslib: Selected device is not a touchscreen (must support ABS and KEY event
jmeter的websocket插件安装和使用方法
Redis - 时间序列数据类型的保存方案和消息队列实现
电磁辐射安全标准及检测方法
随机推荐
Redis系列文章导航
如何在推荐系统中玩转知识图谱
最新工业界推荐系统数据集-召回排序模型原理、结构及代码实战整理分享
eladmin容器部署超详细过程
Apache站点下载大文件自动中断或者文件不完整
C#计算SHA1加密和base64编码
Likou Brush Question Record 8.1-----206. Reverse linked list
Summary of Database Design
2022 China Eye Expo, China Beijing International Children and Adolescent Eye Health Industry Exhibition
概率模型校准
【云计算】XaaS最全介绍(按24字母合集):AaaS、BaaS、CaaS、DaaS、EaaS、FaaS、GaaS、HaaS、IDaaS…
Likou Brush Question Record--Common Functions
eladmin container deployment super detailed process
Electromagnetic radiation safety standards and detection methods
Flume (四) --------- Flume 企业开发案例
USB 触摸在竖屏时校准
ZCMU--5115: Buying Keys(C语言)
帮助安全红队取得成功的11条建议
Likou Brush Question Record 5.1-----59. Spiral Matrix II
线段树知识整理