作者:陈市明/Slipper Feng
摘自:http://www.blogjava.net/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的传输方式的测试插件。