自動化測試使用Java 與 Python的對決
這篇文章主要說明開發自動化測試程式到底用 Java or Python 比較”好”?
需要考量的因素有哪些? Python與 Java 在自動化測試領域上有何麼優勢?
為什麼用 Java or Python? 身為一個測試架構師要跟大家說清楚講明白。
這篇文章主要不探討程式語言上本身語法的差異,
主要探討開發”自動化測試”這個領域的差異。
筆者用下列幾個方向說明。
Stack Overflow的統計
使用 Java 的還是主流。筆者也注意到,Java 相對於 Python來說,如果再 Stack Overflow上問問題,
回覆 Java 或是附上範例程式碼,大多都是 Java。如果使用 Java,相對比較容易找到類似問題的答案。
GitHub上的使用
Java與Python的使用在伯仲之間。
跨平台的考量
當我們希望自動化測試程式可以在不同的測試平台執行時 Windows, Linux, Mac等,
Java 與 Python 都可以很容易的跨平台執行沒有問題。
產品開發與團隊使用語言
如果我們討論的是 Selenium 自動化測試,
由於 Selenium 自動化測試著重的是 End to End 的測試,
Selenium的自動化測試方式比較接近 Black Box的測試
因此產品開發使用 C, Java, Python都不會影響我們的測試,
因此單純以完成 Selenium自動化測試來說,如果產品是用 Java 開發,
Selenium測試程式可以使用 Python or Java 是沒有太大差異。
有差異的是什麼?
如果產品是 Java 開發,開發團隊或是測試團隊對於 Java語言會有一定的熟悉度,
自然而然選擇 Java 不管是開發 Selenium測試程式,或是開發測試工具、或是白箱測試、或是開發 unitTest等,
對於團隊來說都會比較直覺。所以這個問題會回到團隊主要開發或是熟悉的語言為何?
開發的學習曲線
筆者上課與輔導專案的經驗觀察,許多學員反應 Python學習門檻很低。
Python程式語言語法簡潔,又是直譯式的語言,可以直接透過文字編輯,
如果是第一次開發,許多人原本沒有寫過 Python都可以很快的上手完成自動化測試程式。
自動化測試開發套件
程式語言的本身僅僅是語法上的差異,
最主要的差異在於相關自動化測試開發的框架、套件、工具等的差異。
這部分 Python 和 Java 個有優勢。筆者分為下列幾個方向說明。
- UnitTest 框架
- TDD 與 BDD
- Web 、Mobile 、Windows UI 測試
- Jenkins / CI 的整合
- 測試結果報告
- 說明文件的產生
- 開發環境
- 其他輔助模組
UnitTest
對於 unitTest 框架的支援來說 Java 相對比較”完整”,怎麼說呢?
Java | Python |
我們主要透過 unitTest完成下列工作
- 定義測試個案 (每個 unit 就是一個測試個案)
- 執行測試個案 (區分priority的執行或是群組執行)
- 測試結果報告
Java 透過 TestNG可以完成上述所有工作。
相對來說 Python需要透過 unitTest + noseTests 或是 PyTest才可以完成。
Python的 unitTest本身並沒有提供豐富的測試結果報告 HTML or XML
另外 Java TestNG 還提供
- 多執行緒同步執行
- Data Driven Testing可以將測試資料定義在 XML
以結果來說Java 跟 Python接近相同的,
Java TestNG提供 all in one
但是Python要透過許多其他模組組合而成。
BDD (Behavior Driven Development)
什麼是 BDD呢? 簡單來說就是將測試程式寫成 user story的格式。
除了大家比較容易之道測試了什麼與測試結果,也強迫測試更專注思考客戶要什麼。
缺點:這樣的寫法程式維護相對會比較大,因為每一行的 user story還是要有對應的程式 function。
Java | Python |
|
針對BDD開發來說,Python和 Java 伯仲之間。沒有明顯的差異。
Web UI 測試
Web UI 的測試使用比較廣泛的是 Selenium,除了 Selenium之外還有哪些選擇呢?
Java | Python |
|
|
這個部份就個有優缺點。為了讓網頁自動化測試更加簡化,許多 open source 根據 Selenium另外開發,
Java 的部分筆者推薦 Selenide
Python的部分筆者推薦 spinter
另外, SikuliX 其實是圖形比對的方式寫程式,針對這個部分 Java 就會有比較完整的支援。
SikuliX 提供 JAR ,只要使用該JAR就可以用 Java開發。
http://doc.sikuli.org/faq/030-java-dev.html
Mobile 測試
Appium 的出現之後讓 Java 與 Python都可以容易的作手機上的測試,同時支援 iOS 與 Android。
對於 Java or Python開發者來說是一大福音,因為不用額外學習 Objective C or Android 的開發,就可以完成手機自動化測試。
Windows UI 測試
Windows UI 的自動化測試一直是 Selenium的弱點,
這部分相關的套件相對來說 Python比較成熟,可以選擇的套件也比較多。
Java | Python |
SikuliX |
測試結果報告
Java TestNG內建就會自動產生HTML測試結果報告。
如果要進階有個多的測試結果報告,Java與Python這部分的套件相對都很完整。
Java | Python |
開發環境
看自己熟悉或是喜歡的開發工具。這部分筆者認為沒有太大差異。
當然由於 Python是直譯式的語言,所以相對於 Java 來說有比較 lightweight的開發工具,像是 sublime or PyScripter。
Java | Python |
|
到底選擇哪一套?
情境 | Java or Python |
未來需要用到的測試情境、擴充性模組 | 皆可 |
程式語言好上手? | Python |
產品開發使用 Java | 建議用 Java |
Mobile 測試 | 皆可.建議用 Java 是因為 Android 開發語言為 Java整個團隊開發語言的熟悉度考量。 |
Windows UI 測試 | 建議 Python。因為可以選擇的模組相對成熟。如果選擇 Java,透過 Sikuli圖形比對的方式完成。 |
網路範例程式參考 | 筆者經驗,多半是 Java。Python有,但是很少。 |
Python Vs Java 程式語言語法比較
參考資料
https://github.com/atinfo/awesome-test-automation
請問 自行開發進行自動化測試 與 使用微軟AZURE (或者其他販售的自動化測試工具)進行測試何者比較好?
我使用過PYTHON進行簡單的網站功能測試,沒使用過AZURE。
筆者建議 採用成熟的開源, python 相對有許多成熟的自動化測試模組
看你的測試需求, 商業自動化測試工具昂貴且專業技能會侷限在特定工具上