版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bingdianone/article/details/83382674
文章目录
Postman : Http请求模拟工具
前置条件是准备一个springboot的框架写一个test接口
将链接加入postman快捷方式
进行并发测试
Postman测试比较慢。。。
Apache Bench (AB) : Apache附带的工具,测试网站性能
本测试1000个;并发量为50
- Concurrency Level: 50 【并发量
- Time taken for tests: 0.355 seconds 【总测试时间
- Complete requests: 1000【完成请求数
- Failed requests:0
- Total transferred: 136000 bytes【响应数据头总和
- HTML transferred: 4000 bytes【正文数据总和
- Requests per second: 2816.64#/secl (mean)【吞吐率
- Time per request: 17.752 ms (mean)【用户平均请求等待时间
- Time per request: 0.355 ms] (mean, across all concurrent - requests) 【服务器平均请求等待时间
- Transfer rate: 374.08 「Kbytes/secl received【单例时间从服务器获取的数据长度
JMeter : Apache组织开发的的压力测试工具
添加线程组
添加http请求
查看监听器
代码: Semaphore, CountDownLatch等
package com.mmall.concurrency;
import com.mmall.concurrency.annoations.NotThreadSafe;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
@Slf4j
@NotThreadSafe
/**
* 代码模拟并发
*/
public class ConcurrencyTest {
//请求总数
public static int clientTotal=5000;
//同事并发执行的线程数
public static int threadTotal=200;
//计数
public static int count=0;
public static void main(String[] args) throws InterruptedException {
//定义一个线程池
ExecutorService executorService = Executors.newCachedThreadPool();
//信号量(允许的并发数)
final Semaphore semaphore = new Semaphore(threadTotal);
//计数器(线程总数)
final CountDownLatch countDownLatch = new CountDownLatch(clientTotal);
for (int i = 0; i < clientTotal; i++) {
executorService.execute(()->{
try {
semaphore.acquire();//当前进程是否可以执行(判断并发是否小于200)
add();
semaphore.release();//释放进程
} catch (InterruptedException e) {
log.error("exception",e);
}
countDownLatch.countDown();
});
}
countDownLatch.await();
executorService.shutdown();//关闭线程池
log.info("count:{}",count);
}
private static void add(){
count++;
}
}
/**
* 运行结果(正常情况下结果为5000)
* 13:51:56.338 [main] INFO com.mmall.concurrency.ConcurrencyTest - count:4987
*/