从0开始搭建自动化测试框架之PO分层架构

Posted 软件测试自动化测试

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从0开始搭建自动化测试框架之PO分层架构相关的知识,希望对你有一定的参考价值。

一、什么是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 unittestfrom selenium import webdriverfrom 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 Byfrom 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, 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”)群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。

以上是关于从0开始搭建自动化测试框架之PO分层架构的主要内容,如果未能解决你的问题,请参考以下文章

从0到1完成UI自动化测试框架搭建之 UIAutomator2

PO模式你会吗?自动化测试PO模式分层如何实现?

字节7年经验分享,如何从0开始搭建公司自动化测试框架?

web自动化测试的流程?

从0开始搭建Web自动化测试框架

从 0 到 1 带你搭建 Java 并发爬虫框架:爬虫原理和流程