Java Web 并发单元测试(2)

原创 2013年12月04日 15:47:41

 使用GroboUtils进行简单并发单元测试,实现测试和监控和单个线程执行的控制,这里展示简单案例的测试过程:

1、建立要测试的线程TestRunnable1

/**
 * 
 */
package com.dtsz.groboTest;

import net.sourceforge.groboutils.junit.v1.TestRunnable;

/**
 * @author xiaoli
 *
 */
public class TestRunnable1 extends TestRunnable {

	private int i;
	
	private long sleepTime;
	
	public TestRunnable1(int i ,long sleepTime) {
		super();
		this.i = i;
		this.sleepTime = sleepTime;
	}



	/* (non-Javadoc)
	 * @see net.sourceforge.groboutils.junit.v1.TestRunnable#runTest()
	 */
	@Override
	public void runTest() throws Throwable {
		// TODO Auto-generated method stub
		System.out.println(i+"线程正在跑…………");
		this.delay(sleepTime);
		System.out.println(i+"线程正要走完…………");
	}

}

2、建立监控的线程,每个监控对应一个线程,也可以一个监控监控整个测试过程,需要传入监控的线程对象。

/**
 * 
 */
package com.dtsz.groboTest;

import net.sourceforge.groboutils.junit.v1.TestMonitorRunnable;
import net.sourceforge.groboutils.junit.v1.TestRunnable;

/**
 * @author xiaoli
 *
 */
public class TestMonitorRunnable1 extends TestMonitorRunnable {

	
	private int i;
	
	private TestRunnable t;
	
	public TestMonitorRunnable1(int i,TestRunnable t) {
		super();
		this.i = i;
		this.t = t;
	}
	/* (non-Javadoc)
	 * @see net.sourceforge.groboutils.junit.v1.TestMonitorRunnable#runMonitor()
	 */
	@Override
	public void runMonitor() throws Throwable {
		System.out.println(i+"线程监控正在跑…………状态:"+t.isDone());
	}

}

3、建立主测试类进行并发单元测试,这里只有简单数据打印,具体情况传入数据进行测试,比如Web项目中需要在setUp()中部署好相关的环境等:

/**
 * 
 */
package com.dtsz.groboTest;

import junit.framework.TestCase;
import net.sourceforge.groboutils.junit.v1.MultiThreadedTestRunner;
import net.sourceforge.groboutils.junit.v1.TestMonitorRunnable;
import net.sourceforge.groboutils.junit.v1.TestRunnable;

import org.junit.Test;

/**
 * @author xiaoli
 *
 */
public class MainTest1 extends TestCase{

	@Override
	protected void setUp() throws Exception {
		// TODO Auto-generated method stub
		super.setUp();
		System.out.println("setUp()数据准备"); 
	}

	@Override
	protected void tearDown() throws Exception {
		// TODO Auto-generated method stub
		super.tearDown();
		System.out.println("tearDown()结束"); 
	}
	
	@Test
	public void test1() throws Throwable {
		
		int count = 2;
		
		long time = 0;
		
		TestRunnable[] tr = new TestRunnable[count];
		TestMonitorRunnable [] trm = new TestMonitorRunnable[count];
		for(int i = 0;i<count;i++) {
			TestRunnable1 t = new TestRunnable1(i,(i+1)*time);
			TestMonitorRunnable1 m = new TestMonitorRunnable1(i,t);
			tr[i] = t;
			trm[i] = m;
		}
		
		MultiThreadedTestRunner mttr = new MultiThreadedTestRunner(tr,trm);
		
		//没有在该时间内完成的线程将会被杀掉
		mttr.runTestRunnables();
	}

	
	
}

测试结果:监控器每隔几个毫秒会进行实时运行,知道整个单元测试结束:

setUp()数据准备
1线程监控正在跑…………状态:false
0线程监控正在跑…………状态:false
0线程正在跑…………
1线程正在跑…………
1线程监控正在跑…………状态:false
0线程监控正在跑…………状态:false
0线程正要走完…………
1线程正要走完…………
1线程监控正在跑…………状态:false
0线程监控正在跑…………状态:false
1线程监控正在跑…………状态:false
0线程监控正在跑…………状态:false
1线程监控正在跑…………状态:false
0线程监控正在跑…………状态:false
1线程监控正在跑…………状态:false
0线程监控正在跑…………状态:true
1线程监控正在跑…………状态:true
tearDown()结束


具体功能可以由这个引申出来。

使用 Jmeter 对 Java web 执行负载(压力)测试

最近一个月不是写文档就是敲js,这两天难得有个压测,总算跟java挂钩了。先说说压力测试,这绝对是一件很刺激的事情,玩心跳,试想一下,眼睛盯着服务器的性能分析数据,一边在不断地增大负载,心扑通扑通的跳...

Java Web并发单元测试摘记(1)

大的web项目开发和运行环境都在服务器容器中进行为主,包括调试过程,也都是单例进过Web触发进行测试。在Web项目中设计使用Spring、hibernate、JBPM工作流、ehcache各种框架或组...

Java Web并发单元测试摘记(1)

大的web项目开发和运行环境都在服务器容器中进行为主,包括调试过程,也都是单例进过Web触发进行测试。在Web项目中设计使用Spring、hibernate、JBPM工作流、ehcache各种框架或组...

java并发测试代码

import java.util.concurrent.CyclicBarrier; import java.util.concurrent.ExecutorService; import java....

Java Web Application 自架构 二 单元测试模块

做完基本的web环境 配置和Spring配置,紧接就要填设计entity模型并编写它们在数据层和业务层了吧?先不着急,有很多Web通用的东西的需要准备,比如说,最基本东东,单元测试。好的,今天就让我的...

5、struts2访问Servlet API及web应用单元测试、结果类型及项目开发模式

在struts框架下,如何访问servlet 通过ServletActionContext类,其父类ActionContext 在Action的execute方法中调用session: publ...
  • kaoa000
  • kaoa000
  • 2013年05月22日 20:23
  • 1745

struts2访问servlet API、Web应用单元测试、prepare接口

struts2的应用程序本身也属于web应用程序,但是我们却鲜有接触到servlet API机会,是因为struts已经将这些和servlet交互的东西封装起来,使得用户在调用时候可以更加清晰明了的使...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java Web 并发单元测试(2)
举报原因:
原因补充:

(最多只允许输入30个字)