浙江省住房建設(shè)廳繼續(xù)教育網(wǎng)站財(cái)經(jīng)新聞每日財(cái)經(jīng)報(bào)道
目錄:導(dǎo)讀
- 前言
- 一、Python編程入門(mén)到精通
- 二、接口自動(dòng)化項(xiàng)目實(shí)戰(zhàn)
- 三、Web自動(dòng)化項(xiàng)目實(shí)戰(zhàn)
- 四、App自動(dòng)化項(xiàng)目實(shí)戰(zhàn)
- 五、一線(xiàn)大廠簡(jiǎn)歷
- 六、測(cè)試開(kāi)發(fā)DevOps體系
- 七、常用自動(dòng)化測(cè)試工具
- 八、JMeter性能測(cè)試
- 九、總結(jié)(尾部小驚喜)
前言
POM設(shè)計(jì)模式
主要是將每一個(gè)頁(yè)面設(shè)計(jì)為一個(gè)Class,其中包含頁(yè)面中需要測(cè)試的元素(按鈕,輸入框,標(biāo)題 等),這樣在Selenium測(cè)試頁(yè)面中可以通過(guò)調(diào)用頁(yè)面類(lèi)來(lái)獲取頁(yè)面元素,這樣巧妙的避免了當(dāng)頁(yè)面元素id或者位置變化時(shí),需要改測(cè)試頁(yè)面代碼的情況。
web自動(dòng)化測(cè)試:https://www.bilibili.com/video/BV1MS4y1W79K/
當(dāng)頁(yè)面元素id變化時(shí),只需要更改測(cè)試頁(yè)Class中頁(yè)面的屬性即可。 簡(jiǎn)單來(lái)講,就是將代碼以頁(yè)面為單位進(jìn)行組織,針對(duì)這個(gè)頁(yè)面上的所有信息,相關(guān)操作都放到一個(gè)類(lèi)中;從而使具體的測(cè)試用例變成了簡(jiǎn)單的調(diào)用和驗(yàn)證操作。
POM的優(yōu)點(diǎn)
1、PO提供了頁(yè)面元素操作和業(yè)務(wù)流程相分離的模式,可以使測(cè)試的代碼結(jié)構(gòu)比之前清晰,可讀性強(qiáng)。
2、更方便地復(fù)用對(duì)象和方法。
3、對(duì)象庫(kù)是獨(dú)立于測(cè)試用例的、統(tǒng)一的對(duì)象庫(kù),可以通過(guò)集成不同的工具類(lèi)來(lái)達(dá)到不同的測(cè)試目的。比如集成pytest可以用來(lái)做單元測(cè)試、自動(dòng)化/功能測(cè)試,同時(shí)也可以集成JBehave/Cucumber等來(lái)做驗(yàn)收測(cè)試。
4、使得整體自動(dòng)化測(cè)試的優(yōu)點(diǎn)變得更容易一些,如果有某個(gè)頁(yè)面的元素需要變更,那么就可以直接更改封裝好的頁(yè)面元素類(lèi)即可,而不用更改調(diào)用它的其他測(cè)試類(lèi)/代碼。這樣整個(gè)的代碼維護(hù)成本也會(huì)縮減。
PO的核心就是分層思想,把同屬于一個(gè)頁(yè)面的元素都放在一個(gè)頁(yè)面類(lèi)中。
POM結(jié)構(gòu)設(shè)計(jì)
邏輯代碼:基類(lèi),實(shí)現(xiàn)所有工具函數(shù)封裝,類(lèi)似于關(guān)鍵字驅(qū)動(dòng)設(shè)計(jì)模式;
頁(yè)面對(duì)象代碼:基于系統(tǒng)頁(yè)面,通過(guò)調(diào)用工具函數(shù)來(lái)實(shí)現(xiàn)業(yè)務(wù)的操作,生成對(duì)應(yīng)的頁(yè)面對(duì)象;
測(cè)試代碼:基于測(cè)試需要,組件頁(yè)面對(duì)象,實(shí)現(xiàn)核心流程的自動(dòng)化,執(zhí)行測(cè)試用例;
測(cè)試數(shù)據(jù):為測(cè)試用例的執(zhí)行提供所需要的測(cè)試數(shù)據(jù)。
PO模式主要分三層
基礎(chǔ)層BasePage:封裝一些最基礎(chǔ)的方法,元素定位,框架跳轉(zhuǎn)等
PO層:元素定位、獲得元素對(duì)象,頁(yè)面動(dòng)作
測(cè)試用例層:業(yè)務(wù)邏輯,數(shù)據(jù)驅(qū)動(dòng)
三者的關(guān)系:PO層繼承繼承層,測(cè)試用例層調(diào)用PO層。
頁(yè)面對(duì)象模型(PO)是一種設(shè)計(jì)模式,用來(lái)管理維護(hù)一組頁(yè)面元素的對(duì)象庫(kù);
在PO下,應(yīng)用程序的每一個(gè)頁(yè)面都有一個(gè)對(duì)應(yīng)的Page類(lèi);
每一個(gè)Page類(lèi)維護(hù)著該頁(yè)面的元素集和操作這些元素的方法;
基本原則
每個(gè)頁(yè)面都是一個(gè)類(lèi)
所有的定位封裝類(lèi)的屬性
操作行為封裝成類(lèi)的方法
相同的行為不同的結(jié)果創(chuàng)建為不同的方法
定位屬性不要暴露給外部
不要在方法內(nèi)進(jìn)行斷言
搭建POM模型框架
以微信登錄為例子
微信登錄PO模式,先來(lái)做下分析:
封裝頁(yè)面,如:登錄頁(yè)面可以設(shè)計(jì)成LoginPage類(lèi)
封裝方法,如:登錄頁(yè)面的登錄方法是login(username,password)
外部文件維護(hù)數(shù),如:定位用戶(hù)名和密碼框的表達(dá)方法不寫(xiě)在代碼里,放在外部文件中
頁(yè)面元素屬性化,如:只要涉及到要操作的元素名稱(chēng),具體定位方式不在代碼中,元素定位做到可以配置化,配置以鍵值對(duì)的形式存在。
根據(jù)前面的知識(shí),舉個(gè)登錄的例子
梳理一遍登錄流程
要進(jìn)行一次成功的登錄,需要做哪些事情?
要進(jìn)入登錄頁(yè)面,需要經(jīng)過(guò)哪些頁(yè)面?
要能夠完成登錄操作,需要操作哪些元素?
要完成這些元素的操作,又需要哪些操作?
經(jīng)過(guò)分析:
要進(jìn)行一次成功的登錄:需要進(jìn)入首頁(yè),然后點(diǎn)擊登錄按鈕,再在登錄頁(yè)面輸入正確的用戶(hù)名和密碼,最后點(diǎn)擊登錄按鈕
要進(jìn)入登錄頁(yè)面:成功進(jìn)入首頁(yè),然后點(diǎn)擊登錄按鈕
要能夠完成登錄操作:需要用戶(hù)名和密碼輸入框、登錄按鈕
要完成這些元素操作:需要senk_key()、click()的方法
接下來(lái)可以記錄下,完成登錄的操作,一共經(jīng)過(guò)兩個(gè)頁(yè)面:首頁(yè)和登錄頁(yè),當(dāng)然為了簡(jiǎn)化起見(jiàn),可以直接從登陸頁(yè)開(kāi)始。這里就確定了PO設(shè)計(jì)中的頁(yè)面設(shè)計(jì)。
再根據(jù)前面PO模型的結(jié)構(gòu):可以把整個(gè)腳本再拆開(kāi),建立幾個(gè)包:page、testcase等等。
完整的POM完整框架
Base層:定義項(xiàng)目需要的基礎(chǔ)方法,特別是一些基礎(chǔ)操作,如元素click操作、sendkeys操作,調(diào)用JavaScript腳本的方法和其他一些與基本瀏覽器相關(guān)的操作。
Common層:包含處理Excel文件的方法,獲取項(xiàng)目路徑、測(cè)試系統(tǒng)URL的信息和框架執(zhí)行相關(guān)日志功能的實(shí)現(xiàn)方法。
Data層:存放測(cè)試數(shù)據(jù),在這里可以維護(hù)測(cè)試數(shù)據(jù),這樣存放是為了讓項(xiàng)目的可維護(hù)性強(qiáng)、整體的條理性強(qiáng)。測(cè)試數(shù)據(jù)有時(shí)是自動(dòng)化測(cè)試的驅(qū)動(dòng)因素,因此對(duì)Data的管理和維護(hù)就顯的特別重要。
Logs層:存放項(xiàng)目在運(yùn)行過(guò)程中產(chǎn)生的日志文件。
PageObject層:這里是PO的核心層,該層不但涉及代碼技術(shù),還涉及對(duì)項(xiàng)目業(yè)務(wù)的分析,進(jìn)而對(duì)項(xiàng)目的頁(yè)面進(jìn)行分析。
Reports層:存放項(xiàng)目執(zhí)行過(guò)程中產(chǎn)生的測(cè)試報(bào)告文件,測(cè)試報(bào)告是對(duì)測(cè)試結(jié)果的總結(jié)。
TestCase層:管理測(cè)試用例和執(zhí)行測(cè)試,相當(dāng)于測(cè)試的總?cè)肟凇?/p>
config.ini:整個(gè)項(xiàng)目需要用到的配置項(xiàng)。
下面是我整理的2023年最全的軟件測(cè)試工程師學(xué)習(xí)知識(shí)架構(gòu)體系圖 |
一、Python編程入門(mén)到精通
二、接口自動(dòng)化項(xiàng)目實(shí)戰(zhàn)
三、Web自動(dòng)化項(xiàng)目實(shí)戰(zhàn)
四、App自動(dòng)化項(xiàng)目實(shí)戰(zhàn)
五、一線(xiàn)大廠簡(jiǎn)歷
六、測(cè)試開(kāi)發(fā)DevOps體系
七、常用自動(dòng)化測(cè)試工具
八、JMeter性能測(cè)試
九、總結(jié)(尾部小驚喜)
生命力的意義在于拼搏,因?yàn)槭澜绫旧砭褪且粋€(gè)競(jìng)技場(chǎng),就是無(wú)數(shù)次被礁石擊碎又無(wú)數(shù)閃地?fù)湎蚪甘?#xff0c;生命的綠蔭才會(huì)越長(zhǎng)越茂盛。
我們?cè)谖覀兊膭趧?dòng)過(guò)程中學(xué)習(xí)思考,勞動(dòng)的結(jié)果,我們認(rèn)識(shí)了世界的奧妙,于是我們就真正來(lái)改變生活了。
能不能成功,關(guān)鍵在于我們是直面困難、解決困難,還是回避困難、在困難面前放棄。如果你不端正自己的態(tài)度,那么你永遠(yuǎn)都做不好事情。