单元性能测试之使用JUnitPerf测试多线程并发

发表于:2013-1-14 10:52

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:lobster    来源:51Testing软件测试博客

分享:

  对方法进行多线程测试ThreadTestDateUtil

  虽然通过了单元测试,这个方法的功能实现了,但在多线程并发调用该方法的时候会出现抛出异常。手写多线程并发测试代码,com.loggingselenium.ThreadTestDateUtil继承java.lang.Thread线程类,重新实现其run()方法,用于调用com.loggingselenium.DateUtil类的compareDateTime(String dateTime1, String dateTime2)。在main()方法中创建两个线程并启动线程执行调用日期时间比较的方法。

package com.loggingselenium;
public class ThreadTestDateUtil extends Thread {
 public void run() {
  int i1=DateUtil.compareDateTime("20130111 01:02:03","20130111 01:02:03");
  int i2=DateUtil.compareDateTime("20120111 01:02:03","20130111 01:02:03");
  System.out.println("i1="+i1);
  System.out.println("i2="+i2);
 }
 public static void main(String a[]) {  
  Thread t = new ThreadTestDateUtil();
  t.start();
  Thread t2 = new ThreadTestDateUtil();
  t2.start();
 }
}

  编译、运行该方法,控制台报异常:

  java.lang.RuntimeException: 解析日期时间格式出错,期望的字符串格式为[yyyyMMdd HH:mm:ss]

  at DateUtil.compareDateTime(DateUtil.java:43)

  at TestDateUtil2.run(TestDateUtil2.java:3)

  使用JUnitPerf进行多线程测试JUnitPerfTestDateUtil

  我们手写多线程并发测试代码的一个弊端是,如果我们需要测试100个线程,我们就需要创建100个线程实例Thread t,t1,t2,t3……并一一启动这些线程。JunitPerf包可以帮助我们更容易对代码进行多线程并发测试。

  首先,访问http://www.clarkware.com/software/junitperf-1.9.1.zip下载我们需要的junitperf-1.9.1.jar,放到我们单元测试项目的构建路径。

  在测试代码com.loggingselenium. UnitTestDateUtil的基础上进行修改,创建新测试类JUnitPerfTestDateUtil,以使用JunitPerf进行多线程并发测试。新测试类中compareDateTimeLoadTestMethod()实现以5个线程执行testCompareDateTime(),这个单元测试方法调用我们的日期时间比较方法。方法compareDateTimeLoadTestMethod()只会运行1次,会有5个线程运行方法testCompareDateTime(),等于有5个线程调用方法compareDateTime(String dateTime1, String dateTime2)。我们可以指定需要的线程数目,JunitPerf也提供了丰富的接口供我们选用。

package com.loggingselenium;
import com.clarkware.junitperf.LoadTest;
import com.clarkware.junitperf.TestMethodFactory;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
public class JUnitPerfTestDateUtil extends TestCase {
 public JUnitPerfTestDateUtil(String name) {
  super(name);
 }
 protected void setUp() throws Exception {
  super.setUp();
 }
 protected void tearDown() throws Exception {
  super.tearDown();
 }
 public void CompareDateTime() {
  String dateTime1 = "20120111 01:02:03";
  String dateTime2 = "20130111 01:02:03";
  String dateTime3 = "20130111 01:02:03";
  assertEquals(-1, DateUtil.compareDateTime(dateTime1, dateTime2));
  assertEquals(1, DateUtil.compareDateTime(dateTime2, dateTime1));
  assertEquals(0, DateUtil.compareDateTime(dateTime2, dateTime3));
 }
 protected static Test compareDateTimeLoadTestMethod() {
  int users = 5;
  Test factory = new TestMethodFactory(JUnitPerfTestDateUtil.class,
    "CompareDateTime");
  Test loadTest = new LoadTest(factory, users);
  return loadTest;
 }
 public static Test suite() {
  TestSuite suite = new TestSuite();
  suite.addTest(compareDateTimeLoadTestMethod());
  return suite;
 }
 public static void main(String args[]) {
  junit.textui.TestRunner.run(suite());
 }
}

32/3<123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号