當(dāng)我們談?wù)撟詣?dòng)化時(shí),首先想到的工具之一是 Selenium。我們都知道Selenium WebDriver 是一個(gè)出色的 Web 自動(dòng)化工具。實(shí)施Selenium 自動(dòng)化測(cè)試的主要原因是加速 selenium 測(cè)試。在大多數(shù)情況下,Selenium 的性能比手動(dòng)的要好得多。但是,有時(shí)自動(dòng)化腳本通常運(yùn)行速度較慢。集成和單元測(cè)試比 Selenium 測(cè)試要快得多。有時(shí),單個(gè)測(cè)試需要幾分鐘才能運(yùn)行,當(dāng)它們的數(shù)量更多時(shí),速度會(huì)更慢,因?yàn)楹茈y獲得準(zhǔn)確和更快的反饋。但是,你始終可以使用最好的selenium 測(cè)試自動(dòng)化方法來(lái)加速selenium 測(cè)試。
如何更快地執(zhí)行 Selenium 測(cè)試用例?
測(cè)試人員可以采用多種方法來(lái)加速 Selenium 測(cè)試用例。你可以考慮使用顯式等待、Web 定位器、更喜歡不同的瀏覽器、優(yōu)化 Selenium 基礎(chǔ)架構(gòu),并考慮其他用于增強(qiáng)軟件性能的最佳實(shí)踐。由于最終產(chǎn)品中有如此多的更新,因此維護(hù) Selenium 測(cè)試用例的過(guò)程變得繁瑣。因此,我們不能忽視 Selenium 測(cè)試用例的性能;相反,我們應(yīng)該專(zhuān)注于從初始階段加速它們。Selenium 測(cè)試用例在任何給定場(chǎng)景中的關(guān)鍵任務(wù)是:
- 使用 Selenium Webdriver(本地/遠(yuǎn)程)打開(kāi)測(cè)試中的 URL
- 利用相關(guān)的網(wǎng)頁(yè)定位器,定位網(wǎng)頁(yè)元素
- 對(duì)被測(cè)頁(yè)面上的定位 Web 元素執(zhí)行斷言
- 釋放 WebDriver 使用的資源
讓我們重點(diǎn)介紹一些方法來(lái)了解如何加速 selenium 測(cè)試。
Selenium 自動(dòng)化中的并行測(cè)試
這是加快 Selenium 測(cè)試用例的最簡(jiǎn)單方法之一。并行測(cè)試允許您在不同的設(shè)備瀏覽器組合和操作系統(tǒng)配置上同時(shí)執(zhí)行多個(gè)測(cè)試,立即覆蓋整個(gè)測(cè)試套件。如果您擁有內(nèi)部 Selenium Grid 基礎(chǔ)設(shè)施,您可以隨時(shí)查看 Selenium Grid 4 的優(yōu)勢(shì),并了解它在加快 Selenium 測(cè)試用例速度方面所提供的功能。讓我們假設(shè)您有十個(gè)測(cè)試要運(yùn)行。如果您在不同的設(shè)備上運(yùn)行它們,則所有十個(gè)測(cè)試都可以在 10 秒內(nèi)完成,而不是 100 秒。您可以在類(lèi)和方法級(jí)別選擇此方法。對(duì)測(cè)試場(chǎng)景進(jìn)行分組、參數(shù)化和基于云的選項(xiàng)將進(jìn)一步加強(qiáng)該過(guò)程。
A. 分組測(cè)試:
測(cè)試套件中的多個(gè)測(cè)試方法和測(cè)試文件使實(shí)現(xiàn)變得困難。如果我們根據(jù)被測(cè)功能的類(lèi)型對(duì)測(cè)試場(chǎng)景進(jìn)行分組,則可以輕松管理任何新出現(xiàn)的復(fù)雜性。
B. 用 Selenium 4 替換 Selenium 3:
隨著Selenium 4的發(fā)布,Selenium有了顯著的改進(jìn). 它配備了優(yōu)化的 Selenium Grid、標(biāo)準(zhǔn)化的 Selenium Webdriver 萬(wàn)維網(wǎng)聯(lián)盟 (W3C)、增強(qiáng)的 Selenium 4 IDE,此外,它還引入了 Chrome Web Tools 和相關(guān)定位器。這些改進(jìn)可以顯著加快 Selenium 測(cè)試。如果我們比較 Selenium 3 和 4,我們會(huì)發(fā)現(xiàn)前者使用 JSON 有線協(xié)議進(jìn)行瀏覽器和測(cè)試代碼之間的交互,這導(dǎo)致了通過(guò) W3C 加密和解碼多個(gè) API 請(qǐng)求的額外負(fù)擔(dān)。但后者使用 WebDriver W3C 協(xié)議,可加速 Web 瀏覽器和測(cè)試代碼之間的交互。新引入的 Selenium 4 相對(duì)定位器,如 – ?'above'
?、?'below'
?、?'to_left_of'
?、?'to_right_of'
?、?'near'
?,加速了 Selenium 測(cè)試用例并提高了它們的整體穩(wěn)定性。還,
C. 基于云的 selenium網(wǎng)格:
每當(dāng)您想要測(cè)試必須跨多個(gè)瀏覽器-操作系統(tǒng)-設(shè)備組合運(yùn)行許多并行測(cè)試的大型 Web 應(yīng)用程序時(shí),你將需要一個(gè)基于云的 Selenium Grid 來(lái)執(zhí)行和加速 Selenium 測(cè)試用例。下面是 Selenium Grid 的圖示。
選擇相關(guān)的網(wǎng)站定位器
Web 定位器是任何 Selenium 測(cè)試場(chǎng)景中不可或缺的部分。定位網(wǎng)絡(luò)元素后,需要一個(gè)合適的網(wǎng)絡(luò)定位器來(lái)進(jìn)一步發(fā)揮作用。在眾多可用選項(xiàng)中,始終建議使用速度更快的網(wǎng)絡(luò)定位器。在所有網(wǎng)絡(luò)定位器中,ID 定位器是 Selenium WebDriver 中最快的。讓我們簡(jiǎn)要討論一些最常用的網(wǎng)絡(luò)定位器:
A. ID 定位器:它使用與所有瀏覽器相關(guān)的?document.getElementById() javascript
? 命令運(yùn)行速度最快。在許多唯一元素持續(xù)存在的情況下,此命令會(huì)生成第一個(gè)唯一匹配項(xiàng)。只有當(dāng) HTML 元素具有對(duì)頁(yè)面上的每個(gè)元素都是唯一的 ID 屬性時(shí),它才起作用。在執(zhí)行速度方面,在 ID 之后,Name、CSS Selector 和 XPath 分別是最快的。
B. 名稱(chēng)選擇器:當(dāng) WebElement 中沒(méi)有 ID 時(shí),使用名稱(chēng)選擇器 Web 定位器。
C. CSS Selector:如果 WebElement 沒(méi)有 ID 或 NAME 屬性,在這種情況下選擇 CSS Selector Web locator 是合適的。CSS 在大多數(shù)常見(jiàn)的 Web 瀏覽器中通常沒(méi)有什么不同,并且使用 Selenium 中的 CSS 選擇器確保 CSS 引擎的更好性能。使用此 Web 定位器的優(yōu)勢(shì)是更快的元素識(shí)別、降低瀏覽器不兼容性和減少測(cè)試執(zhí)行。與 XPath 相比,在 Internet Explorer 等傳統(tǒng) Web 瀏覽器的情況下首選 CSS 定位器,以提供更好的明確性。
D. XPath: XPath Selector 是最靈活的 Web 定位器,但它是最快的四個(gè)定位器中最慢的,因?yàn)楸仨毧缭铰窂降拿恳粚硬拍苓x擇特定的 Web 元素并從一個(gè)瀏覽器移動(dòng)到另一個(gè)瀏覽器。使用 XPath 定位器不應(yīng)該是主要選擇,而應(yīng)該僅在這是剩下的唯一選項(xiàng)時(shí)才使用。
- 使用少量 Web 定位器:將Web 定位器的數(shù)量保持在最低限度,可以提高測(cè)試腳本的可讀性,從而減少 Selenium 腳本的執(zhí)行時(shí)間。
- Explicit Waits:用于自動(dòng)化測(cè)試的 Explicitwait 命令將消除任何減速,并允許您執(zhí)行等待條件,例如 Element 可見(jiàn)、Element 是可點(diǎn)擊的、Element 是可選的頁(yè)面 Web 元素,這在 Selenium 中的隱式等待的情況下是不可能的. 例如,當(dāng)標(biāo)識(shí)的元素可點(diǎn)擊時(shí),ToBeClickable 方法會(huì)生成一個(gè) WebElement。一旦條件滿(mǎn)足,顯式等待就會(huì)撤退。這意味著元素作為結(jié)果返回并且不會(huì)等待整個(gè)持續(xù)時(shí)間。下面的代碼片段顯示了 ID = element 的 WebElement 在 6 秒內(nèi)定位。在其位置之后,顯式等待退出,并返回所需的 WebElement。
利用顯式等待的測(cè)試腳本展示了更好的性能。
- 創(chuàng)建原子腳本:通過(guò)簡(jiǎn)化復(fù)雜場(chǎng)景來(lái)創(chuàng)建獨(dú)立的測(cè)試用例使 Selenium 測(cè)試高效。像 TestNG 這樣的框架支持測(cè)試方法之間的顯式測(cè)試依賴(lài)關(guān)系,而原子測(cè)試可以輕松檢測(cè)到故障,這減少了測(cè)試時(shí)間和維護(hù)工作,最大限度地減少了測(cè)試依賴(lài)關(guān)系,并加速了 Selenium 測(cè)試。
- 禁用網(wǎng)頁(yè)上的圖像以加快頁(yè)面加載速度:創(chuàng)建 Selenium 實(shí)例后,您可以使用 driver.get() 方法打開(kāi)被測(cè)頁(yè)面。許多網(wǎng)頁(yè)內(nèi)容豐富,由許多圖像組成,導(dǎo)致頁(yè)面加載速度變慢。但是可以通過(guò)使用瀏覽器相關(guān)設(shè)置禁用圖像加載來(lái)加快頁(yè)面加載速度。
下面的快照顯示:
如何在Chrome中使用 Selenium 腳本禁用頁(yè)面加載以加快 Selenium 測(cè)試用例和頁(yè)面加載。
如何在Firefox 中使用 Selenium 腳本禁用頁(yè)面加載以加快 Selenium 測(cè)試:
在這種情況下,圖像加載在 Amazon 電子商務(wù)網(wǎng)站中控制,其中 Firefox 首選項(xiàng)設(shè)置為 2,使用 permissions.default.image。
- 參數(shù)化的數(shù)據(jù)驅(qū)動(dòng)測(cè)試:讓我們來(lái)看看如何使用?
Parameterization
?加速 selenium 測(cè)試。當(dāng)涉及針對(duì)大量數(shù)據(jù)集進(jìn)行測(cè)試,并在不同的測(cè)試輸入上運(yùn)行相同的測(cè)試時(shí)。參數(shù)化被證明是一個(gè)很好的選擇。大多數(shù)自動(dòng)化框架都很好地支持參數(shù)化,例如 ?TestNG(Selenium Java)
?、?JUnit
?、?NUnit(C#)
?、?PyTest( Selenium Python )
? 等。 - 使用無(wú)頭瀏覽器/驅(qū)動(dòng)程序:無(wú)頭瀏覽器允許我們?cè)跊](méi)有瀏覽器圖形用戶(hù)界面 (GUI) 的情況下執(zhí)行瀏覽器用戶(hù)界面 (UI) 測(cè)試。它還有助于提高在后臺(tái)運(yùn)行的跨瀏覽器測(cè)試的效率。如果怒不想了解通過(guò)測(cè)試腳本收到的 UI 交互,則不需要此最佳實(shí)踐。一些常見(jiàn)的無(wú)頭瀏覽器是 ?
HtmlUnit
?、?Splash
?、?PhantomJS
?等。在 ?PhantomJS
?驅(qū)動(dòng)程序的上下文中查看 Selenium 瀏覽器測(cè)試的性能。
結(jié)論
Selenium 測(cè)試執(zhí)行的速度對(duì)業(yè)務(wù)至關(guān)重要。即使它們很慢,也有很多方法可以加速硒測(cè)試。上述最佳實(shí)踐有助于加速 Selenium 測(cè)試、加速和減少測(cè)試時(shí)間。在持續(xù)測(cè)試中及早發(fā)現(xiàn)錯(cuò)誤可以更快地解決問(wèn)題,從而提高測(cè)試性能并提高產(chǎn)品質(zhì)量。