论坛首页 综合技术论坛

基于teamcity的持续集成实践(集成测试)

浏览 2034 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-07-23   最后修改:2009-07-23

我在此所说的集成测试其实就是项目对外的接口测试,包括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 +
                "&regInfo="+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的同志聊过,他们有些测试其实就是这种测试方式,所以会不会有越俎代庖之嫌?

 

其实困扰我的最大问题是如何做数据清理,因为这种情况下产生的数据都是数据库里面的真实数据,而我们的数据库有些表是不能进行简单的删除的。所以这些集成测试都是每次重复数据准备,不进行数据的清理。

 

还有一个疑问是,有没有必要检查集成测试过程中的一些状态?

 

疑问太多,暂且留在这儿吧。

论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics