- Assume Selenium Hub listen on docker host 172.17.0.1:4444
- docker (refer this)
- docker-compose (refer this)
- docker-compose.yml (updated from here)
- version: "3"
- services:
- chrome:
- image: selenium/node-chrome:3.141.59-neon
- volumes:
- - /dev/shm:/dev/shm
- environment:
- - HUB_HOST=172.17.0.1
- - HUB_PORT=4444
- - REMOTE_HOST=http://<Host_or_IP>:6666
- - NODE_MAX_INSTANCES=5
- ports:
- - "6666:5555"
- firefox:
- image: selenium/node-firefox:3.141.59-neon
- volumes:
- - /dev/shm:/dev/shm
- environment:
- - HUB_HOST=172.17.0.1
- - HUB_PORT=4444
- - REMOTE_HOST=http://<Host_or_IP>:7777
- - NODE_MAX_INSTANCES=5
- ports:
- - "7777:5555"
星期二, 5月 14, 2019
New Selenium Node (Chrome / Firefox) on CentOS without GUI
星期三, 4月 24, 2019
Quick Start: Selenium Grid
How can we create a Selenium Grid Environment quickly? If you have docker-compose already, just refer this, save as docker-compose.yml, and run "docker-compose up -d" to start it. That's all.
How to prove it worked? we need:
How to prove it worked? we need:
- selenese-runner.jar download from here
- check your docker host ip address like "ip addr | grep docker0"
- any workable side file
- docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp openjdk java -jar selenese-runner.jar --driver remote --remote-url http://<DOCKER_HOST_IP>:4444/wd/hub --remote-browser <BROWSER> <WORKABLE.side>
星期五, 3月 29, 2019
selenese runner can't nesting while end loop
Consider this code snippet:
- execute script | return 2; | i
- while | ${i} > 0 |
- execute script | return 3; | j
- while | ${j} > 0 |
- echo | i: ${i}, j: ${j} |
- execute script | return ${j} - 1; | j
- end | |
- execute script | return ${i} - 1; | i
- end | |
- i: 2, j: 3
- i: 2, j: 2
- i: 2, j: 1
- i: 1, j: 3
- i: 1, j: 2
- i: 1, j: 1
- i: 2, j: 3
- i: 2, j: 2
- i: 2, j: 1
- i: 1, j: 3
- execute script | return 2; | i
- do | |
- execute script | return 3; | j
- do | |
- echo | i: ${i}, j: ${j} |
- execute script | return ${j} - 1; | j
- repeat if | ${j} > 0 |
- execute script | return ${i} - 1; | i
- repeat if | ${i} > 0 |
[2019/03/30]
This bug was fixed at version 3.22.0, see here.
星期四, 10月 19, 2017
Confirm your Jenkins Deploy
以我大多接觸的都是 Web Application 而言,可概分
- 淺層-網路通暢
- 中層-版本正確
- 深層-功能正確
淺層在 Jenkins 有個好用的 Http Request Plugin,只要輸入任一頁的 URL,這個外掛就可以試著要求,並檢查回傳的 Http Status Code 是否在預期內,通常是 2xx 或 3xx。
最近有個特例是要檢查部署的結果,但對面並不接受 http(s) 協定,在 Linux 上的 Jenkins Slave 可以用 nc -vz <IP> <Port>。
中層的話,如果部署的 Web Application 除了服務人,也服務機器(Web API),建議就考慮增加一個供外界查詢版本的 Web API,Jenkins 可透過核對 curl <Web API> 確認部署的狀況;如果是只服務人又不想改得多,可以挑一個靜態網頁的角落放版號,用 Selenium BDD 簡單的腳本確認。
深層的話,要準備 Selenium BDD 比較複雜的腳本,錄製工具似乎有些變化,所幸直接用 Node.js 來寫也不太困難。
[2017/10/23 補充]
有些 Linux 版本上 nc 似乎相容性不是很好,可用 nmap <IP> -p<Port> | grep open 試試能否取代?
[2017/10/23 補充]
有些 Linux 版本上 nc 似乎相容性不是很好,可用 nmap <IP> -p<Port> | grep open 試試能否取代?
星期三, 8月 02, 2017
Node.js + Selenium + Headless Browser
接續這篇的話題,既然準備好了 System Under Test SUT,那就來自動化測試吧!這次為了遷就 Linux 可能沒有 UI,先把環境需求降到最低:
應該很好猜在測什麼?就是比對 <h1>Hello World!</h1> 而已。瀏覽器也先挑簡單的 PhantomJS,一是不需依賴圖形介面,一是大部份瀏覽器還要再搭配驅動程式,比較麻煩。安裝指令其實源出於此,改編如下:
- Linux
- Docker (Optional)
- Node.js
- Internet Access
- 基於 Node.js 的測試程式-checkHello.js
- 瀏覽器
- selenium-webdriver (for Node.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! 改個大小寫什麼的。
訂閱:
文章 (Atom)