星期三, 8月 09, 2017

VirtualBox can't add Host-only network interface?

在 Linux 新裝的 VirtualBox 遭遇如主旨與下圖:


解決的指令:
  • vboxmanage hostonlyif create

星期三, 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! 改個大小寫什麼的。

星期二, 8月 01, 2017

Simplest Node.js Web Server (in Docker or not)

這篇實在是一年多前就不該偷懶好好寫的(與這篇有關),在參考了這篇這篇之後,覺得以下的內容還算能用:

var http = require('http');
var port = 8080;
http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.end('<html><head></head><body><h1>Hello World!</h1></body></html>');
}).listen(port);
console.log('Server running at http://localhost:' + port);

要能執行的前提僅需安裝 Node.js,因為 http 是內建的,也不需要再補 npm install http。假設存檔名為 helloServer.js,執行時只要切到該目錄,在命令列下 node helloServer.js,之後就可用瀏覽器訪問 http://localhost:8080 看到這個超陽春網頁。

想更乾淨一點,不要直接在本機安裝 Node.js?用 Docker 再適合不過了,而且官方支援就提到如何直接執行單一程式,我稍做修改的命令與簡略說明:
  • docker run -it --rm --name myNode -v "$PWD":/usr/src/app -w /usr/src/app node:latest node helloServer.js
  • 命名為 myNode,可以修改。
  • /usr/src/app 是 container 裡面的目錄,對應外面的現行目錄,也是裡面的工作目錄。
  • image 名稱 node:latest,因為這個簡單範例不挑版本。
  • 最後的 node helloServer.js 就是下到 container 裡面去執行的命令。
但這次瀏覽器看不到網頁了?別急,先另開一個 Terminal 下指令查 container 用哪個 IP:
  • docker inspect myNode | grep IPAddress
瀏覽器在 docker 外面,所以 localhost 要換成這樣查來的 IP 才會通。


Jenkins current users

如何能得知 Jenkins 目前有哪些使用者登入?只要安裝了 Monitoring Plugin,管理者就可以在 Manage Jenkins -> Monitoring of Jenkins master -> System information -> View http sessions 看到多個 session id,點進去就有 Username 了。

星期六, 7月 29, 2017

Mac as a Selenium Node

過去在 Windows / Linux 上有不少 Selenium Node 的經歷,都不像最近為了 Safari 加開 Mac 如此挫折,總是幾分鐘到幾小時之後會斷線,還沒撐過一天的。經歷了幾個階段:

  • 懷疑其他同事「不小心」關了我的 Terminal,時常檢查,偶有一兩次真的,但大部份並不是。
  • 不要隔太久都沒用到這些節點,至少一小時一次(但這對嗎?以前都是一天一次,其他作業系統都沒這問題)。
  • Mac 所在網段不同,與 Selenium Grid 隔了 VPN,想說最後一招就是搬家再試。
  • 另開帳號與其他人的使用介面隔絕,還是會斷,懷疑是機器太忙?renice -10 有明顯改善,但不能根本解決。
  • 用 caffeinate 防止睡眠(參考這篇文章),終於先撐過一天了,繼續觀察。
  • 用 NodeJS + Selenium + Chrome 監看 Selenium Grid Dashboard。

星期三, 7月 26, 2017

Microsoft Remote Desktop + VNC on Linux

Remmina 太強了,以前在 Mac 上分兩邊管 Windows / Linux 的遠端,現在整合在一起了。

Customized Notebook

為了追求更高效能的筆電,選擇 System76,不過代價有點高:
  • Galago Pro 原價 USD $999,等到美國國慶特價 USD $899
  • 加了一堆配備 USD $999
  • 運費二選一,都是 UPS,看不出差別,所以挑稍微便宜的 USD $106.5
  • 以上小計 USD $1,904.5,折合 NTD $58,038
  • 刷了兩張較優惠的 JCB 都不過,錯誤訊息也莫名其妙,最後只好用國泰世華信用卡,國外交易手續費 NTD $871
  • 貨到台灣,UPS 通知要 BSMI NCC?急忙寫信問原廠要無線網卡的規格,回覆只有製造商與型號,自己上 IBM 網站找了半天,總算會填申請書了。委託報關 NTD $1,400 可轉帳,加值營業稅 NTD $2,762 必須取貨面交,所以也不能委託管理員代收了,只好親自跑一趟。

總計是 NTD $63,071