`
raymond2006k
  • 浏览: 295106 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ConcurrentTest并发测试框架介绍

阅读更多
ConcurrentTest
 

Sourceforge Link:  ConcurrentTest, 0.9.1

1. Description
- A java concurrent test library.
* It provides some base class which can simplify perfermance test for concurrent and multi-core program.
* Write code easily, and detailed CSV report is generated automatically.
* Most accurate result of multi-core program.

2. Design

    This framework provides several classes to use.




  Framework Class Description
1 AbstractRunner -
   A abstract super class. You can write test class extends it.
2 RunnerFactory -
   A abstract factory. You can extend it and override newRunner() method to create multi threads test runner.
3 ConcurrentTestMeter
  A test meter. You cant use ConcurrentTestMeter.createMeter( poolSize, runnerFactory) to create a meter.
You can use concurrentTestMeter.runTest(  n,count) to run the test.
4  ConcurrentTestReport -
The concurrent test report. It is created by  ConcurrentTestMeter.
It can output CSV format report. You can edit it with Microsoft Excel easily.
   
3. Demo:

Java Relection Performance Test
(see org.bamboo.concurrenttest.demo.MethodInvokeTest for detailed)

Here is a sample to test java reflection under multi-core,multi thread senario.
1) Write code you want to test.
2) Use ConcurrentTestMeter class to run your test.
3) Write main() method.
4) Performance Test Report.


1) Write code you want to test.
Write a JavaReflectRunner class which extends from AbstractRunner class.
Override doWork(int) method to write logic you want to test,e.g. method.invoke(...)


package org.bamboo.concurrenttest.demo;

import java.lang.reflect.Method;

public class JavaReflectRunner extends AbstractRunner {
   
   private static Method method ;
   
   static {
      try {
         method = Foo.class.getMethod("sayHello", new Class<?>[]{ String.class });
      } catch (Exception e) {      }
   }
   
   public void doWork(int i) {      
      try {
         Foo foo = new Foo();         
         method.invoke(foo, new Object[]{"ABCD" + i});
      } catch (Exception e) {         
         e.printStackTrace();
      }
   }
}






2) Use ConcurrentTestMeter class to run your test. Provide a subclass of RunnerFactory which is in charge of create new JavaReflectRunner you just wrote.

 public class MethodInvokeTest {
   
   public static final int _threadPoolSize = 4;
   
   public static void testJavaReflect(int poolSize,int threads ,int runTimes) {            
      ConcurrentTestMeter concurrentTestMeter = ConcurrentTestMeter.createMeter( poolSize, new RunnerFactory() {
         
         
         public Runner newRunner() {
             return new JavaReflectRunner();
         }
         
         
         public String getTestName() {
            return "JavaReflectRunner";
         }
      });
         
      ConcurrentTestReport report = concurrentTestMeter.runTest( threads,runTimes);            
      System.out.printf("%s \r\n" ,report.toCsvFormat());      
   }


3) Write main() method.
In main() method,you can provide thread pool size, concurrent count of threads and execution times  per thread (i.e. run times).
On the whole,ConcurrentTestMeter class gives a full simulation of multi-thread enviroment.

You can specify thread pool size, concurrent theads, execute times as you need.

 

  public static void main(String[] args) {
      int poolSize = 4;
      int concurrents = 200;
      int countPerThread = 10000;               

      System.out.printf(ConcurrentTestReport.getHeader() +"\r\n");     
      
      testJavaReflect(poolSize,concurrents, countPerThread);
      
      testCglibReflect(poolSize,concurrents,countPerThread);
            
      System.out.println("\r\nMain exit...");
   }



4) Performance Test Report.

   Run main() method. You may get test result on the console. The output format is csv,so you can open it using Micorsof Excel and anylyze,make graph easily.

Test Result on console is below. The first line is column header, the sencond line is result. Maybe TPS index is what you want.



引用
Type,threadPoolSize ,Concurrency(threads),countPerThread, totalTime(ns),avgTime(ns),TPS:(times/s)
DirectMethodInvokeRunner,4,200,10000,863529862,431,2316
JavaReflectRunner,4,200,10000,1124753844,562,1778
CglibReflectRunner,4,200,10000,918106911,459,2178

 
  You can view it in Excel or make comaprison Graph.






 
  • 大小: 19.8 KB
  • 大小: 28.1 KB
  • 大小: 71.5 KB
分享到:
评论
6 楼 amigo 2010-07-21  
raymond2006k 写道
billgui 写道
Thanks for sharing.  Do you have an estimation on how many threads maximum one machine can handle?  I see 200 in your sample data, not sure if this is an average data or?



Sorry, the parameter 200 of threads is just a test case to test concurrent performance of the code in doWork(int) method.

You can write a loop to use threads from 10 to 10000 step by double. e.g.

public static void main(String[] args) {  
  int concurrents= 10 ;

   System.out.printf(ConcurrentTestReport.getHeader() +"\r\n");    
    
   while( concurrents<10000) {
  
      testCglibReflect(poolSize,concurrents,countPerThread); 
 
      concurrents = concurrents * 2;
   }
    System.out.println("\r\nMain exit...");  
}

Then you will get a report which render then performance variation from threads 10 to 10000. And you can get the threads maximum on the machine from the curve.


why not shutdown threadpool? such as
executorService.shutdown()

It's to increase rapidly when repeated test..
5 楼 numen_wlm 2010-07-13  
装,装,装,使劲儿装。
4 楼 raymond2006k 2010-07-12  
billgui 写道
Thanks for sharing.  Do you have an estimation on how many threads maximum one machine can handle?  I see 200 in your sample data, not sure if this is an average data or?


You can also tuning the pool size in a loop the check the best parameter value on the machine , e.g. on a 8-core Xeon server.
3 楼 raymond2006k 2010-07-12  
billgui 写道
Thanks for sharing.  Do you have an estimation on how many threads maximum one machine can handle?  I see 200 in your sample data, not sure if this is an average data or?



Sorry, the parameter 200 of threads is just a test case to test concurrent performance of the code in doWork(int) method.

You can write a loop to use threads from 10 to 10000 step by double. e.g.

public static void main(String[] args) {  
  int concurrents= 10 ;

   System.out.printf(ConcurrentTestReport.getHeader() +"\r\n");    
    
   while( concurrents<10000) {
  
      testCglibReflect(poolSize,concurrents,countPerThread); 
 
      concurrents = concurrents * 2;
   }
    System.out.println("\r\nMain exit...");  
}

Then you will get a report which render then performance variation from threads 10 to 10000. And you can get the threads maximum on the machine from the curve.
2 楼 xiaoyuqi00 2010-07-12  
Can you speak chinese?
1 楼 billgui 2010-07-12  
Thanks for sharing.  Do you have an estimation on how many threads maximum one machine can handle?  I see 200 in your sample data, not sure if this is an average data or?

相关推荐

    java并发测试框架源码

    java并发测试 代码很简单,就是一个test类 原理是这样的 1、定义并发数n 2、创建1、2、3……n个线程,创建后悬停 3、所有线程创建好后,...代码的框架已经写好了,只要在代码注释的地方加入自己想要测试的内容就可以了

    【资料】并发测试报告

    并发测试是一种软件测试方法,用于确定系统在高负载情况下运行的能力。它旨在评估在多用户同时使用系统时的性能表现,确保系统能够处理预期的最大并发用户数而不会发生性能瓶颈或崩溃。并发测试的主要目的是找出可能...

    s3接口并发测试工具-上传与下载并发测试

    代码只有几行,实现s3上传并发与下载并发,是ceph s3接口测试工具。欢迎下载,需要3分哦。 s3接口并发测试工具 s3上传并发测试 s3下载并发测试 s3并发测试

    WEBAPI多线程并发测试工具

    标题"WEBAPI多线程并发测试工具"指出,这是一个专门针对Web API进行多线程并发测试的工具。Web API通常指的是应用程序接口,它们允许不同的服务之间进行通信,以实现数据交换和功能整合。多线程并发测试则是验证在多...

    IIS并发数测试,IIS并发数测试压力测试

    【IIS并发数测试】 IIS(Internet Information Services)是微软公司提供的一个Web服务器应用程序,用于托管网站和服务。并发数测试是指评估IIS在同时处理多个用户请求时的性能和稳定性,这对于理解服务器在高负载...

    CsGo并发流程控制框架

    《CsGo并发流程控制框架详解》 在编程领域,尤其是高性能和实时性要求较高的系统设计中,并发控制是至关重要的。本文将深入探讨基于C#的并发流程控制框架,特别是针对高并发场景下的多线程管理和线程安全问题。我们...

    HTTP并发测试工具

    这个工具对于开发者、系统管理员以及性能测试人员来说非常实用,能够帮助他们评估和优化网络服务器的性能,确保在高并发访问下系统的稳定性和响应速度。 首先,我们需要理解HTTP和HTTPS协议的基础。HTTP(超文本...

    WebSocket压力并发测试v1.0.4.rar

    使用时,用户需要配置测试参数,如目标WebSocket服务器地址、并发连接数、测试时间等,然后启动测试,观察和分析测试结果,以了解服务器的性能表现和可能存在的问题。 总的来说,WebSocket压力并发测试是保障Web...

    WebSocket压力并发测试v1.1.2

    "WebSocket压力并发测试v1.1.2"是一个专门用于测试WebSocket服务并发连接能力的工具。这个工具可能包含以下功能: 1. **并发连接模拟**:它可以创建并维持大量并发的WebSocket连接,模拟多个用户同时与服务器进行...

    内网并发测试工具

    【内网并发测试工具】 内网并发测试工具是一种专门用于评估和优化网络服务性能的软件,主要用于测试系统在高并发情况下的稳定性和处理能力。它能够帮助开发者和系统管理员了解其应用程序或接口在多用户同时访问时的...

    python多线程并发及测试框架案例

    这篇文章主要介绍了python多线程并发及测试框架案例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1、循环创建多个线程,并通过循环启动执行 import ...

    开源的.NET测试框架

    它支持并发测试,允许在单个测试运行中并行执行多个测试,从而提高测试效率。 3. MSTest:MSTest是Microsoft提供的原生测试框架,集成在Visual Studio中,支持.NET Framework和.NET Core。它提供了基本的测试功能,...

    BigCore大数据高并发开发框架

    "BigCore大数据高并发开发框架"是一个专门为处理大规模并发数据处理和高效运算而设计的开源框架。这个框架的出现旨在简化服务器集群环境下的分布式系统开发,以满足日益增长的业务需求。通过集成mongodb内存数据库和...

    内网并发测试工具.rar

    内网并发测试是针对局域网内部网络服务性能评估的重要环节,主要目的是验证系统在多用户同时访问或操作时的稳定性和效率。本压缩包文件“内网并发测试工具.rar”提供了一款专为此目的设计的工具,它可以帮助开发者和...

    海量并发微服务框架设计.pptx

    在构建海量并发微服务框架时,首要目标是确保系统能够高效、稳定地处理高并发场景。微服务架构允许我们将大型应用程序拆分为多个小型、独立的服务,每个服务专注于一个特定的业务功能,从而实现更好的可扩展性和灵活...

    HTTP高并发测试工具

    HTTP高并发测试工具

    C简易自动化测试框架

    本文将详细解析一个以C语言为基础的简易自动化测试框架,旨在帮助开发者理解和构建自己的测试解决方案。 首先,我们要理解"自动化测试框架"的概念。自动化测试框架是一个系统,它提供了一种结构化的方法来编写和...

    高并发测试亲测可用

    本资源“高并发测试亲测可用”提供了一种适用于高并发环境的测试工具,能够有效地帮助开发者和测试工程师评估系统在大量并发请求下的表现。 首先,我们需要了解什么是高并发。高并发是指在短时间内系统能同时处理...

    Jemter多用户并发测试。

    在本文中,我们将详细介绍如何使用 JMeter 进行多用户并发测试,包括录制脚本、参数化、线程组控制和结果分析等方面的知识点。 录制脚本 在 JMeter 中,可以使用 Badboy 工具录制脚本。 Badboy 是一个功能强大的...

Global site tag (gtag.js) - Google Analytics