? ? ? ? 前一段時(shí)間用RobotFramework+Appium實(shí)現(xiàn)了安卓的UI自動(dòng)化姥卢,2個(gè)人+1個(gè)月摔蓝,大概寫(xiě)了300多條的用例,需要大約4小時(shí)全部執(zhí)行完成盏触,用于版本上線前的回歸測(cè)試渗蟹;由于各種各樣的原因,每次執(zhí)行時(shí)赞辩,用例都不能全部正確通過(guò)雌芽,執(zhí)行速度慢,穩(wěn)定性差辨嗽,受環(huán)境影響較大世落,維護(hù)成本高,UI自動(dòng)化的缺點(diǎn)很多糟需,但是也是學(xué)習(xí)成果屉佳。
? ? ? ? 自動(dòng)化講究思想:分層思想。由于所有的測(cè)試用例都需要優(yōu)先登錄系統(tǒng)洲押,所以在做安卓UI自動(dòng)化時(shí)武花,我們將系統(tǒng)登錄和退出放在了RF的setup()和teardown()中,其他用例分為2層(測(cè)試頁(yè)面元素和方法+用戶邏輯)
? ? ? ? 最近在學(xué)習(xí)selenium的web測(cè)試杈帐,同樣所有的測(cè)試用例都需要先登錄系統(tǒng)体箕,因此將登錄和退出系統(tǒng)操作放在setUp和teardown中,如圖挑童,創(chuàng)建一個(gè)MyUnittest類(lèi)累铅,繼承unittest.TestCase,有4個(gè)方法:
(1)setUp():每個(gè)測(cè)試方法運(yùn)行前運(yùn)行炮沐,測(cè)試前的初始化工作争群。一條用例執(zhí)行一次,若N次用例就執(zhí)行N次大年,根據(jù)用例的數(shù)量來(lái)定。
(2)setUpClass():每個(gè)class文件運(yùn)行前運(yùn)行玉雾,必須使用@classmethod裝飾器進(jìn)行修飾翔试。
(3)tearDown():每個(gè)測(cè)試方法運(yùn)行結(jié)束后運(yùn)行,測(cè)試后的清理工作复旬。一條用例執(zhí)行一次垦缅,若N次用例就執(zhí)行N次。
(4)tearDownClass():每個(gè)class文件運(yùn)行結(jié)束后運(yùn)行驹碍,必須使用@classmethod裝飾器進(jìn)行修飾壁涎。
在每個(gè)測(cè)試的class執(zhí)行之前凡恍,執(zhí)行setUpClass()用于打開(kāi)瀏覽器和瀏覽器最大化;
在class中的每個(gè)測(cè)試方法執(zhí)行之前怔球,執(zhí)行setUp()用于輸入url嚼酝;
在class中的每個(gè)測(cè)試方法執(zhí)行結(jié)束之后,執(zhí)行tearDown()用于刷新瀏覽器竟坛;
在每個(gè)測(cè)試的class執(zhí)行結(jié)束之后闽巩,執(zhí)行tearDownClass()用于退出瀏覽器。
? ? ? ? 接著將公共處理的事情寫(xiě)在BasePage里面担汤,用于所有頁(yè)面對(duì)象的繼承涎跨,可以寫(xiě)的公共方法很多,大家按需要寫(xiě)崭歧。
然后隅很,具體的每一個(gè)需要測(cè)試的頁(yè)面需要繼承BasePage,具體的頁(yè)面屬性和操作在這一層定義率碾,如若出現(xiàn)UI的更改叔营,只需要修改這一層的對(duì)象即可。
最后是測(cè)試用例播掷,測(cè)試用例繼承MyUnittest审编,執(zhí)行順序如上述所述,每個(gè)class中可以是相同的業(yè)務(wù)測(cè)試用例歧匈,如下是對(duì)登錄頁(yè)面的測(cè)試:
這樣一個(gè)簡(jiǎn)單的UI框架的完成了垒酬。如果需要測(cè)試具體的業(yè)務(wù)操作,例如登錄系統(tǒng)之后件炉,對(duì)某個(gè)頁(yè)面進(jìn)行查詢的測(cè)試勘究,具體的頁(yè)面屬性和方法的編寫(xiě)這里就不列出了,測(cè)試用例同樣是繼承MyUnittest斟冕,并且先執(zhí)行一次登錄系統(tǒng)操作:
以上是近期的總結(jié)口糕,還存在很多不足之處,路一步一步走磕蛇,慢慢完善景描。