我在此所说的集成测试其实就是项目对外的接口测试,包括http接口、ejb接口和web service接口。
因为没有人指导你如何进行持续集成、如何做集成测试,一切都是摸着石头过河。看过一些文章关于集成测试的,譬如有人用selenium,但是我觉得不太适合我现在的项目,因为我们的产品只是对外提供接口,具体的ui实现由另外的项目组负责。因为不熟悉,所以我对我现在的做法都持有怀疑,如果您有更好的做法,请您一定赐教。
前面的ant脚本片断已经描述,集成测试是在整个环境部署好,weblogic启动之后进行的,因此我一直觉得这样的自动化测试才是最直接的,只要代码路径覆盖的足够全,将是非常有用的测试手段。
其实,集成测试、功能测试、端到端测试,一样还是不同,我也没理清,只是觉得都差不多,所以暂且叫集成测试吧。
这里的做法其实很简单,就是模拟client发起接口测试,检查最终状态是否成功,在这里我都是检查的数据库。
所有的集成测试都是基于Junit。
首先http接口,通过httpclient发起,然后检查db数据。
public void testSelfRegForUnmatch() throws Exception{
regURL = "http://"+serverIP+":"+serverPort+"/test/Processor?msisdn="+ msisdn2 +
"®Info="+imei1+"/TCL/e787/V1";
sendRequest(regURL,10);
DBService service = getDBService(1);
DeviceInstance device = service.getLastPairByImei(imei1);
assertNotNull(device);
assertEquals(msisdn2, device.getMsisdn());
assertEquals("210", device.getProvID());
assertEquals("21", device.getCityID());
}
protected void sendRequest(String rurl,int waitSeconds) throws Exception{
DefaultHttpClient client = new DefaultHttpClient();
HttpGet httpget = new HttpGet(rurl);
HttpResponse response = client.execute(httpget);
client.getConnectionManager().shutdown();
Thread.sleep(waitSeconds*1000);
}
然后ejb接口,通过模拟一个ejb client ,发起接口测试,检查数据库数据状态。
public void testDMConfig() throws Exception{
String taskID = this.getDeviceCareService().configDevice(msisdn2);
assertNotNull(taskID);
Thread.sleep(5*1000);//等待接口运行完毕,这种方式也许改成定时检查数据库会更好
DBService service = getDBService(1);
FinishedTask task = service.getFinishedTask(taskID);
assertNotNull(task);
assertEquals("200", task.getStatus());
}
protected DeviceCareService getDeviceCareService(){
DeviceCareService service = null;
try{
Object obj = getContext().lookup("ejb/DeviceCareService");
DeviceCareServiceHome home = (DeviceCareServiceHome) PortableRemoteObject.narrow(obj,DeviceCareServiceHome.class);
service = home.create();
}catch(Exception e){
e.printStackTrace();
}
return service;
}
最后是web service接口,其实跟上面的原理都是一样的。
我的疑问是这种集成测试是正规军的做法吗?是不是有更好的方式来做。
也跟QA的同志聊过,他们有些测试其实就是这种测试方式,所以会不会有越俎代庖之嫌?
其实困扰我的最大问题是如何做数据清理,因为这种情况下产生的数据都是数据库里面的真实数据,而我们的数据库有些表是不能进行简单的删除的。所以这些集成测试都是每次重复数据准备,不进行数据的清理。
还有一个疑问是,有没有必要检查集成测试过程中的一些状态?
疑问太多,暂且留在这儿吧。