前陣子在寫 2018 iT 邦幫忙鐵人賽「Ops 的轉職之路 – Puppet 從入門就放棄」的時候看到了許多好文章,其中一個是「Nightwatch101:使用 Nightwatch 實現 End-to-End Testing 」講的是怎麼用 Nightwatch.js 做 e2e 測試,那時候就很想來玩一下自動化測試,直到最近工作有許多大型作業都要花費很多時間進行人工驗證,所以乾脆自己來練習一下怎麼寫自動化測試 …
但是這篇沒有要說怎麼寫 Nightwatch (雖然有一些些心得可以分享),而是要講怎麼在 Docker 跑 Nightwatch 測試 …
記得在更早之前有人問過我怎麼在 Travis CI 上跑 Nightwatch,當時沒有給一個很完整的答案,這次在這篇一起解答!
由於跑 Selenium 會需要啟動 Browser Driver,也需要圖形化功能,所以一般在 Container 都會跑不起來
大概會像這樣的錯誤訊息:
$ npm start
Starting selenium server… started – PID: 4041
[Test] Test Suite
=====================…
Error retrieving a new session from the selenium server
Connection refused! Is selenium server started?
發現 selenium server 起不來 …
這時候就可以使用 xvfb 來模擬 Virtual Window 並且不需要把圖像輸出到螢幕,只跑在背景
說在前面,這篇的解法是參考「Connection Refused Is Selenium Server Started? unknown error #1529」
安裝 xvfb 和 Browser driver
$ export CHROME_BIN=/usr/bin/google-chrome $ export DISPLAY=:99.0 $ sh -e /etc/init.d/xvfb start $ sudo apt update && apt install \ xorg xvfb libappindicator1 fonts-liberation -y $ wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb $ sudo dpkg -i google-chrome*.deb
為了不要在主螢幕輸出,所以把圖像輸出到 99 這個螢幕上,因為根本不會用到 99 …
然後拿到 Travis CI 上跑一樣的指令丟到 before_install
內先跑
before_install: - export CHROME_BIN=/usr/bin/google-chrome - export DISPLAY=:99.0 - sh -e /etc/init.d/xvfb start - sudo apt-get update - sudo apt-get install -y libappindicator1 fonts-liberation - wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb - sudo dpkg -i google-chrome*.deb
如果是 Circle CI 也可以如法炮製!