自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

自動化框架Selenium與Cypress,哪家強?

譯文
開發(fā) 前端 自動化
本文將全方位地和您討論Selenium和Cypress之間的各項差異,以便您在實際項目中,做出明智的選擇。

【51CTO.com快譯】不可否認,Selenium是用于功能性測試和Web應(yīng)用測試領(lǐng)域的首選自動化框架之一。測試人員可以利用在線的Selenium Grid,在不同的瀏覽器和平臺組合上,運行測試。不過,不知您是否已注意到,作為該領(lǐng)域的后起之秀--Cypress,正在以驚人的速度迎頭趕上。Cypress也是一種用于測試Web應(yīng)用的自動化開源測試框架。下面我將全方位地和您討論Selenium和Cypress之間的各項差異,以便您在實際項目中,做出明智的選擇。

Selenium與Cypress的概覽

作為一種廣為流行的自動化開源測試框架,Selenium主要被用于Web應(yīng)用測試和跨瀏覽器測試的場景中。Selenium WebDriver是Selenium套件的關(guān)鍵組件之一。

目前,Selenium支持諸如Python、Ruby、C#、JavaScript、Java、PHP等多種編程語言。它支持的自動化框架包括:Behave(一種流行的BDD框架)、JUnit、SpecFlow、MSTest、TestNG、PyTest、PyUnit、Mocha JS、Jest、WebDriverIO、以及Protractor等。

在使用Selenium開展自動化測試之前,開發(fā)人員需要在測試主機上下載并安裝相應(yīng)的瀏覽器驅(qū)動程序(如,Chrome的ChromeDriver、Firefox的GeckoDriver等),以及適當?shù)腟elenium語言驅(qū)動。

開源的Cypress項目目前被托管在GitHub上,其最新的版本是5.5.0。開發(fā)人員能夠通過Cypress進行單元測試,編寫端到端測試,以及開展集成測試。

與能夠支持多種語言的Selenium WebDriver不同,Cypress僅能夠支持JavaScript,不過它是精通JavaScript前端開發(fā)和自動化測試人員的首選。在對測試自動化框架的支持方面,Cypress僅支持Mocha JS框架。因此,我們可以認為Cypress的Web自動化測試用例,只在Mocha JS框架上,運用JavaScript編寫而成的。

下圖是Selenium WebDriver和Cypress,在過去六個月的下載趨勢圖??梢奀ypress的下載量正在慢慢趕上Selenium。

下載比較圖

來源--https://www.npmtrends.com/protractor-vs-selenium-webdriver

Selenium簡介

Selenium項目始于2004年。2006年推出的Selenium IDE,是一款原生的記錄和回放工具,僅能夠使用在Firefox上。當然,最新的Selenium IDE已經(jīng)可以被用在Chrome上了。它不但帶有跨瀏覽器的支持,可用于并行測試,而且能夠讓自動化測試人員通過設(shè)置斷點,來調(diào)試腳本。

當前,Selenium的最新穩(wěn)定版本是Selenium 3.141.59。不過,Selenium 4(仍處于Alpha階段)中的Selenium WebDriver是W3C的建議版本。由于JSON Wire協(xié)議將不再被用于與Web瀏覽器進行通信,因此自動化測試將能夠更加無縫地協(xié)同工作在不同的瀏覽器(如Chrome、Firefox等)之間。

Selenium WebDriver架構(gòu)

由于Selenium WebDriver和相應(yīng)的瀏覽器使用通用的協(xié)議(即W3C協(xié)議)進行通信,因此開發(fā)人員往往認為Selenium 4具有更穩(wěn)定且統(tǒng)一的特點。

Selenium的主要優(yōu)點

  • Selenium WebDriver能夠被廣泛地用于單元測試、E2E(端到端)測試、以及安全性測試。
  • 如前所述,Selenium支持多種流行的編程語言,并廣泛用到了各種自動化測試框架。
  • 它既兼容最新的瀏覽器(如Chrome、Firefox、Edge等),又兼容Internet Explorer等過時的瀏覽器。
  • 經(jīng)過常年的積累,Selenium擁有不斷壯大的生態(tài)系統(tǒng)。
  • 可以將本地的Selenium測試用例,輕松地移植到基于云端的Selenium Grid處。
  • Selenium能夠與LambdaTest之類的云端測試工具開展并行測試。這不但可以減少測試時間,提高成本效益,還能夠?qū)崿F(xiàn)更大的測試覆蓋率。

Selenium的缺點

  • 對于新手來說,Selenium的學習曲線比較陡峭。當然,開發(fā)人員和自動化測試人員也可以通過向Selenium社區(qū)里的活躍用戶學習,來快速入門。
  • 由于涉及到安裝瀏覽器的驅(qū)動程序、Selenium Grid服務(wù)器、以及Selenium IDE,因此Selenium的設(shè)置過程較為耗時。
  • 盡管Selenium被廣泛地用于UI測試,但它在測試圖像方面存在著局限性。
  • 由于Selenium腳本是在瀏覽器外部被執(zhí)行的(即,測試腳本和被測瀏覽器之間的接口是通過相應(yīng)的“瀏覽器驅(qū)動程序”來實現(xiàn)的),因此它比Cypress框架執(zhí)行的時間會更長。

Cypress簡介

Cypress是為開發(fā)人員和質(zhì)量保證工程師打造的下一代前端測試工具,可被用來測試瀏覽器中運行的所有內(nèi)容。與Selenium運行在瀏覽器外部不同,Cypress能夠與應(yīng)用程序在同一循環(huán)中被執(zhí)行。也就是說,節(jié)點服務(wù)器(Node server)的進程能夠與Cypress相互通信,同步并執(zhí)行任務(wù)。由于可以訪問到網(wǎng)絡(luò)層,因此Cypress能夠即時讀取和更改網(wǎng)絡(luò)的流量

憑借著獨特的DOM操作技術(shù),Cypress的各項測試皆可訪問到DOM中的Web元素、應(yīng)用實例、計時器、以及服務(wù)worker等內(nèi)容。

由于對自動化過程具有完全的掌控力,因此Cypress可以修改進出瀏覽器的所有內(nèi)容,以及那些可能會干擾Web瀏覽器自動化功能的代碼。同時,因為Cypress被安裝在本地,所以可以通過訪問操作系統(tǒng),來控制各項自動化任務(wù)。

Cypress的主要優(yōu)點

  • 由于測試用例直接運行在瀏覽器內(nèi)部,因此在安裝Cypress時無需任何依賴項,也無需額外的下載。
  • 由JavaScript構(gòu)建的Cypress,可被開發(fā)人員和質(zhì)量保證工程師用于前端開發(fā)。
  • Cypress沒有額外的IDE負擔。在啟動Cypress時,它會提示您選擇IDE,以方便更改測試腳本。
  • Cypress進程可實時地響應(yīng)應(yīng)用事件,并處理各種命令。同時,通過Cypress中的實時重載功能,用戶可以實現(xiàn)在應(yīng)用發(fā)生變更時,自動重載測試。
  • 由于Cypress對整個自動化過程(從上到下)具有嚴格的控制,因此它能夠更好地了解瀏覽器內(nèi)、外的變化,進而提供一致性的結(jié)果。
  • 由于運行在應(yīng)用程序內(nèi),因此Cypress的測試代碼可以訪問到應(yīng)用程序所觸及的所有對象(不限于DOM元素)。由此,Cypress不再需要JSON Wire(或其他協(xié)議)進行通信。
  • 由于Cypress會自動等待DOM中元素的生成,因此用戶無需在Cypress中添加隱式和顯式的wait語句。在執(zhí)行到下一條語句之前,Cypress也會等待命令和聲明(https://on.cypress.io/introduction-to-cypress#Cypress-is-Not-Like-jQuery)。此外,Cypress也不會產(chǎn)生不屬于DOM的陳舊元素。
  • 由于測試是在瀏覽器內(nèi)部執(zhí)行的,并且Cypress可以直觀地獲悉應(yīng)用是如何進行同步的,它甚至知道某個元素對于動畫效果處理的起、停時間(https://docs.cypress.io/guides/core-concepts/interacting-with-elements.html#Animations)。因此,與使用其他自動化測試工具相比,Cypress的測試具有更高的抗剝離性(flake resistant)。
  • Cypress會捕獲每個測試步驟的快照,以方便開發(fā)人員可以在測試腳本中的任何特定步驟上,檢查其活動狀態(tài)。
  • Cypress可讓用戶直接修改DOM元素,例如:顯示某些隱藏元素。
  • 由于是基于Electron App構(gòu)建的,因此Cypress可以讓開發(fā)人員或質(zhì)量保證工程師,通過使用Stubbing DOM API,來更好地控制應(yīng)用程序。
  • Cypress中的Stubs [如cy.stub()] 可用于修改某些功能,并將其控制權(quán)委托給開發(fā)人員。Cypress中的Spies [如cy.spy()] 則讓用戶可以監(jiān)控某個功能。Cypress中的時鐘API [如cy.clock()]可用于控制應(yīng)用程序的數(shù)據(jù)和時間。這些都有助于按需替換應(yīng)用的原有行為,或避免在測試中出現(xiàn)緩慢情況。
  • 鑒于UI測試之類的活動可能并不需要執(zhí)行分析,因此開發(fā)人員可以在應(yīng)用執(zhí)行測試之前,阻止Google Analytics之類的分析代碼。
  • Cypress允許開發(fā)人員像在單元測試中那樣,人工創(chuàng)建不同的狀態(tài)。此過程并不會拖慢整個測試進程。
  • Cypress通過豐富而直觀的用戶界面和儀表板,向用戶展示了測試被執(zhí)行的每一個細節(jié),包括:聲明、網(wǎng)絡(luò)請求、頁面加載、stubs、以及監(jiān)控等。
  • 默認情況下,它能夠支持并行測試(或稱并行化)。同時,它能夠讓用戶按照瀏覽器、測試標簽等條件,對測試進行分組。下圖便是Cypress并行測試的簡短過程:

來源--https://docs.cypress.io/img/guides/parallelization/parallelization-overview.88fddb02.png

  • Cypress還可以與流行的CI/CD工具相集成,其中包括:Jenkins、Bamboo、Circle CI、Bitbucket、GitLab等。

Cypress的缺點

  • Cypress僅適用于Chrome、Firefox、Edge、Brave和Electron瀏覽器。因此Cypress的跨瀏覽器測試方面比較受限。

 

  • 它僅支持使用JavaScript框架創(chuàng)建的測試用例。
  • 它不支持遠程執(zhí)行。
  • Cypressk在其網(wǎng)站聲稱,Cypress將永遠不會支持處理多個瀏覽器選項卡。
  • 默認情況下,Cypress并不支持多個瀏覽器的實例,也不能同時控制多個已打開的瀏覽器。對此,Cypress目前的解決方法(https://docs.cypress.io/guides/references/trade-offs.html#Multiple-browsers-open-at-the-same-time)是通過與其他后端進程(如,Selenium、Puppeteer等)同步,以驅(qū)動另一個已打開的瀏覽器的實例。
  • 目前,Cypress的測試僅限于用來確定具有相同來源的訪問域,因此用戶無法在同一測試中,訪問到不同來源的兩個域。當然,他們可以訪問在不同測試中,不同來源的兩或多個域。

Selenium跨瀏覽器測試入門

您可以選擇使用本地Selenium Grid,或是在LambdaTest之類基于云端的Selenium Grid上,進行可擴展的跨瀏覽器測試。

  • 若要在本地Selenium Grid上進行跨瀏覽器測試,您必須事先安裝瀏覽器的驅(qū)動程序,并在被Selenium支持的C#、Java、Python、Ruby等語言中選擇一種。
  • 若要在云端Selenium Grid上執(zhí)行Selenium自動化,您必須在該平臺上創(chuàng)建一個帳戶,并在代碼中調(diào)用適當?shù)臑g覽器功能。

下面,我們來討論一個使用Selenium進行自動化測試的示例:

1. 在Windows 10上的Chrome 86.0中輸入URL https://lambdatest.github.io/sample-todo-app/。

2. 選擇前兩個復(fù)選框。

3. 將“Happy Testing at LambdaTest”發(fā)送到id為sampletodotext的文本框處。

4. 單擊添加按鈕,并驗證是否已添加了該文本。

5. 如果標題與預(yù)期的窗口標題不匹配,則需要聲明。

下面是在LambdaTest的云端Selenium Grid上進行測試的Java代碼:

Cypress自動化測試入門

由于Mocha框架運行在Node.js上,因此在安裝Cypress之前,您需要安裝依賴項軟件包:Node JS和類似Visual Studio Code的IDE。

在安裝好Node JS后,我們可以使用Node軟件包管理器npm,從終端上安裝Mocha和Cypress。

請在終端上運行以下命令,以安裝Mocha:

  1. npm install mocha 

請在終端上運行以下命令,以安裝Cypress:

  1. npm install cypress 

如上圖綠色框所示,Cypress5.5.0已成功安裝。接著,我們通過如下命令,來啟動Cypress:

  1. npx cypress open 

它將打開Cypress儀表板,以便運行各種測試:

Cypress在\integration\examples中提供了各種示例腳本:

若想快速檢查測試,應(yīng)將腳本放在同一個文件夾中。我們參照上述Selenium的測試案例,額外添加了wait usingcy.wait()方法,以及用于從DOM處獲取所需的Web元素的cy.get()方法。

Cypress隨附了豐富的API集,以及特定于瀏覽器的,諸如:執(zhí)行按鈕單擊,設(shè)置視圖等命令。

在以上代碼中,cy.visit()用于打開特定的URL。它類似于driver.getSelenium。cy.get()方法則用于在DOM中定位特定的Web元素。一旦訪問到了某個元素,就可以在該元素上執(zhí)行適當?shù)牟僮髁?。例如,我們找到元?-#sampletodotext,便可在文本框中輸入“Happy Testing at LambdaTest”。cy.log()方法用于將消息打印到Cypress的控制臺日志中。

在Cypress中,我們可以輕松地通過cy.contains()方法,來獲取包含特定文本的DOM元素。

 

在安裝了Cypress的主機上,有Chrome 86、Firefox 82、Edge 86和Electron 85,四種瀏覽器可供選擇。

因此,為了執(zhí)行上述測試,我們只需導(dǎo)航至Cypress儀表板中的測試標簽,在首選瀏覽器(如Chrome 86)中單擊測試文件(即Cypress_ToDoApp.js)即可。下圖是正在進行的測試快照:

測試成功的快照如下圖所示??梢姡珻ypress能夠?qū)崟r地顯示執(zhí)行狀態(tài),并提示代碼中是否存在問題。

Cypress可簡化Web App測試

Cypress在如下方面大幅簡化了開發(fā)人員和質(zhì)量檢查工程師的工作。

查找網(wǎng)絡(luò)元素

從Cypress的實現(xiàn)可以看出,Web元素沒有使用標準的Web定位符(即XPath、Name等)來予以標識。那么,腳本將如何在DOM中定位元素呢?

Cypress在測試運行器中具有一項被稱為“Selector Playground”的出色功能,可方便查找Web元素。您可以在待測試的URL旁,單擊“Open Selector Playground”按鈕,然后將鼠標懸停在需要提供詳細信息的元素上。

通過點擊該Web元素,其詳細信息將會填充并顯示在“cy.get”或“cy.contains”中(緊挨著顯示測試文件名的區(qū)域)。

由于“Selector Playground”類似于Chrome(或Firefox)中的檢查工具,因此用戶無需額外學習該功能,即可修改并執(zhí)行目標代碼。

時間點跳轉(zhuǎn)(Time Travel)

由于Cypress在運行測試時會捕獲快照,因此它能夠靈活地追溯到曾經(jīng)執(zhí)行過的某個時間點。具體而言,您只需將鼠標懸停在命令日志中的某個命令上,然后檢查該步驟曾經(jīng)的歷史記錄即可。Cypress默認最多可以保留50個測試值的快照和命令數(shù)據(jù)。

下面顯示的是在LambdaTest的ToDo頁面上第一個元素(li1)被單擊后,執(zhí)行“時間點跳轉(zhuǎn)”的截圖。

可見,當您想在測試腳本中檢查某個特定操作的效果時,“時間點跳轉(zhuǎn)”功能就能派上用場了。

測試執(zhí)行

如前所述,Cypress的測試是在瀏覽器內(nèi)部執(zhí)行的。由于被安裝在本地,因此它可以獲取Web瀏覽器內(nèi)、外部發(fā)生的所有情況。這便是您可能不會察覺到Cypress測試中有任何網(wǎng)絡(luò)延遲的主要原因。而且,由于Cypress使用的是與瀏覽器相同的DOM事件,因此其命令的執(zhí)行速度要比Selenium快得多。

此外,Cypress使用Mocha的BDD語法,來實現(xiàn)單元測試和集成測試。Mocha JS本身提供了出色的異步支持。而Chai-jQuery、Sinn.JS和Sinon-Chai則為Mocha提供了編寫帶有錯誤消息的可讀聲明等功能。

 

下表是對上述討論過的,有關(guān)Cypress和Selenium在不同方面的總結(jié)與比較。

該如何選擇?

可見,Cypress是一個新興且不斷迭代的工具,而Selenium是自動化測試領(lǐng)域的成熟工具。如果您精通JavaScript,并且正在尋找可以在本地主機上執(zhí)行自動化測試的工具,那么請選用Cypress。同時如果您的Web應(yīng)用是使用React、Angular等時下流行的JavaScript框架構(gòu)建的,并且對于跨瀏覽器測試的要求不高,那么也請選用Cypress。

如果您希望測試代碼能夠在各種瀏覽器和操作系統(tǒng)上流暢運行,則請使用Selenium。此外,由于Selenium測試也可以在基于云的Selenium Grid上執(zhí)行,因此您可以用到由LambdaTest平臺提供的大規(guī)模并行測試的優(yōu)勢。

總之,Selenium和Cypress沒有絕對的完勝者,但是它們之間的確有著眾多差異。您可以從實際項目的測試覆蓋率需求、團隊的技能儲備、以及長遠發(fā)展的角度,通過試用,來選擇最適合的一種工具。

原文標題:Selenium Vs. Cypress: Which Is Better in 2021?,作者:Himanshu Sheth

【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】

 

責任編輯:華軒 來源: 51CTO
相關(guān)推薦

2024-12-31 11:28:14

2011-10-11 09:56:59

PhoneGapSelenium

2017-12-24 21:00:10

自動化測試測試框架敏捷

2011-01-20 10:17:25

ibmdwWeb

2019-02-20 11:19:52

Python 開發(fā)編程語言

2011-06-03 17:06:09

自動化測試

2023-02-15 08:21:22

2024-05-21 09:52:19

2018-12-03 08:46:36

Web瀏覽器SeleniumPython

2017-08-23 14:48:36

VBoxVMWare虛擬化

2013-03-13 11:34:05

自動化測試Selenium.Net測試

2014-10-13 15:17:59

代碼托管

2023-11-15 18:02:52

2017-12-17 21:58:18

2022-04-28 08:24:16

阿里云idaaspython

2023-12-25 09:52:32

2021-06-11 10:15:15

自動化人工智能AI

2020-04-28 09:00:00

測試測試自動化

2009-08-19 09:00:48

單元測試框架自動化測試

2020-09-14 07:00:00

測試自動化框架
點贊
收藏

51CTO技術(shù)棧公眾號