灵魂讲师分享的:po是什么?自动化测试po分层如何实现?-带po详细源代码
目錄:導讀
一、什么是PO模式
二、什么是自動化測試框架
三、非PO模式和PO模式優缺點對比
四、如何從0到1搭建PO模型
五、自動化測試框架和PO的關系
六、總結
一、什么是PO模式
全稱:page object model ?簡稱:POM/PO
PO模式最核心的思想是分層,實現松耦合!實現腳本重復使用,實現腳本易維護性!
主要分三層:
1.基礎層BasePage:封裝一些最基礎的selenium的原生的api方法,元素定位,框架跳轉等。
2.PO層:元素定位、獲得元素對象,頁面動作
3.測試用例層:業務邏輯,數據驅動!
三者的關系:PO層繼承繼承層,測試用例層調用PO層!
二、什么是自動化測試框架
說到自動化框架,我相信很多人應該都聽過這個詞,但是不知其到底是個什么東西,為什么要用自動化框架。有很多人堆自動化框架都是懵懵懂懂,就跟談戀愛一樣,朦朧美!
一個好的自動化測試框架是可以讓不那么懂技術的人也可以寫自動化測試腳本的,
一個好的自動化測試框架可以減少自動化測試中腳本管理和維護當中的人力物力和財力。
其實自動化框架的一個最大的意義在于可重用性。因為在框架里,你可以實現很多的通用功能來簡化整個腳本的開發過程。并且生成美觀的測試報告。
三、非PO模式和PO模式優缺點對比
| 筆者來自公眾號:軟測之家 ? ? 更多技術干貨,視頻資料請加:軟件測試技術群:695458161 | |
| 非PO模式 | PO模式 |
| 面向過程的線性腳本 | POM把頁面元素定位和業務操作流程分開。實現松耦合。 |
| 復用性差 | UI元素的改變不需要修改業務邏輯代碼。只需要找到對應的PO頁修改定位即可,數據代碼分離 |
| 維護性差 | PO能使我們的測試代碼提高代碼的可讀性,高復用性,可維護性。 |
四、如何從0到1搭建PO模型
非PO模式舉個栗子:有如下百度搜索腳本:
import unittest from selenium import webdriver from 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 ele2、PO層:封裝百度頁面元素定位,元素對象以及頁面操作
from selenium.webdriver.common.by import By from 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、測試用例層:業務邏輯和數據驅動
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+各種封裝(日志處理封裝,全局配置文件的封裝,數據庫連接的封裝,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博客當中基本都有涉獵,大家需要什么就去搜索什么吧!
六、總結
全文筆者耗時兩小時,純手打,純干貨,如果您覺得對您有幫助,請點贊,收藏,分享三連!您的支持是筆者最大的動力!
如果你對此文有任何疑問,如果你覺得此文對你有幫助,如果你對軟件測試、接口測試、自動化測試、面試經驗交流感興趣歡迎加入
筆者:來自公眾號:軟測之家
出處:https://blog.csdn.net/weixin_48500307
原創不易,歡迎轉載,但未經作者同意請保留此段聲明,并在文章頁面明顯位置給出原文鏈接。
總結
以上是生活随笔為你收集整理的灵魂讲师分享的:po是什么?自动化测试po分层如何实现?-带po详细源代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鱼眼相机外参的计算
- 下一篇: 如何解决HEVC编码格式不能播放的问题?