網站自動化測試技術的選擇與考量

 網站自動化測試技術的選擇與考量

這篇文章主要探討網站自動化技術有哪些? Selenium, PhantomJS, CasperJS….等

這些技術的差異與筆者的建議。網站自動化的領域中,由於網站技術的快速發展,延伸許多網站自動化技術。

這些自動化技術都有共通性就是可以對於網頁進行操作達到 End to End testing 的目的。讓我們看看這些技術有什麼不同?

 

網站自動化一定要知道那麼多技術嗎?

這篇文章雖然廣泛的討論各種網頁自動化技術,但是對於一開始進入自動化測試領域的初學來說,

看到這樣多的技術可能會有些迷網。筆者建議從自己熟悉跟容易上手的工具開始。任何工具都可以!

如果都沒有熟悉的工具的話,筆者建議針使用 FireFox + FireFox Addon (Selenium IDE),這樣就可以不用寫程式完成自動化測試!

慢慢熟悉自動化測試的工具與流程之後,再開始做其他延伸。

每個工具都是為了要解決特定的問題。所以不要為了使用工具技術而使用。

必須要回顧檢視解決什麼問題? 由需要解決的問題出發,再去找相對應的工具技術。

 

Selenium WebDriver

Selenium WebDriver 解決了一個許多工具都無法解決的問題。就是跨平台、跨 Browser、跨語言!

其他工具最多是跨平台或是跨Browser的支援,但是無法做到跨語言的支援。

由於跨語言的支援讓 Selenium WebDriver的延伸性十分的廣泛,許多其他網站自動化工具技術也都以 Selenium WebDriver 為基礎建置。

PhantomJS

PhantomJS 的出現主要是提供 Web Developer 有一個可以利用 JavaScript 直接操作網頁的方法。

為什麼要這樣呢? 因為對於Web Developer 來說 JavaScript 是最熟悉的語言與環境,

因此透過 JavaScript 作網頁的自動化是比較方面,延伸的工具有 PhantomJS, CasperJS, ZombieJS等。

另外,PhantomJS解決一個 Selenium WebDriver的問題。

Selenium WebDriver執行時,需要啟動瀏覽器,啟動瀏覽器的測試需要耗費很多時間,

而且自動化測試的穩定度會受到瀏覽器畫面呈現的影響而失敗。

因此,有沒有什麼方式是可以網站執行自動化測試而不需要啟動瀏覽器呢? PhantomJS就是答案。

PhantomJS可以協助 Selenium WebDriver 在不需要啟動瀏覽器的狀況下執行測試程式。

假設如果目前已經有完成的自動化測試程式 Selenium WebDriver + python,那麼要執行 PhantomJS僅需要改一行程式。

 

Python 範例

driver = webdriver.PhantomJS()

 

Java 範例

System.setProperty(phantom.binary.path, c:\\Path-drivers\\phantomjs.exe);

WebDriver driver = new PhantomJSDriver();

可參考這篇文章 如何減少自動化測試執行時間50%

 

CasperJS

那麼 CasperJS又是什麼?

CasperJS 是利用PhantomJS 實作出來的網站測試。CasperJS 提供assertion 可以驗證網頁元件,提供測試報告結果等。

CasperJS 讓開發者可以使用 jQuery or JavaScript 撰寫測試程式。

Google Testing 範例

[pastacode lang=”javascript” message=”” highlight=”” provider=”manual”]

// googletesting.js
casper.test.begin('Google search retrieves 10 or more results', 5, function suite(test) {
    casper.start("http://www.google.fr/", function() {
        test.assertTitle("Google", "google homepage title is the one expected");
        test.assertExists('form[action="/search"]', "main form is found");
        this.fill('form[action="/search"]', {
            q: "casperjs"
        }, true);
    });

    casper.then(function() {
        test.assertTitle("casperjs - Recherche Google", "google title is ok");
        test.assertUrlMatch(/q=casperjs/, "search term has been submitted");
        test.assertEval(function() {
            return __utils__.findAll("h3.r").length >= 10;
        }, "google search for \"casperjs\" retrieves 10 or more results");
    });

    casper.run(function() {
        test.done();
    });
});

[/pastacode]

 

ZombieJS

ZombieJS 跟CasperJS/PhantomJS一樣都是不需要啟動瀏覽器就可以執行網站測試 (headless Browser testing)

不同的是 ZombieJS 是基於 Node.JS 的JavaScript Engine 實作

CasperJS/PhantomJS採用的是自己的 QTWebKit Engine

 

GEB

http://www.gebish.org/

這是基於 Selenium WebDriver的自動化測試架構,特別的是它提供  Groovy language.

這個新的測試架構要解決什麼問題呢? 還是一樣,它讓寫程式更容易。

 

NightWatch

http://nightwatchjs.org/

跟ZombieJS 一樣,這也是根據 Node延伸的自動化測試架構。

 選哪一個?

筆者建議從開發環境或是熟悉的開始。

如果網站開發有使用 Node,那麼可以使用 NightWatch 或是 ZombieJS 。優點是不需要額外學習程式語言。根據 JavaScript 或是jQuery 就可以針對網頁操作。

如果開發團隊已經有使用 Selenium WebDriver 做自動化測試,那麼可以考慮加入 phtantomJS ,如此一來自動化測試就可以不需要啟動瀏覽器執行。

如果使用了 Selenium 又使用了 PhantomJS,可以再考慮加入 CasperJS 讓自動化測試可以簡單的透過 JavaScript 而做到 unitTest 、驗證、testing report等。

如果這一切都太複雜,從最簡單的開始。 FireFox + FireFox Selenium IDE ,不用寫程式就可以完成自動化測試!

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *