作者:陳市明/Slipper Feng 摘自:http://www.aygfsteel.com/JPeanut
?????? 現在越來越多的系統不是獨立運行的,會和其他系統進行交互。交互的方式又很多,從傳統的頁面 post 到現在的 jms , ws 等。這個就給測試帶來比較大的難度,特別是互相通訊的系統不屬于同一個公司。測試人員很難在一個辦公室里面進行對項目完整的測試,更何況對方系統有的時候是沒有測試小組的,只有開發人員兼職做測試。
?????? 我這里主要是解決 jms 通訊的單元測試。在我們公司, jms 的傳輸的數據密文傳輸(因為歷史原因被稱為電文)。很多情況下我們都是通過 mock 來模擬隊列和電文的,我這里是通過重新寫 jms 的 mq 和 jms 的 message 來實現的,所有的數據不是通過模擬的東西,而是進入真實的隊列中。
?? 設計思想:
模擬 MQ 和 JMS 的工作原理,編寫一個本地的 MQ 和消息發送接收系統
在內存中直接將替換 aop 容器中的 MQ 、 JMS 替換為本地的 MQ 和我們的消息處理
?????? 具體設計:
?????? 1 )電文接收
圖表 1 新電文系統接收電文原理
新電文接收系統:其他系統如果要發送信息給我們的系統,是先講電文發送給我們的 uecp 平臺,然后 uecp 講電文存放倒 MQ 中,我們項目對從 MQ 中讀出電文,然后根據配據配置調用響應的 Service ,最后,一般情況, service 都是來操作數據庫進行增刪改動作。
新電文平臺的幾大特點:
????????? 電文是異步傳輸
????????? 電文的是有時序的
????????? 一般來說,一個應用只有一個電文接收隊列
圖表 2 新電文接收的單元測試原理
針對新電文系統接收的原理和特點,可以分析出:
????????? 電文必須改成本地的的,單元測試做不到異步電文的自動化回歸
????????? 應用只有一個隊列,我們只需要封裝下 ArrayList 就可以作為隊列了
????????? 為了修改最小話, IBMMQProxy 的實現改成 JunitMessagingServerProxy ,然后,再通過 ioc 注入 junit 的 MQ 和 Junit 的 JMS
????????? 因為在 uecp 中可以看到電文的明文的,所以, Test***Action 發送電文也是明碼,可以直接把 uecp 中的電文 copy 到程序中
? 2)電文發送

圖表3新電文系統發送電文原理
新電文發送系統:我們的系統如果對其他多個系統進行交互,會對幾個隊列分別發送數據,uecp讀取這些隊列將數據準確發送到各個系統中。
圖表4新電文發送的單元測試原理
新電文發送的單元測試原理比較簡單,就是Test×××Action調用會引起發送電文的代碼,等運行完,就去查看隊列里面是不是我們預期發送的電文。通過這樣的方式來進行對JMS的電文系統進行單元測試,可以做到自動化的回歸測試。因為實現電文的測試功能是按照框架的插件協議編寫,在我們的系統中只要項目TC注冊一下電文插件就可以使用其功能,原來已有的測試腳本無需修改。后面還會后續開發關于socket和ws的傳輸方式的測試插件。