TestLoadBalancer測試均衡負載

玄學醬發表於2017-07-10

什麼是Test Load Balancer ?

  Test Load Balancer 測試分發工具,它能把所有的測試按照某個策略(數量、時間)均衡分佈到不同的計算機上執行。

  問題域?

  一個典型的問題,當軟體開發團隊在做CI(持續整合)時,必須讓CI的構建時間保持在一個合理的時間,比如10分鐘為一個上線,但是由於需求的不斷增多測試的數量也隨之增加,花費在執行這些測試的時間越來越多,影響到了整個交付團隊的進度。為了儘可能的縮短交付週期時間,減少測試的執行時間,一個行之有效的方法就是讓測試並行執行。

  Test Load Balancer 如何工作 ?

  TLB(Test Load Balancer)有兩個比較重要的概念:

  server:儲存,查詢測試資料(測試時間、測試結果等)

  balancer:測試分支,指定測試套件,設定server的url等

  Balancer與CI或者與某種測試框架一起工作,Server只是一個資料互動中心,Balancer需要測試的資料需要和Server通訊。

  如何使用?

  TLB必須結合構建工具使用,我們以TLB自帶的例子為例。

  examples/ant_junit

  這個例子使用shell寫的執行指令碼,我在windows上做的,先把它的指令碼改改。

  把run_balancer.sh和上級目錄的recipe.sh在powershell指令碼里面合併。

$env:TLB_JOB_NAME=`ant_junit`
$env:TLB_TOTAL_PARTITIONS=`2`
$env:TEST_TASK=`ant test.balanced`

Function StartServer() {
    cd ….server
    .server.bat start
    cd ..examplesant_junit
}

Function RunTest() {
    $env:TLB_DATA_DIR=`.demo_tlb_store`
    $env:TLB_OUT_FILE-“. lb_balancer.out”
    $env:TLB_ERR_FILE=`. lb_balancer.err`
    $env:TLB_BASE_URL=`http://localhost:7019`
    $env:TLB_JOB_VERSION=`1.0.0`

    for($i=1; $i -le $env:TLB_TOTAL_PARTITIONS; $i++) {
        $env:TLB_PARTITION_NUMBER=`$i`
        $env:TLB_BALANCER_PORT=`300$i`
        iex $TEST_TASK
    }
}

Function StopServer() {
    cd ….server
    .server.bat stop
    cd ..examplesant_junit
}

Function Runner() {
    StartServer
    RunTest
    StopServer
}

Runner

  TLB所有的設定依賴環境變數, TLB_TOTAL_PARTITIONS指定所有的測試分成多少份,TLB_BASE_URL指定TLB Server的地址,TLB_PARTITION_NUMBER當前node執行那一份測試,TLB_BALANCER_PORT指定node的埠。

  StartServer啟動TLB伺服器,會開啟一個cmd視窗,關閉的時候呼叫指令碼關閉這個視窗就可以關閉TLB 伺服器。

  RunTest 執行測試,在每個node都必須配置TLB_PARTITION_NUMBER和TLB_BALANCER_PORT.

  StopServer 關閉TLB Server。

  Runner 指令碼入口函式。

  這裡的指令碼是把TLB Server 和 Balancer寫在一起的,只為show一下TLB如何使用,如果要在不同node執行,必須把它分成server和balancer兩部分指令碼。server只需要 StartServer 和StopServer函式,而node只需要RunTest函式,去掉for迴圈,指定具體的TLB_PATTITION_NUMBER和PORT就可以了。

  TLB不足?

  TLB雖然可以實現測試分發,但是如果不結合CI工具的話,就必須手動的去執行每個node,而且在server也不能監控和收集每個node的執行結果。








====================================分割線================================



最新內容請見作者的GitHub頁:http://qaseven.github.io/


相關文章