首页 > 其他分享 >模拟高并发测试的几种方式

模拟高并发测试的几种方式

时间:2022-10-14 11:06:04浏览次数:55  
标签:请求 几种 并发 线程 测试 static public 模拟


Postman

下载软件包

# 官网

启动

测试案例

  1. 创建一个Collections,将接口保存进Collections
  2. 点击Runner,选择需要并发测试的接口
  3. 设置相关参数,点击Run。

Apache Bench

下载软件包

# 官网
https://www.apachelounge.com/
# 软件包

启动

在目录【xxx\Apache24\bin 】下,通过cmd进入命令行界面,启动abs.exe

abs.exe

测试案例

ab [options] [http://]hostname[:port]/path

例如:

-n后面的1000代表总共发出1000个请求,-c后面的500表示采用500个并发(模拟500个人同时访问);后面的网址表示测试的目标URL。

ab -n 1000 -c 500  http://127.0.0.1:8080/test
# 或
abs.exe -n 1000 -c 500
  1. 参数说明
  • -n
• requests Number of requests to perform //本次测试发起的总请求数
• -c
concurrency Number of multiple requests to make //一次产生的请求数(或并发数)• -t
timelimit Seconds to max. wait for responses //测试所进行的最大秒数,默认没有时间限制。• -r
Don’t exit on socket receive errors // 抛出异常继续执行测试任务• -p
postfile File containing data to POST //包含了需要POST的数据的文件,文件格式如“p1=1&p2=2”.使用方法是 -p 111.txt• -T
content-type Content-type header for POSTing //POST数据所使用的Content-type头信息,如 -T “application/x-www-form-urlencoded” 。 (配合-p)• -v verbosity How much troubleshooting info to print
//设置显示信息的详细程度 – 4或更大值会显示头信息, 3或更大值可以显示响应代码(404, 200等), 2或更大值可以显示警告和其他信息。 -V 显示版本号并退出。• -C
attribute Add cookie, eg. -C “c1=1234,c2=2,c3=3” (repeatable)
//-C cookie-name=value 对请求附加一个Cookie:行。 其典型形式是name=value的一个参数对。此参数可以重复,用逗号分割。提示:可以借助session实现原理传递 JSESSIONID参数,实现保持会话的功能,如-C ” c1=1234,c2=2,c3=3, JSESSIONID=FF056CD16DA9D71CB131C1D56F0319F8″ 。• -w
Print out results in HTML tables //以HTML表的格式输出结果。默认时,它是白色背景的两列宽度的一张表。• -i
Use HEAD instead of GET
  1. 测试报告
  • Document Path:测试页面
  • Document Length: 页面大小
  • Concurrency Level: 测试的并发数
  • Time taken for tests:整个测试持续的时间
  • Complete requests:完成的请求数量
  • Failed requests: 失败的请求数量
  • Write errors: 0
  • Total transferred: 整个过程中的网络传输量
  • HTML transferred: 整个过程中的HTML内容传输量
  • Requests per second: 最重要的指标之一,相当于LR中的每秒事务数,后面括号中的mean表示这是一个平均值
  • Time per request: 最重要的指标之二,相当于LR中的平均事务响应时间,后面括号中的mean表示这是一个平均值
  • Time per request: 每个连接请求实际运行时间的平均值
  • Transfer rate: 平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题

JMeter

下载软件包

# 官网
http://jmeter.apache.org/
# 软件包

启动

在目录【xxx\apache-jmeter-5.4.1\bin 】下,通过cmd进入命令行界面,window下启动 ,双击【 jmeter.bat 】脚本文件

测试案例

  1. 添加本次测试计划
    选中TestPaln,右键–>添加–>Threads(Users)–>线程组,定义名称,例如tiger-test
  2. 设置线程数 (所谓线程数就是并发用户数)
  3. 添加协议及相关配置信息
    选中tiger-test,右键–>添加–>Sampler–>HTTP Request,定义名称,例如tiger-request
    填写接口相关参数
  4. 为线程添加监听器

选中tiger-request,右键–>添加–>Listener–>查看结果树

选中tiger-request,右键–>添加–>Listener–>图形结果

  1. 打来日志
    选择选项,勾选日志查看
  2. 启动测试

线程属性

  1. 线程数
    虚拟用户数,假如50
  2. Ramp-Up Period(in seconds)
    虚拟用户增长时长,例如设置为300,也就是说5分钟内,50个用户请求完毕
  3. 循环次数
    一个虚拟用户所多少次测试,例如20,则表示总共执行1000次
  4. ….

代码

public class ConcurrencyTest {
// 请求总数
public static int clientTotal = 5000;
// 同时并发执行的线程数
public static int threadTotal = 200;
public static AtomicInteger count = new AtomicInteger(0);

public static void main(String[] args) throws Exception {
// 线程池
ExecutorService executorService = Executors.newCachedThreadPool();
// 信号量
final Semaphore semaphore = new Semaphore(threadTotal);
// 计数器闭锁,线程执行一次,计数器减1,直到为0
final CountDownLatch countDownLatch = new CountDownLatch(clientTotal);
for (int i = 0; i < clientTotal; i++) {
executorService.execute(() -> {
try {
semaphore.acquire();
add();
semaphore.release();
} catch (Exception e) {
log.error("exception", e);
}
countDownLatch.countDown();
});
}
// 等待闭锁减为0,才执行下面的操作
countDownLatch.await();
// 关闭线程池
executorService.shutdown();
log.info("count:{}", count.get());
}

private static void add() {
count.incrementAndGet();
}
}


标签:请求,几种,并发,线程,测试,static,public,模拟
From: https://blog.51cto.com/u_12952267/5755729

相关文章

  • CVPR2022 | MLP模拟tone-mapper或成主流? HDR-NeRF自监督重建高动态神经辐射场
    大家好,我是阿潘~今天跟大家分享一个来自CVPR2022的工作,效果太过惊艳啦。​更多CVPR2022工作整理:​​https://github.com/DWCTOD/CVPR2022-Papers-with-Code-Demo​​​​htt......
  • 如何在macOS上使用vivado的部分功能:利用vs code进行verilog代码编写,使用vivado的替代
    首先要说明本文介绍的是如何使用vivado的替代品在macOS上实现vivado的部分功能:verilog代码编写,仿真(simulation)和生成波形图。而并没有成功安装vivado。 刚开始为了实现......
  • 个人珍藏的80道多线程并发面试题(1-10答案解析)
    前言​个人珍藏的80道Java多线程/并发经典面试题,因为篇幅太长,现在先给出1-10的答案解析哈,后面一起完善,并且上传github哈~❝​​https://github.com/whx123/JavaHome​​❞「......
  • Java并发
    final关键字父类的私有方法是默认为final的,因此无法继承和重写,如果子类中还有则是新成员。基本类型的final域重排序规则:如publicclassFinalDemo{privateint......
  • 看过来!商城系统的三高(高并发、高性能、高可用)了解一下!
    随着各大互联网公司业务需求的快速增长,业务架构已经不是一个新鲜词。业务的快速发展、业务量的持续增长、业务场景的日益复杂和差异化、业务需求的不断变化,都对平台架构和系......
  • java并发之synchronized
    java实现同步互斥访问有两种方式,synchronized和Lock。Sychronized是java实现的内置锁,由jvm实现。通过编译Synchronized代码块为字节码可以发现,加锁逻辑被翻译为monitorent......
  • ESP32模拟鼠标键盘
     淘宝产品https://item.taobao.com/item.htm?spm=a230r.1.14.26.283812desb4ou0&id=669444818599&ns=1&abbucket=5#detail   硬件手册https://docs.qq.com/doc/......
  • Java并发编程学习5-对象的组合
    对象的组合前面的博文,我们已经了解了关于线程安全和同步的一些基础知识。本篇博文将介绍一些线程安全的组合模式,来帮助我们确保使用这些模式开发的程序是线程安全的。1.......
  • MySQL——MVCC--多版本并发控制机制
    前言以下的分析均在mysql的InnoDB引擎下。假设此时事务A与事务B同时执行。一、定义:MVCC(Multi-VersionConcurrencyControl,多版本并发控制)一种并发控制机制,在数据库中用......
  • MySQL——并发insert on duplicate key update遇见死锁
    前言数据库死锁问题,是一个老生常谈且很常见的问题,网上也有非常多对于各类死锁场景的解析和复现,但凡和死锁有关,无外乎不涉及数据库隔离等级、索引、以及innodb锁等相关原因......