自動(dòng)化測(cè)試在軟件測(cè)試項(xiàng)目團(tuán)隊(duì)中發(fā)揮著重要的作用,同時(shí)合理地開(kāi)展自動(dòng)化測(cè)試,可以有效降低錯(cuò)誤修復(fù)成本,提高工作效率。
下面就以web自動(dòng)化測(cè)試為例來(lái)說(shuō)明POM模式:python+Selenium+pytest框架下,完成自動(dòng)化測(cè)試用例的編寫(xiě),管理,運(yùn)行和出報(bào)告,似乎是一項(xiàng)非常簡(jiǎn)單的工作過(guò)程,隨在項(xiàng)目進(jìn)展,特別是迭代頻繁的敏捷項(xiàng)目研發(fā)方式下,有些自動(dòng)化測(cè)試人員實(shí)現(xiàn)的那些低質(zhì)量測(cè)試腳本往往會(huì)引發(fā)后期高昂的代碼維護(hù)成本,隨著時(shí)間的推移所謂的自動(dòng)化測(cè)試變得好像忘了初衷了。
POM模式中解決測(cè)試腳本質(zhì)量低下的一種很實(shí)用的方法。下面我來(lái)向大家介紹一下POM分離模式的思維:
pom分離:
POM分離 page- object-module--是一種思維
采用POM目的:為了解決前端中UI變化頻繁,從而造成測(cè)試自動(dòng)化腳本維護(hù)的成本越來(lái)越大
POM思路:把頁(yè)面元素和業(yè)務(wù)邏輯和測(cè)試腳本分離開(kāi)到兩個(gè)不同的類(lèi)文件。class A只寫(xiě)頁(yè)面元素定位,和業(yè)務(wù)邏輯代碼操作的封裝,class B只寫(xiě)測(cè)試腳本,
POM主要有以下優(yōu)點(diǎn):
1.把web ui對(duì)象倉(cāng)庫(kù)從測(cè)試腳本分離,業(yè)務(wù)代碼和測(cè)試腳本分離。
2.每一個(gè)頁(yè)面對(duì)應(yīng)一個(gè)頁(yè)面類(lèi),頁(yè)面的元素寫(xiě)到這個(gè)頁(yè)面類(lèi)中。
3.頁(yè)面類(lèi)主要包括該頁(yè)面的元素定位,和和這些元素相關(guān)的業(yè)務(wù)操作代碼封裝的方法。
4.代碼復(fù)用,從而減少測(cè)試腳本代碼量。
5.層次清晰,同時(shí)支持多個(gè)編寫(xiě)自動(dòng)化腳本開(kāi)發(fā),例如每個(gè)人寫(xiě)哪幾個(gè)頁(yè)面,不影響他人。
6.建議頁(yè)面類(lèi)和業(yè)務(wù)邏輯方法都給一個(gè)有意義的名稱(chēng),方便他人快速編寫(xiě)腳本和維護(hù)腳本。
實(shí)例如下:
1.測(cè)試腳本
2.業(yè)務(wù)邏輯
3.界面元素
4.再次封裝
5.使用最新封裝內(nèi)容
都說(shuō)良好的開(kāi)端是成功的一半,自動(dòng)化測(cè)試框架的落地也是如此,在測(cè)試框架實(shí)現(xiàn)之前,我們需要全方位考濾后才能設(shè)計(jì)出面對(duì)避無(wú)可避的UI元素變更的好的框架。有時(shí)候我們第一個(gè)想到的是如何將那些變更頻率不高的功能模塊實(shí)現(xiàn)自動(dòng)化,而對(duì)那些變更頻率高的功能模塊有什么方式能夠降低我們未來(lái)對(duì)于代碼調(diào)整帶來(lái)的高昂成本呢?要做到“子落而滿(mǎn)盤(pán)活”,而不是“牽一發(fā)而動(dòng)全身”。我們是否能對(duì)變更進(jìn)行限制,只動(dòng)一個(gè)地方,并且讓每個(gè)與之相關(guān)的測(cè)試腳本都能使用它?答案一定是完全一致肯定的-------POM模式可以幫我們實(shí)現(xiàn)。
如果該web頁(yè)面元素發(fā)生了變化,我們只需要在其對(duì)應(yīng)的類(lèi)文件中進(jìn)行修改就可以了,而不必在多個(gè)不同的腳本去搜索查找并一一更新。這種方法就是頁(yè)面對(duì)象模型(POM),它有助于提高代碼的可讀性、可維護(hù)性和可重用性。