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