Playwright VS Selenium VS Puppeteer VS Cypress

參考:https://www.testim.io/blog/puppeteer-selenium-playwright-cypress-how-to-choose/前端

這四款自動化測試框架在咱們的公衆號都有介紹。上週介紹了新出 Playwright,那這款工具備什麼優勢,是否值得咱們投入精力學習。java

關鍵對比

接下來,我會經過一些維度來進行對比。python

支持語言

  • Playwright: ✅✅✅✅ 支持主流語言:JavaScript & TypeScript\python\C#\Go\Java
  • Selenium: ✅✅✅✅✅ 支持主流語言:java\python\ruby\C#\C++\JavaScript
  • Cypress: ✅ 只支持 JavaScript & TypeScript
  • Puppeteer: ✅✅ 只支持 JavaScript & TypeScript \ python

覆蓋瀏覽器

  • Playwright: ✅✅✅ 支持Chromium/WebKit/Firefox
  • Selenium: ✅✅✅✅✅ 運行在目前全部主流瀏覽器上(不包括國內套皮的瀏覽器)。
  • Cypress: ✅✅ 只支持 Chrome/Firefox
  • Puppeteer: ✅✅ 只支持 Chrome/Firefox

支持多標籤 + 表單

  • Selenium: ✅✅✅ 經過 switch_to 切換,但很差用。
  • Cypress: ❌ 沒有真正支持
  • Puppeteer: ✅✅✅✅✅ 更符合直覺的 API
  • Playwright: ✅✅✅✅✅ 更符合直覺的 API

爲證實playwright 更簡單,咱們來作個代碼對比。web

測試建立速度

  • Selenium: ✅ Yes Selenium IDE能夠錄製腳本。
  • Cypress: ❌ 不支持腳本錄製。
  • Puppeteer: ✅✅ Yes 基於Puppeteer Recorder錄製腳本。
  • Playwright: ✅✅ Yes 基於 playwright codegen 命令錄製腳本。

並行網格和基礎服務

  • Selenium: ✅ Yes 託管或構建本身解決方案。
  • Cypress: 🤷 只能在本身的閉源付費雲構建。
  • Puppeteer: ❌ 一般構建本身的
  • Playwright: ❌ 一般構建本身的。

穩定性

這個主要評估用例編寫以後的失敗率,不包含真的發現bug以後的失敗。瀏覽器

Selenium: ❌✅ 複雜的自動等待機制。
Cypress: ❌✅ 複雜的機制,而且不能與框架一塊兒工做。
Puppeteer:❌✅ 等待某些元素,但必須手工等待其餘元素。
Playwright: ❌✅✅ 最好等待某些元素,但必須手工等待其餘元素。ruby

智能定位:

Selenium: ❌ 不支持以多種方式選擇元素
Cypress: ❌ 不支持以多種方式選擇元素
Puppeteer❌ 不支持以多種方式選擇元素
Playwright: ❌✅✅ 很是前景,開始支持自定義選擇器引擎。框架

Debugging

  • Selenium: ❌✅ 遠程教程網格依賴於網格提供的程序。
  • Cypress: ❌✅ 你甚至不是在寫常規的JavaScript。
  • Puppeteer: ✅ 在IDE中編寫和調試Javascript。
  • Playwright: ✅ 在IDE中編寫和調試Javascript或其餘語言。

Documentation and Resources

  • Selenium: ✅✅ 官方文檔寫得確實很差,可是第三方資料太豐富,相關的書籍也不少。
  • Cypress: ✅✅ 雖然社區很小,可是很熱鬧,官方文檔也寫的很是贊。
  • Puppeteer: ✅ 社區比較小,但目前有大量的教程。
  • Playwright: ✅❌ 工具比較新,API也在變化,文檔和教程可能跟不上。

注:要分範圍 1 ~ 5,表明分值,分值越高說明越優。工具

categories Playwright Selenium Cypress Puppeteer
支持語言 4 5 1 2
覆蓋瀏覽器 3 5 2 2
多標籤&表單 5 3 0 5
測試編寫速度 4 4 4 3
並行,網格 0 4 2 0
穩定性 4 3 3 3
智能定位 3 2 2 2
Debugging 3 2 3 2
文檔和資源 3 4 4 3

如何選擇?

首先,這些測試工具都是基礎。他們只是提供了一套API來定位和操做元素。並不能成爲你自動化項目成功或失敗的決定因素。性能

自動化的是否成功我認爲主要取決於如下幾個方面:學習

  1. 調研你的項目是否真的適合自動化。
  2. 是否真的找到自動化的應用場景。(好比,咱們用自動化測試埋點,用自動化配合檢查App性能都是很好應用場景)
  3. 是否有足夠人力投入到自動化中。
  4. 測試人員的水平,不要懷疑這一點,很多同窗還在定位元素面前磕磕絆絆。
  5. 是否有團隊支持和配合。有些同窗還在糾結驗證的問題,讓開發配合一些很輕鬆可繞過,可你就是作不到。

好了,這些工具都沒法決定自動化項目是否成功,那怎麼選?

若是,你不懂而且也不打算學習JavaScript, 那麼就不用選 Cypress 和 Puppeteer 了。

若是,你只是一個新手,那麼仍是穩妥點,先學會Selenium,這是測試的必備技能。

我很是鼓勵那些有一些自動化經驗的同窗嘗試學習JavaScript,他會讓你對前端(web)技術有更深的理解,由於你要測試的就是前端(web)應用。就像我可靈活的控制元素的隱藏,修改屬性,更快速的定位到疑難雜症的元素,這徹底是由於我作過前端開發。Cypress 或 Puppeteer 就是很好的選擇。

固然,對於我來講,新出的自動化工具,我都會關注和學習一下。從而找到它的亮點和優點分享給大家。

相關文章
相關標籤/搜索