Selenium WebDriver自動化測試的十大優(yōu)秀實踐
譯文【51CTO.com快譯】目前,廣受開發(fā)界歡迎的Selenium,不但是針對Web應(yīng)用的自動化開源框架,而且可以處理諸如網(wǎng)站監(jiān)控等各種管理任務(wù)。同時,作為科技行業(yè)內(nèi),最為流行的開源式自動化測試工具,Selenium為端到端測試提供了強大的、基于瀏覽器的自動化測試服務(wù)。
Selenium WebDriver從誕生之日起也備受歡迎。它既可以直接運行在瀏覽器上,又能夠使用瀏覽器的內(nèi)置功能,去觸發(fā)那些由測試人員編寫的自動化測試。如下圖所示,Selenium WebDriver 架構(gòu)由Selenium客戶端庫、JSON Wire協(xié)議、瀏覽器驅(qū)動、以及瀏覽器,四個主要模塊構(gòu)建而成。
憑借著多年使用Selenium框架的經(jīng)驗,我將在下面和您討論Selenium WebDriver API是如何使用瀏覽器驅(qū)動,與真實瀏覽器相交互,以及在Selenium自動化測試中的十種優(yōu)秀實踐,以方便您開發(fā)設(shè)計出優(yōu)秀的、且具有可擴展性的測試套件。
自動化測試的優(yōu)秀實踐
1. 設(shè)置命名約定。為已創(chuàng)建的每種類型文件建立標(biāo)準(zhǔn)化的命名約定,將有助于簡化開發(fā)和Selenium的測試過程。例如:根據(jù)項目的某個階段性需求,貴團隊可能需要臨時增加某個成員臨時編寫的測試代碼。不過在幾個月后,當(dāng)您的團隊重新訪問該測試時,您可能已記不得、或無法弄清當(dāng)初的意圖與目的,而只能被動地留存到開發(fā)完整的實施階段。因此,我們需要通過以一種“不言自明(self-explanatory)”的方式,去命名各種測試用例,以方便您和您的團隊快速地了解其測試特性與意圖,避免花費時間進行不必要的來回滾屏,或反復(fù)瀏覽與比對。此外,如果某些測試在執(zhí)行階段出現(xiàn)了失敗,那么我們只需快速地查看測試名稱,便可以輕松地定位是哪些功能出現(xiàn)了問題。
2. 避免阻止休眠的調(diào)用。作為顯式等待的一個例子,休眠模式雖然并非Selenium WebDriver的特性,但是大多數(shù)編程語言的常見功能。當(dāng)您的程序正在運行時,Thread.Sleep()通常會在某個線程中,按照設(shè)定的方式,執(zhí)行各種自動化檢查。一旦滿足調(diào)用的條件,它就會指示應(yīng)用程序在一段時間內(nèi),除了休眠,不做任何事。
不過,Selenium提供了隱式(Implicit)和顯式(Explicit)等待兩種方式,能夠比休眠更加有效地處理各種延遲。其中,隱式等待會通知目標(biāo)瀏覽器,為頁面上現(xiàn)存的所有Web元素,等待指定的持續(xù)時間。如果某個元素的可用性快于隱式延遲時間,那么程序?qū)樌匾浦料乱恍写a執(zhí)行??梢姡覀冃枰苊庾柚剐菝叩恼{(diào)用。讓Selenium自行使用隱式和顯式等待來進行處理。請通過鏈接-- https://itnext.io/how-to-using-implicit-and-explicit-waits-in-selenium-d1ba53de5e15,了解更多有關(guān)Selenium隱式和顯式等待的信息。
3. 選擇最適合的Web定位器。我們在執(zhí)行Selenium自動化測試時,可能碰到的一項挑戰(zhàn)是,如果那些與測試代碼中使用到的定位器相關(guān)的具體實現(xiàn)發(fā)生了變化,那么我們必須對自動化測試進行相應(yīng)的更改。其中包括:ID、名稱、鏈接文本、XPath、CSS選擇器、DOM定位器等(請參見下表)。
可見,對于如此繁多的Web定位器,我們有必要選擇合適的定位器,以盡量減少由于用戶界面的變化,而對測試引發(fā)的影響。其中,ID、Class和Name不僅易于使用,而且相對其他Web定位器更加穩(wěn)定。請通過鏈接--https://itnext.io/the-concept-of-the-right-locator-for-selenium-webdriver-automated-scripts-5b8c6bf528e5,了解更多有關(guān)Selenium WebDriver自動化腳本如何選擇恰當(dāng)?shù)亩ㄎ黄鞯母拍睢?/p>
4. 實施日志記錄和報告。如果在某個廣泛的測試套件中,有個特定的測試失敗了,那么我們可能很難準(zhǔn)確地定位失敗的測試用例。對此,測試控制臺(或后臺)日志記錄,將有助于我們更好地理解代碼,在測試代碼中找到適當(dāng)?shù)奈恢?,進而及時抑制問題。
在流行編程語言中,我們經(jīng)常用到的日志級別包括:調(diào)試性、通知性、警告性、錯誤和重要的日志等。不過,在測試的過程中,添加不必要的日志,也可能會拖慢測試的整體進程。因此,我建議您僅在有助于跟蹤那些失敗原因的場景中,添加具有相應(yīng)錯誤級別的日志。請通過鏈接--https://itnext.io/implement-logging-and-reporting-best-practices-2cc4b58de9d3,了解更多有關(guān)實施日志記錄和報告的優(yōu)秀實踐。
5. 使用各種設(shè)計模式和原則。面對設(shè)計和開發(fā)自動化過程中的潛在問題,開發(fā)人員往往會事先制定和采用各種模式。對此,我們可以回溯到《設(shè)計模式(Design Patterns)》一書。該書提供了各種面向?qū)ο缶幊痰倪m用模式。您幾乎能夠為每一種問題找到對應(yīng)的解決方案。當(dāng)然,此類設(shè)計模式的概念也在不斷迭代和發(fā)展。新的工廠(Factory)和裝飾(Decorator)模式也被加入了進去。請通過鏈接--https://antony-s-smirnov.medium.com/all-about-design-patterns-in-automation-testing-7276ad051db8,了解更多有關(guān)自動化測試中的設(shè)計模式。
6. 集中式的文件夾結(jié)構(gòu)。在Selenium團隊的中央存儲庫中,開發(fā)和Selenium測試人員,更愿意使用約定好的命名規(guī)則和定義好的文件夾結(jié)構(gòu)。而沒人愿意將時間浪費在,錯誤文件名和代碼問題所產(chǎn)生的負面影響上。例如:在處理那些使用Selenium框架的測試時,我們必須關(guān)注測試代碼的可維護性。通常,標(biāo)準(zhǔn)的項目是由Src和Test文件夾所組成。其中,Src文件夾可以包含各種子目錄,例如:頁面對象、幫助函數(shù)、以及那些包含在測試場景中的Web定位器文件。而Test文件夾則包含了各種實際的測試實現(xiàn)。
7. 數(shù)據(jù)驅(qū)動測試。被開發(fā)出的Web應(yīng)用也需要針對不同的瀏覽器、設(shè)備、以及操作系統(tǒng)的組合(即多種數(shù)據(jù)集)進行測試。通過Selenium,您可以使用數(shù)據(jù)驅(qū)動框架、關(guān)鍵字驅(qū)動框架、以及兩者的混合。由于被輸入的測試數(shù)據(jù),往往取自外部Excel或CSV等文件,因此數(shù)據(jù)驅(qū)動框架會在如何將數(shù)據(jù)集與實際測試代碼分離的方面,十分有效。在測試自動化腳本中,對測試值進行硬編碼,并非一種可擴展的解決方案。它往往會導(dǎo)致不必要的軟件臃腫、以及重復(fù)性的測試代碼。因此,更好的方案是,使用通過Selenium實現(xiàn)數(shù)據(jù)驅(qū)動的參數(shù)化測試。參數(shù)化將有助于針對不同的輸入組合(或數(shù)據(jù)集),去執(zhí)行各種測試用例。例如:使用TestNG進行參數(shù)化、JUnit參數(shù)化、以及開展數(shù)據(jù)驅(qū)動的測試等。請通過鏈接--https://antony-s-smirnov.medium.com/how-to-use-the-data-provider-pattern-in-the-project-ea12430d9275,了解更多有關(guān)如何在項目中使用數(shù)據(jù)提供者的模式。
8. 在適當(dāng)?shù)膱鼍爸惺褂脭嘌院万炞C。
9. 避免代碼的重復(fù),或包裝Selenium的各種調(diào)用。
10. 在Selenium中,使用針對JUnit和TestNG編寫的并行測試案例。
原文標(biāo)題:The best practices test automation withSeleniumWebDriver ,作者: Anton Smirnov
【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】