自动化测试po模式是什么?自动化测试po分层如何实现?-附详细源码[通俗易懂]

自动化测试po模式是什么?自动化测试po分层如何实现?-附详细源码[通俗易懂]一、什么是PO模式全称:pageobjectmodel简称POMPO模式最核心的思想是分层,实现松耦合!实现脚本重复使用,实现脚本易维护性!主要分三层:1.基础层BasePage:封装一些最基础的selenium的原生的api方法,元素定位,框架跳转等。2.PO层:元素定位、获得元素对象,页面动作3.测试用例层:业务逻辑,数据驱动!三者的关系:PO层继承继承层,测试用例层调用PO层!二、非PO模式和PO模式优缺点对比笔者来自公众号:软测之家 非PO模式 PO模式.

大家好,又见面了,我是你们的朋友全栈君。

目录:导读

一、什么是PO模式

二、什么是自动化测试框架

三、非PO模式和PO模式优缺点对比

四、如何从0到1搭建PO模型

五、自动化测试框架和PO的关系

六、总结


一、什么是PO模式

全称:page object model  简称:POM/PO

PO模式最核心的思想是分层,实现松耦合!实现脚本重复使用,实现脚本易维护性!

自动化测试po模式是什么?自动化测试po分层如何实现?-附详细源码[通俗易懂]

主要分三层:

1.基础层BasePage:封装一些最基础的selenium的原生的api方法,元素定位,框架跳转等。

2.PO层:元素定位、获得元素对象,页面动作

3.测试用例层:业务逻辑,数据驱动!

三者的关系:PO层继承继承层,测试用例层调用PO层!

二、什么是自动化测试框架

自动化测试po模式是什么?自动化测试po分层如何实现?-附详细源码[通俗易懂]

说到自动化框架,我相信很多人应该都听过这个词,但是不知其到底是个什么东西,为什么要用自动化框架。有很多人堆自动化框架都是懵懵懂懂,就跟谈恋爱一样,朦胧美!

一个好的自动化测试框架是可以让不那么懂技术的人也可以写自动化测试脚本的,

一个好的自动化测试框架可以减少自动化测试中脚本管理和维护当中的人力物力和财力。

其实自动化框架的一个最大的意义在于可重用性。因为在框架里,你可以实现很多的通用功能来简化整个脚本的开发过程。并且生成美观的测试报告。

三、非PO模式和PO模式优缺点对比

自动化测试po模式是什么?自动化测试po分层如何实现?-附详细源码[通俗易懂]

笔者来自公众号:软测之家     更多技术干货,视频资料请加:软件测试技术群:695458161
非PO模式 PO模式
面向过程的线性脚本 POM把页面元素定位和业务操作流程分开。实现松耦合。
复用性差 UI元素的改变不需要修改业务逻辑代码。只需要找到对应的PO页修改定位即可,数据代码分离
维护性差 PO能使我们的测试代码提高代码的可读性,高复用性,可维护性。

四、如何从0到1搭建PO模型

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

六、总结

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

如果你对此文有任何疑问,如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣欢迎加入:

软件测试技术群:695458161,群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。

作者:来自公众号:软测之家
出处:https://blog.csdn.net/pengjiangchun/article/details/106083729
原创不易,欢迎转载,但未经作者同意请保留此段声明,并在文章页面明显位置给出原文链接。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/140775.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • windows Netstat命令详解

    windows Netstat命令详解Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。如果你的计算机有时候接收到的数据报导致出错数据或故障,你不必感到奇怪,TCP/IP可以容许这些类型的错误,并能够自动重发数据报。但如果累计的出错情况数目占到所接收的IP数据报相当大的百分比,或者它的数目正迅速增加,那么你就应该使用…

    2022年5月29日
  • django drf_golang源码分析

    django drf_golang源码分析序列化与反序列化一般后端数据返回给前端的数据格式都是json格式,简单易懂,但是我们使用的语言本身并不是json格式,像我们使用的Python如果直接返回给前端,前端用的javascript语言是识

    2022年7月30日
  • java中什么是引用[通俗易懂]

    如果一个变量的类型是类类型,而非基本类型,那么该变量又叫做引用。从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由高到低依次为:强引用、软引用、弱引用和虚引用。

    2022年1月17日
  • jvm常量池和字符串常量池_常量池中的字符串是对象吗

    jvm常量池和字符串常量池_常量池中的字符串是对象吗JVM——字符串常量池详解引言在Java开发中不管是前后端交互的JSON串,还是数据库中的数据存储,我们常常需要使用到String类型的字符串。作为最常用也是最基础的引用数据类型,JVM为String提供了字符串常量池来提高性能,本篇文章我们一起从底层JVM中认识并学习字符串常量池的概念和设计原理。字符串常量池由来在日常开发过程中,字符串的创建是比较频繁的,而字符串的分配和其他对象的分配是类似的,需要耗费大量的时间和空间,从而影响程序的运行性能,所以作为最基础最常用的引用数据类型,Java设计者在

    2022年7月28日
  • 异或满足结合律吗_异或1⊕0的结果是

    异或满足结合律吗_异或1⊕0的结果是给定一个非负整数序列 a,初始长度为 N。有 M 个操作,有以下两种操作类型:A x:添加操作,表示在序列末尾添加一个数 x,序列的长度 N 增大 1。Q l r x:询问操作,你需要找到一个位置 p,满足 l≤p≤r,使得:a[p] xor a[p+1] xor … xor a[N] xor x 最大,输出这个最大值。输入格式第一行包含两个整数 N,M,含义如问题描述所示。第二行包含 N 个非负整数,表示初始的序列 A。接下来 M 行,每行描述一个操作,格式如题面所述。输出格式每个询问操

    2022年8月9日
  • contextConfigLocation 配置

    contextConfigLocation 配置web.xml通过contextConfigLocation配置spring的方式SSI框架配置文件路径问题:struts2的1个+N个路径:src+src(可配置)名称:struts.xml+Nspring的1个路径:src名称:applicationContex…

    2022年6月15日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号