网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
二、什么是自动化测试框架
说到自动化框架,我相信很多人应该都听过这个词,但是不知其到底是个什么东西,为什么要用自动化框架。有很多人堆自动化框架都是懵懵懂懂,就跟谈恋爱一样,朦胧美!
一个好的自动化测试框架是可以让不那么懂技术的人也可以写自动化测试脚本的,
一个好的自动化测试框架可以减少自动化测试中脚本管理和维护当中的人力物力和财力。
其实自动化框架的一个最大的意义在于可重用性。因为在框架里,你可以实现很多的通用功能来简化整个脚本的开发过程。并且生成美观的测试报告。
三、非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的关系
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新*