在并发测试中,可以测试单元测试,也可以测试服务运行。
抽象并发控制类AbstractConcurrentControl
使用步骤:
1.单元测试类继承此类;
2.重写concurrentCode方法,定义自己的并发代码;
3.重写encapsulatingData方法,定义数据的拼装,并在concurrentCode方法中调用;
4.重写blockingMainThread方法,定义主线程阻塞策略

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;/*** @author Yangzhen* @Description 1.单元测试类继承此类;*              2.重写concurrentCode方法,定义自己的并发代码;*              3.重写encapsulatingData方法,并在concurrentCode方法中调用,定义数据的拼装;*              4.重写blockingMainThread方法,定义主线程阻塞策略* @date 2018-12-26 10:06**/
public abstract class AbstractConcurrentControl {public AtomicLong longCounter = new AtomicLong(0);public AtomicInteger intCounter = new AtomicInteger(0);/*** 默认并发线程数为2000个,子类可重写*/private static final int DEFAULT_CONCURRENT_CONTROL = 2000;private CountDownLatch blockLatch;/*** 并发线程数量,默认2000*/private int concurrentThreadNum;private ThreadPoolExecutor threadPool;public AbstractConcurrentControl() {this(DEFAULT_CONCURRENT_CONTROL);}public AbstractConcurrentControl(int concurrentThreadNum) {this.concurrentThreadNum = concurrentThreadNum;blockLatch = new CountDownLatch(concurrentThreadNum);threadPool = new ThreadPoolExecutor(concurrentThreadNum, concurrentThreadNum, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());}/*** 并发执行线程** @Title: process* @date 2018年12月26日 上午11:19:20* @author yz*/public final void process() {for (int i = 0; i < concurrentThreadNum; i++) {threadPool.submit(new Runnable() {@Overridepublic void run() {try {blockLatch.await();concurrentCode();} catch (InterruptedException e) {e.printStackTrace();}}});// 最后一个线程时可以打个断点if (i == concurrentThreadNum - 1) {blockLatch.countDown();} else {blockLatch.countDown();}}blockingMainThread();}/*** 并发代码** @Title: concurrentCode* @date 2018年12月26日 下午2:05:25* @author yz*/protected abstract void concurrentCode();/*** 并发数据** @return* @Title: encapsulatingData* @date 2018年12月26日 下午2:06:14* @author yz*/protected <T> T encapsulatingData() {return null;}/*** 阻塞主线程,防止JVM关闭,不建议使用Xxx.class.wait,可以使用TimeUnit.SECONDS.sleep(200);* 如果使用TimeUnit.SECONDS.sleep(200),要保证休眠时长足够跑完你的程序,否则会出现异常,因为JVM已经关闭,而测试的线程可能没有执行完成** @Title: blockingMainThread* @date 2018年12月26日 下午6:55:03* @author yz*/protected void blockingMainThread() {if (this.threadPool == null) {return;}this.threadPool.shutdown();while (!this.threadPool.isTerminated()) {try {TimeUnit.MILLISECONDS.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("线程池关闭");}
}

单元测试案例:

public class RequestTest extends AbstractConcurrentControl {public RequestTest() {super(1);}private MyService myService = new MyService();/*** 单元测试,调用process方法*/@Testpublic void test() {process();}@Overridepublic void concurrentCode() {Data data = (Data) encapsulatingData();myService.process(data);}/*** 定义数据** @param <T>* @return*/@SuppressWarnings("unchecked")@Overridepublic <T> T encapsulatingData() {Data data = new Data();String name = "a";int i = intCounter.incrementAndGet();data.setId(i);data.setName(name + ":" + i);return (T) data;}
}public class Data {private Integer id;private String name;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}public class MyService {public void process(Data data) {System.out.println(data.getId() + "-" + data.getName());}
}

Java基于CountDownLatch的并发测试工具相关推荐

  1. 并发测试工具_软件测试工程师都在用哪些测试工具?

    工欲善其事,必先利其器,高效开展软件测试活动,除了测试工程师工作中认真敬业之外,还应有优秀的测试工具辅助其工作.测试工具能提高测试效率,辅助实现测试目标,提升个人的技能. 下面简单介绍一下目前业内常用 ...

  2. soapui工具_基于开源的API测试工具!不再为web服务负载测试而发愁

    通过一个可视化.拖拽式的界面,LoadUI允许您实时.交互式地创建.配置和重分配负载测试.在单一测试环境下,LoadUI提供完整的测试覆盖,支持所有标准的协议和技术.它功能强大,能从任意数量的本地和远 ...

  3. apache并发测试工具ab为什么测不准

    apache并发测试工具ab为什么测不准 发表于2年前(2013-03-21 12:13)   阅读(1146) | 评论(1) 1人收藏此文章, 我要收藏 赞0 3月21日 深圳 OSC 源创会正在 ...

  4. tsung压测mysql_高并发测试工具Tsung使用教程

    tsung是erlang开发的一款开源的多协议分布式负载并发测试工具, 可用作HTTP.WebDAV.SOAP.PostgreSQL.MySQL.LDAP 和 Jabber/XMPP的服务器压力测试. ...

  5. http-little-toy(一个go编写Http并发测试工具)

    http-little-toy 一个简单的 http 并发测试工具. 仓库地址 如果喜欢就star⭐️一下吧,让它沉睡在你的收藏库里. https://github.com/leihenshang/h ...

  6. Windows并发测试工具

    Apache安装目录cmd 用ab并发测试工具,请求10次,并发为5 ab -n 10 -c 5 http://www.ysbm.com/api.php/task/testBingfa

  7. webbench windows_linux下的web并发测试工具汇总:ab, siege和webbench

    原创:欢迎分享,转载请保留出处. 对于做云平台或写web服务组件的童鞋来说,并发测试是一道绕不过去的坎.jemeter也许是QA美美的最爱,但不太会是程序员男神的朱丽叶.对于十年程序猿的我来说,任何工 ...

  8. go python php 压力测试_pyLot 基于python的压力测试工具

    因为组内的产品是一个供上海甚至全球所有designer使用的网站,所以并发性很高,于是一直存在访问速度不佳的诟病.为了提高访问速度,就需要对该网站的性能进行测试.于是在网上查了并发性测试和自动化测试的 ...

  9. html5 并发测试工具,超实用压力测试工具-ab工具

    吞吐率(Requests per second) 概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求数.某个并发用户数下单位时间内能处理的最大请求数,称 ...

  10. JMeter——并发测试工具类安装及使用

    关注微信公众号:CodingTechWork,一起学习进步. 引言   在程序员开发完代码后,我们需要先自测,对于restful风格的代码,我们常常需要调用接口api进行测试,一般我们会在浏览器上直接 ...

最新文章

  1. HttpRequest接口测试
  2. java基础 多维数组_java基础:3.2 多维数组
  3. 集合视图UICollectionView 介绍及其示例程序
  4. python基础学习[python编程从入门到实践读书笔记(连载六)]:数据可视化项目第17章
  5. win10安装docker
  6. 论文浅尝 | AMUSE: 基于 RDF 数据的多语言问答语义解析方法
  7. PHP错误日志记录:display_errors与log_errors的区别
  8. vscode 5500 but failed to open in Browser Preview. Got Browser Preview extension installed?
  9. ssm框架中mysql的分页_SSM框架中mapper层,增删改查,如何实现
  10. Qt TCP服务端、客户端;QTcpSocket
  11. 服务器vmx 文件,ISO,虚拟机,VMware,VMX文件和VMDK文件之间的关系
  12. C#简单实现office转pdf、pdf转图片
  13. 《贝叶斯统计》最大后验密度可信集(HPD)Python实现
  14. 8cm等于多少像素_一寸照片像素是多少
  15. 【转】电脑电源如何安装 (清晰大图详解电脑组装时各接口线缆细节)
  16. html5弹页面腮红,腮红总是打的很奇怪 这里有画腮红的小技巧
  17. BlazeFace:一种非典型专用检测器
  18. 用于app的支付成功与失败页面
  19. 解决蓝牙耳机自动暂停播放音乐的问题
  20. 【Java】 第六章 接口、lambda 表达式与内部类 Java核心技术卷1基础知识原书第10版 读书笔记

热门文章

  1. 百科知识:呼叫转移与呼叫前转
  2. 可以在linux下运行的u盘制作工具,U盘Linux制作工具LiveUSB Creator下载
  3. iframe 防止挂马的问题
  4. 冰点还原精灵如何卸载
  5. matlab gui的callback,matlab GUI callback 函数实现
  6. 【备忘】【No37】LAMP兄弟连李明老师讲Linux
  7. 传奇gom引擎架设教程
  8. python毕业论文答辩ppt_如何制作优秀的毕业论文答辩 PPT?
  9. power bi数据分析_设置Power BI数据网关
  10. android 9.0 安装xpose框架