參考: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來定位和操作元素。並不能成為你自動化專案成功或失敗的決定因素。
自動化的是否成功我認為主要取決於以下幾個方面:
- 調研你的專案是否真的適合自動化。
- 是否真的找到自動化的應用場景。(比如,我們用自動化測試埋點,用自動化配合檢查App效能都是很好應用場景)
- 是否有足夠人力投入到自動化中。
- 測試人員的水平,不要懷疑這一點,不少同學還在定位元素面前磕磕絆絆。
- 是否有團隊支援和配合。有些同學還在糾結驗證的問題,讓開發配合一些很輕鬆可繞過,可你就是做不到。
好了,這些工具都無法決定自動化專案是否成功,那怎麼選?
如果,你不懂並且也不打算學習JavaScript, 那麼就不用選 Cypress 和 Puppeteer 了。
如果,你只是一個新手,那麼還是穩妥點,先學會Selenium,這是測試的必備技能。
我非常鼓勵那些有一些自動化經驗的同學嘗試學習JavaScript,他會讓你對前端(web)技術有更深的理解,因為你要測試的就是前端(web)應用。就像我可靈活的控制元素的隱藏,修改屬性,更快速的定位到疑難雜症的元素,這完全是因為我做過前端開發。Cypress 或 Puppeteer 就是很好的選擇。
當然,對於我來說,新出的自動化工具,我都會關注和學習一下。從而找到它的亮點和優勢分享給你們。