Playwright VS Selenium VS Puppeteer VS Cypress

蟲師發表於2021-01-04

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

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

關鍵對比

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

支援語言

  • 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 更簡單,我們來做個程式碼對比。

測試建立速度

  • Selenium: ✅ Yes Selenium IDE可以錄製指令碼。
  • Cypress: ❌ 不支援指令碼錄製。
  • Puppeteer: ✅✅ Yes 基於Puppeteer Recorder錄製指令碼。
  • Playwright: ✅✅ Yes 基於 playwright codegen 命令錄製指令碼。

並行網格和基礎服務

  • Selenium: ✅ Yes 託管或構建自己解決方案。
  • Cypress: ? 只能在自己的閉源付費雲構建。
  • Puppeteer: ❌ 通常構建自己的
  • Playwright: ❌ 通常構建自己的。

穩定性

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

Selenium: ❌✅ 複雜的自動等待機制。
Cypress: ❌✅ 複雜的機制,並且不能與框架一起工作。
Puppeteer:❌✅ 等待某些元素,但必須手工等待其他元素。
Playwright: ❌✅✅ 最好等待某些元素,但必須手工等待其他元素。

智慧定位:

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 就是很好的選擇。

當然,對於我來說,新出的自動化工具,我都會關注和學習一下。從而找到它的亮點和優勢分享給你們。

相關文章