今天要跟大家分享目前自動測試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:
Post a Comment