Test Load Balancer 測試均衡負(fù)載
什么是Test Load Balancer ?
Test Load Balancer 測試分發(fā)工具,它能把所有的測試按照某個策略(數(shù)量、時間)均衡分布到不同的計(jì)算機(jī)上運(yùn)行。
問題域?
一個典型的問題,當(dāng)軟件開發(fā)團(tuán)隊(duì)在做CI(持續(xù)集成)時,必須讓CI的構(gòu)建時間保持在一個合理的時間,比如10分鐘為一個上線,但是由于需求的不斷增多測試的數(shù)量也隨之增加,花費(fèi)在運(yùn)行這些測試的時間越來越多,影響到了整個交付團(tuán)隊(duì)的進(jìn)度。為了盡可能的縮短交付周期時間,減少測試的運(yùn)行時間,一個行之有效的方法就是讓測試并行執(zhí)行。
Test Load Balancer 如何工作 ?
TLB(Test Load Balancer)有兩個比較重要的概念:
server:存儲,查詢測試數(shù)據(jù)(測試時間、測試結(jié)果等)
balancer:測試分支,指定測試套件,設(shè)置server的url等
Balancer與CI或者與某種測試框架一起工作,Server只是一個數(shù)據(jù)交互中心,Balancer需要測試的數(shù)據(jù)需要和Server通信。
如何使用?
TLB必須結(jié)合構(gòu)建工具使用,我們以TLB自帶的例子為例。
examples/ant_junit
這個例子使用shell寫的運(yùn)行腳本,我在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 ..\examples\ant_junit } Function RunTest() { $env:TLB_DATA_DIR='.\demo_tlb_store' $env:TLB_OUT_FILE-".\tlb_balancer.out" $env:TLB_ERR_FILE='.\tlb_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 ..\examples\ant_junit } Function Runner() { StartServer RunTest StopServer } Runner |
TLB所有的設(shè)置依賴環(huán)境變量, TLB_TOTAL_PARTITIONS指定所有的測試分成多少份,TLB_BASE_URL指定TLB Server的地址,TLB_PARTITION_NUMBER當(dāng)前node執(zhí)行那一份測試,TLB_BALANCER_PORT指定node的端口。
StartServer啟動TLB服務(wù)器,會開啟一個cmd窗口,關(guān)閉的時候調(diào)用腳本關(guān)閉這個窗口就可以關(guān)閉TLB 服務(wù)器。
RunTest 運(yùn)行測試,在每個node都必須配置TLB_PARTITION_NUMBER和TLB_BALANCER_PORT.
StopServer 關(guān)閉TLB Server。
Runner 腳本入口函數(shù)。
這里的腳本是把TLB Server 和 Balancer寫在一起的,只為show一下TLB如何使用,如果要在不同node運(yùn)行,必須把它分成server和balancer兩部分腳本。server只需要 StartServer 和StopServer函數(shù),而node只需要RunTest函數(shù),去掉for循環(huán),指定具體的TLB_PATTITION_NUMBER和PORT就可以了。
TLB不足?
TLB雖然可以實(shí)現(xiàn)測試分發(fā),但是如果不結(jié)合CI工具的話,就必須手動的去運(yùn)行每個node,而且在server也不能監(jiān)控和收集每個node的運(yùn)行結(jié)果。
posted on 2012-06-27 09:48 順其自然EVO 閱讀(323) 評論(0) 編輯 收藏 所屬分類: 性能測試