作者:陳市明/Slipper Feng
摘自:http://www.tkk7.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的傳輸方式的測試插件。