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

圖表3新電文系統(tǒng)發(fā)送電文原理
新電文發(fā)送系統(tǒng):我們的系統(tǒng)如果對(duì)其他多個(gè)系統(tǒng)進(jìn)行交互,會(huì)對(duì)幾個(gè)隊(duì)列分別發(fā)送數(shù)據(jù),uecp讀取這些隊(duì)列將數(shù)據(jù)準(zhǔn)確發(fā)送到各個(gè)系統(tǒng)中。

圖表4新電文發(fā)送的單元測(cè)試原理
新電文發(fā)送的單元測(cè)試原理比較簡(jiǎn)單,就是Test×××Action調(diào)用會(huì)引起發(fā)送電文的代碼,等運(yùn)行完,就去查看隊(duì)列里面是不是我們預(yù)期發(fā)送的電文。
通過(guò)這樣的方式來(lái)進(jìn)行對(duì)JMS的電文系統(tǒng)進(jìn)行單元測(cè)試,可以做到自動(dòng)化的回歸測(cè)試。因?yàn)閷?shí)現(xiàn)電文的測(cè)試功能是按照框架的插件協(xié)議編寫,在我們的系統(tǒng)中只要項(xiàng)目TC注冊(cè)一下電文插件就可以使用其功能,原來(lái)已有的測(cè)試腳本無(wú)需修改。后面還會(huì)后續(xù)開(kāi)發(fā)關(guān)于socket和ws的傳輸方式的測(cè)試插件。