龙空技术网

jmeter 并发压测多线程异步处理

远观山川近看海 1232

前言:

此时大家对“webapi多线程异步发送”都比较讲究,大家都想要了解一些“webapi多线程异步发送”的相关资讯。那么小编也在网上网罗了一些对于“webapi多线程异步发送””的相关内容,希望我们能喜欢,我们快快来了解一下吧!

大家好,这几天需要搭建一个demo,实现异步推送,线程安全,为了以后项目中,能够推送消息,做的准备,现在分享一下jmeter并发请求,和部分代码

Jmeter教程 简单的压力测试

Jmeter并发数 测试

Jmeter是一个非常好用的压力测试工具。 Jmeter用来做轻量级的压力测试,非常合适,只需要十几分钟,就能把压力测试需要的脚本写好。

阅读目录

什么是压力测试 做压力测试的常用工具做压力测试的步骤如下:本文做压力测试的例子第一步: 使用CSV Data Set Config 来参数化第二步:添加HTTP Request.第三步: 使用Thread Group, 控制模拟多少用户第四步: 添加Summary Report 用来查看测试结果第五步: 运行一下下载源代码什么是压力测试

顾名思义:压力测试,就是 被测试的系统,在一定的访问压力下,看程序运行是否稳定/服务器运行是否稳定(资源占用情况)

比如: 2000个用户同时到一个购物网站购物,这些用户打开页面的速度是否会变慢,或者网站是否会奔溃

做压力测试的常用工具

做压力测试,一般要使用工具, 人工是没办法做的。 最常用的工具是LoadRunner, 但是LoadRunner毕竟是收费软件,而且使用上也比较复杂。 现在越来越多的人开始使用Jmeter来做压力测试。 免费, 而且使用上非常简单。

做压力测试的步骤如下:

1. 写脚本 或者录制脚本

2. 使用用户自定义参数

3. 场景设计

4. 使用控制器,来控制 模拟多少用户。

5. 使用监听器, 查看测试结果

本文做压力测试的例子

本文举的实例是: 在一台电脑用Jmeter模拟200个用户,同时去使用bing搜索不同的关键字, 查看页面返回的时间是否在正常范围内。

第一步: 使用CSV Data Set Config 来参数化

首先我们把测试需要用到的2个参数放在txt文件中,

新建一个data.txt文件,输入些数据, 一行有两个数据,用逗号分隔。

/*** 执行异步任务 * */@Override@Async("asyncServiceExecutor")public void executeAsync() { logger.info("--------------------------------->start executeAsync"); try{ logger.info("--------------------------------------开始休眠"); Thread.sleep(100); }catch(Exception e){ logger.info("--------------------------------------异步并发报错"); e.printStackTrace(); } logger.info("--------------------------------->end executeAsync");}

启动Jmeter, 先添加一个Thread Group, 然后添加一个CSV Data Set Config (Add -> Config Element -> CSV Data Set Config)

第二步:添加HTTP Request.

我们添加http 请求,发送get 到 博客园+小坦克

选择Thread Group 右键 (Add ->Sampler -> HTTP Request), 需要填的数据如下:

第三步: 使用Thread Group, 控制模拟多少用户

选中Thread Group

Number of Threads(users): 一个用户占一个线程, 200个线程就是模拟200个用户

Ramp-Up Period(in seconds): 设置线程需要多长时间全部启动。如果线程数为200 ,准备时长为10 ,那么需要1秒钟启动20个线程。也就是每秒钟启动20个线程。

Loop Count: 每个线程发送请求的次数。如果线程数为200 ,循环次数为10 ,那么每个线程发送10次请求。总请求数为200*10=2000 。如果勾选了“永远”,那么所有线程会一直发送请求,直到选择停止运行脚本。

第四步: 添加Summary Report 用来查看测试结果

选中Thread Group 右键(Add -> Listener -> Summary Report)

第五步: 运行一下

到目前为止, 脚本就全写好了, 我们来运行下, 如何看下测试的结果

原文地址:

异步代码:

/*** 执行异步任务 * */

@Override@Async("asyncServiceExecutor")

public void executeAsync() {

logger.info("--------------------------------->start executeAsync");

try{

logger.info("--------------------------------------开始休眠");

Thread.sleep(100);

}catch(Exception e){

logger.info("--------------------------------------异步并发报错");

e.printStackTrace();

}

logger.info("--------------------------------->end executeAsync");}

@Beanpublic Executor asyncServiceExecutor() { logger.info("--------------------------->start asyncServiceExecutor"); ThreadPoolTaskExecutor executor = new VisiableThreadPoolTaskExecutor(); //配置核心线程数 executor.setCorePoolSize(500); //配置最大线程数 executor.setMaxPoolSize(800); //配置队列大小 executor.setQueueCapacity(2000); //配置线程池中的线程的名称前缀 executor.setThreadNamePrefix("async-service-"); // rejection-policy:当pool已经达到max size的时候,如何处理新任务 // CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行 executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); //执行初始化 executor.initialize(); return executor;}

标签: #webapi多线程异步发送