当前位置:网站首页>Building PO layered architecture of automated testing framework from 0
Building PO layered architecture of automated testing framework from 0
2022-08-09 02:37:00 【software testing automation testing】
一、什么是PO模式
全称:page object model 简称:POM/PO
PO模式最核心的思想是分层,实现松耦合!实现脚本重复使用,实现脚本易维护性!

主要分三层:
1.基础层BasePage:封装一些最基础的selenium的原生的api方法,元素定位,框架跳转等.
2.PO层:元素定位、获得元素对象,页面动作
3.测试用例层:业务逻辑,数据驱动!
三者的关系:PO层继承继承层,测试用例层调用PO层!
二、什么是自动化测试框架

说到自动化框架,我相信很多人应该都听过这个词,但是不知其到底是个什么东西,为什么要用自动化框架.There are many people who are ignorant about automation frameworks,就跟谈恋爱一样,朦胧美!
一个好的自动化测试框架是可以让不那么懂技术的人也可以写自动化测试脚本的,
一个好的自动化测试框架可以减少自动化测试中脚本管理和维护当中的人力物力和财力.
其实自动化框架的一个最大的意义在于可重用性.因为在框架里,你可以实现很多的通用功能来简化整个脚本的开发过程.并且生成美观的测试报告.
三、非PO模式和PO模式优缺点对比
| 更多技术干货,Please add video information:test technology group:953306497 | |
| 非PO模式 | PO模式 |
| 面向过程的线性脚本 | POM把页面元素定位和业务操作流程分开.实现松耦合. |
| 复用性差 | UI元素的改变不需要修改业务逻辑代码.只需要找到对应的PO页修改定位即可,数据代码分离 |
| 维护性差 | PO能使我们的测试代码提高代码的可读性,高复用性,可维护性. |
四、如何从0到1搭建PO模型
非PO模式举个栗子:有如下百度搜索脚本:
import unittestfrom selenium import webdriverfrom selenium.webdriver.common.by import Byclass 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 webdriverclass 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 Byfrom base.base_page import BasePageclass 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 eledef 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, datafrom po.baidu_page import BaiduPage@ddtclass 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”)群里的免费资料都是笔者十多年测试生涯的精华.还有同行大神一起交流技术哦.
边栏推荐
- 历史最全DL相关书籍、课程、视频、论文、数据集、会议、框架和工具整理分享
- Force buckled brush problem record 7.1 -- -- -- -- -- 707. The design list
- 边缘计算的三个关键好处
- gpio子系统和pinctrl子系统(下)
- 如何最大限度地减少企业受到供应链攻击的风险
- 继承 Inheritance
- Tricore架构上的调试案例
- MT4 / MQ4L entry to the master of EA tutorial lesson two (2) - - MQL language commonly used function account information commonly used functions
- JS 实现千分位分隔符
- 概率模型校准
猜你喜欢

Duplicate class com.google.common.util.concurrent.ListenableFuture found in modules

OpenLORIS-Object Datasets

Processing Point Clouds

企业从云服务的承诺支出中获得最大收益的四种方法

带你做接口测试从零到第一条用例 总结

最近看到很多人想自学或者报班但是不清楚如何选择,我今天就和大家说说

Programmer's Daily Life | Daily Fun

gpio子系统和pinctrl子系统(中)

最新工业界推荐系统数据集-召回排序模型原理、结构及代码实战整理分享

接口自动化测试-接口封装思想
随机推荐
Processing Point Clouds
【Jenkins 学习笔记】玩转持续集成与持续交付
YOLOV1详解——Pytorch版
金融行业软件测试面试题(含答案)| 入门指南
Maya engine modeling
数字 07 verilog仿真实例
The building had been registry cluster, load balancing
【云计算】XaaS最全介绍(按24字母合集):AaaS、BaaS、CaaS、DaaS、EaaS、FaaS、GaaS、HaaS、IDaaS…
连接数据库且在网页运行的RDLC
2022 China Eye Expo, China Beijing International Children and Adolescent Eye Health Industry Exhibition
<爆>2022中文版-《海外博士申请指南-材料准备、时间线、套磁、面试及录取》免费分享
DataGridView在多线程中出现大红叉
C#计算两个时间相差多少天、时、分、秒
OJ:L2-012 关于堆的判断
Financial Industry Software Testing Interview Questions (with Answers) | Getting Started Guide
使网络安全威胁风险更高和成本更高的五个趋势
ZCMU--5115: Buying Keys(C语言)
Redis系列文章导航
快速乘写法
Postman接口测试【官网】最新版本 安装及使用入门教程