Java Web 并发单元测试(2)

使用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()结束

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

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-08-18 08:39:16

Java Web 并发单元测试(2)的相关文章

Java Web并发单元测试(1)

大的web项目开发和运行环境都在服务器容器中进行为主,包括调试过程,也都是单例进过Web触发进行测试.在Web项目中设计使用Spring.hibernate.JBPM工作流.ehcache各种框架或组件.这些东西在一起配置好一个有效的.覆盖所有环境的单元测试用例也比较复杂.所有配置好一个可用有效的单元测试环境十分必要.并且面对单元测试对并发要求的不支持,还得加入必要的并发测试组件,满足测试全面系统白盒测试要求. 这里总结几种有效的配置单元测试方式: 1.直接使用Junit4组件,进行简单单元测试

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

大的web项目开发和运行环境都在服务器容器中进行为主,包括调试过程,也都是单例进过Web触发进行测试.在Web项目中设计使用Spring.hibernate.JBPM工作流.ehcache各种框架或组件.这些东西在一起配置好一个有效的.覆盖所有环境的单元测试用例也比较复杂.所有配置好一个可用有效的单元测试环境十分必要.并且面对单元测试对并发要求的不支持,还得加入必要的并发测试组件,满足测试全面系统白盒测试要求. 这里总结几种有效的配置单元测试方式: 1.直接使用Junit4组件,进行简单单元测试

服务器-这些因素如何影响一个java web网站的并发数

问题描述 这些因素如何影响一个java web网站的并发数 服务器tomcat:最大连接数(maxThreads)和(acceptCount) 缓存redis:最大连接数(maxActive).最大空闲连接数(maxIdle) 数据源c3p0:最大连接数(maxPoolSize) 请教大牛解释这些参数和整个web网站并发数的关系

Java Web技术经验总结(二)

该系列的第一篇在此:Java Web技术经验总结一,主要包含我在日常工作中的经验和心得体会(如有不足之处欢迎指出). Maven的使用经验 依赖的scope有test.provided.compile等.test:一般是单元测试场景使用,在编译环境加入classpath,但打包时不会加入,如junit等:provided:表示容器或者JDK已经提供该依赖,打包时不需要打包入war:compile:默认范围,在工程环境的classpath(编译环境)和打包(如果是WAR包,会包含在WAR包中)时候

java web实现增删改查后,应该学习哪些高级技术?

问题描述 java web实现增删改查后,应该学习哪些高级技术? 做了个小项目,实现了curd,想继续往缓存,并发,负载高级深入,请推荐一个详细的高级技术路线?最好有书 解决方案 javaweb深入浅出,不过这个方向研究,主要还是在公司里学的会更实用些 解决方案二: 多线程,Socket,I/O JSP.EL.JSTL,AJAX JavaScript,jQuery JSON,XML EJB(可忽略) 各种框架 ......太多了 解决方案三: 多线程,Socket,I/O JSP.EL.JSTL

jsp 网站开发-JAVA WEB应用,一个操作只能同时有一个用户操作

问题描述 JAVA WEB应用,一个操作只能同时有一个用户操作 一个B/S系统,其中有个调用Linux脚本的操作,执行时间较长,要求系统只能同时有一个用户执行此操作,否则提示其他用户正在执行,请问下该如何实现呢? 解决方案 在該腳本開頭添加"ps -ef | grep 'yourshell'",返回監測結果,看是繼續執行,或是退出交回到java 解决方案二: 这个可以当启动linux脚本时写一个标识位到一个文件内.当其它用户再启动linux脚本时检测这个文件.是否存在即可. 解决方案三

Java Web中的入侵检测及简单实现

web 在Java Web应用程中,特别是网站开发中,我们有时候需要为应用程序增加一个入侵检测程序来防止恶意刷新的功能,防止非法用户不断的往Web应用中重复发送数据.当然,入侵检测可以用很多方法实现,包括软件.硬件防火墙,入侵检测的策略也很多.在这里我们主要介绍的是Java Web应用程序中通过软件的方式实现简单的入侵检测及防御. 该方法的实现原理很简单,就是用户访问Web系统时记录每个用户的信息,然后进行对照,并根据设定的策略(比如:1秒钟刷新页面10次)判断用户是否属于恶意刷新. 我们的入侵

Java Web Framework综述

web Java Web Framework综述0.简介本文介绍Java Web Framework的基本工作原理,和一些常用的开源Web MVC Framework(Struts, Web Work, Tapestry, Echo, JSF, Maverick, Spring MVC, Turbine, Cocoon, Barracuda). Web开发的最重要的基本功是HTTP:Java Web开发的最重要的基本功是Servlet Specification.HTTP和Servlet Spe

Java Web前端的高性能

引言 在前端优化的第一部分中,主要讲解了对静态资源的一些优化措施,包括图片压缩.CSS Sprites 技术. GZIP 压缩等.这一部分,本文将讲解前端优化里重要的 Flush 机制.动静分离.HTTP 持久连接.HTTP 协议灵活应用. CDN 等.结合这些技术或思想,相信会使 Java Web 应用程序的性能更上一层楼. Flush 机制的使用 实际上 在 Web 技术中,Flush 机制并不新鲜,它的思想是无需等到网页内容全部加载完毕,一次性写回客户端,而是可以部分逐 次的返回.如果网页