Search Google

Thursday, July 30, 2015

淺談Context based Java batch自動測試與JMX

今天要跟大家分享目前自動測試Context based Java batch的做法與使用的工具.  這裡說的Context based Java batch指的是所有batch job都是從Spring context將MBean export後透過JMX呼叫執行.  說到JMX第一個想到的通常就是JConsole.


我們的案例中export出三個MBean, JmxJobListMBean是用來檢視job清單, JmxJobRunner是用來執行job.

透過JmxJobListMBean的listJob可以得到一份job名稱的清單.

知道要執行的job名稱後再呼叫JmxJobRunner的runJob來執行job名稱對應的service.

將job名稱與參數分別填入p1, p2欄位後執行runJob即可取得執行結果

到目前為止我們已經透過JConsole呼叫MBean export出來的功能成功地執行batch job, 但是使用JConsole代表著需要人工執行, 如果不想自己寫code但又想要透過script自動執行驗證時又該怎麼做呢?  這時候我們可以用Jmxterm來達成, 下面是透過Jmxterm執行上述batch job的做法

首先使用下列指令建立與JMX server的連線
java -jar jmxterm-1.0-alpha-4-uber.jar -n -u ${user} -p ${password} -l ${jmx_server_ip}:${jmx_server_port}

接著執行下列指令取得job名稱清單
 run -b bean:name=JmxJobListMBean -d bean listJob

最後執行下列指令將參入帶入job名稱對應的service並執行
 run -b bean:name=JmxJobRunner -d bean runJob ${job名稱} ${參數}

下圖中有上述指令與執行結果


OK, 現在我們可以不用人工的方式透過JMX執行batch job了, 接下來我們要再結合JMeter達成自動執行+驗正執行結果.  我們會用到JMeter的OS process sampler執行上述指令, 待OS process sampler執行結束後再搭配其他sampler (eg. JDBC)或是單純使用post process assertion檢查執行結果是否如預期.


搭配JMeter OS process sampler後比較特別的地方是在原本與JMX server建立連線的指令後面多加了"-i jmxterm.txt", 這個新加的參數表示會把jmxterm.txt檔案內容餵進與JMX server建立的連線中執行.  所以jmxterm.txt的內容就是執行runJob的指令, eg.
run -b bean:name=JmxJobRunner -d bean runJob ${job名稱} ${參數}



No comments: