星期三, 8月 02, 2017

Node.js + Selenium + Headless Browser

接續這篇的話題,既然準備好了 System Under Test SUT,那就來自動化測試吧!這次為了遷就 Linux 可能沒有 UI,先把環境需求降到最低:
  • Linux
  • Docker (Optional)
  • Node.js
  • Internet Access
別忘了 Node.js 支援跨平台,Linux 也只代表作業系統,不是非君不嫁。正好上一篇的結果可以拿來加工再利用,要補三個東西:
  • 基於 Node.js 的測試程式-checkHello.js
  • 瀏覽器
  • selenium-webdriver (for Node.js)
checkHello.js 也是愈簡單愈好,第一版只有這樣:

const assert = require('assert');
var webdriver = require('selenium-webdriver'),
    By = webdriver.By;
var driver = new webdriver.Builder()
    .forBrowser('phantomjs')
    .build();
driver.get('http://172.17.0.2:8080');
var byH1 = By.css('h1');
var h1 = driver.findElement(byH1);
var h1Text = h1.getText();
var h1Handler = function (text) {
    assert.equal(text, "Hello World!");
}
h1Text.then(h1Handler);
driver.quit();

應該很好猜在測什麼?就是比對 <h1>Hello World!</h1> 而已。瀏覽器也先挑簡單的 PhantomJS,一是不需依賴圖形介面,一是大部份瀏覽器還要再搭配驅動程式,比較麻煩。安裝指令其實源出於,改編如下:
  • docker exec -it myNode sh
  • curl -L https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2 | tar -xj --strip-components=2 -C /usr/local/bin phantomjs-2.1.1-linux-x86_64/bin
  • exit
其中 PhantomJS 下載目錄來自這裡,/usr/local/bin 是環境變數 PATH 所指向的路徑之一。本段前後這些提到指令的部份,都是針對上一篇名為 myNode 的 docker container,如果不是,例如只在本機,可以忽略灰底的部份。至於 selenium-webdriver 安裝,指令是:
  • docker exec -it myNode npm install selenium-webdriver
萬事俱備,執行測試的指令是:
  • docker exec -it myNode node checkHello.js
順利的話,會讓人誤以為沒反應?可以故意弄錯一些東西來驗證,例如換個 IP,換個 port,關掉 Web Server,Hello World! 改個大小寫什麼的。

沒有留言:

張貼留言