并发模拟的四种方式+工具,超级实用!

您所在的位置:网站首页 javaweb测试工具 并发模拟的四种方式+工具,超级实用!

并发模拟的四种方式+工具,超级实用!

2024-07-17 18:59:40| 来源: 网络整理| 查看: 265

点击上方“Java精选”,选择“设为星标”

别问别人为什么,多问自己凭什么!

下方有惊喜留言必回,有问必答!

每天 08:35 更新文章,每天进步一点点...

一、Postman

Postman是一个款http请求模拟工具

ae9579393e7bb11b38b9a296d4a7cc1a.png

首先演示一下postman最基本的使用

创建一个Springboot项目,测试的代码如下:

import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("test") public class TestConrtoller {     @GetMapping("demo")     public String testDemo() {         return "result~";     } }

d26996a8fc42963850affda344fecd4c.png

为了便于操作,一般会将

http://127.0.0.1:8080 是经常使用的地址+端口号,可以设置为环境

推荐下自己做的 Spring Boot 的实战项目:

https://gitee.com/yoodb/jing-xuan

点击右上角的设置图标

5326912e63589ff0dea3823e3a83c4b0.png

选择global

55ee4359d43b0a9b570ff708b3d3e0ee.png

输入信息

f1305a7c895cd33a606a5297442c966b.png

以后再进行测试就能这样搞简写了

38e88bb2ff4e76ba2adcbdcde60a6a51.png

知道基本使用之后,我们来看一下如何模拟并发测试

00ce621ca035dcadb75c633a50241fa9.png

ea282521fd066c042ab7d6a97611b124.png

填写基本信息后,创建

e2bde3a31501eda4812f85260f6b1af8.png

这个时候会创建出Concurrency的文件夹,我们可以把刚才测试的demo的例子放进这个文件夹下

2123bd0517061c1c7b8dd16b3bc97720.png

9397b6998404c21841651ec106ed94ce.png

这个时候就可以在Concurrency下看到这个接口测试了

589ebc419ad789c2057bdcae27c49ba4.png

选择并发测试:

1845f5e2effcbd935a9161203e32e850.png

这个时候弹出我们想要的框了

9c3bf3428e3b72b46aa5cf8b918df58e.png

点击Run Concurrency

你可以立马感觉到CPU在“燃烧”,因为要记录并打印日志,显示的话是一条一条来的,其实测试的速度,要比你看到的打印的日志的速度快,绿色表示正常

bca6b7270fb82a2c223539458c23714c.png

二、Apache Bench(AB)

ApacheBench 是 Apache 服务器自带的一个web压力测试工具,简称ab。

ab又是一个命令行工具,对发起负载的本机要求很低,根据ab命令可以创建很多的并发访问线程,模拟多个访问者同时对某一URL地址进行访问,因此可以用来测试目标服务器的负载压力。总的来说ab工具小巧简单,上手学习较快,可以提供需要的基本性能指标,但是没有图形化结果,不能监控。

使用的话,首先需要安装Apache服务器

网站:http://httpd.apache.org/download.cgi

因为我的操作系统是windows10, 这里选择File for Microsoft Windows

Linux下的安装是非常简单的,这里不再演示

6222e4a4a35d4c9991880ebbf33e047b.png

选择 ApacheHaus

ed9d52a014eb12d629b5497bcf22d63d.png

进入下载页面 选择适合自己电脑的版本

7dffe4cadf0722a6c929d5f91e4776c1.png

文件解压到本地文件夹下,如果不是解压在c盘,需要设置参数,注意文件路径最好都是英文

关于需要设置参数,conf->httpd.conf 使用文本编辑器打开,

需要修改的有三个地方:

13e50b28fc5bd0c7f55bfdb73101ba2c.png

952850e517fbc529ab3e79ff86100fdb.png

运行根目录,修改成自己解压到本地的路径

625e65564e91b7c4302fe746388ed39a.png

监听端口,默认监听端口是80,如果已被使用会报错需要修改,如果80端口未被使用,可不修改;如果修改了监听端口,则需要把ServerName localhost也相应改成同样的端 口号

d96a46469a3fcb4a90f7555d6cb4b1ac.png

04f0be6f6eacd3bfdfd292a8b0fea0dc.png

DocumentRoot 测试文件存放地,且该目录必须存在

1feaea530fc07bc5bd5213af91b9c9c0.png

配置完成后,命令行cmd进入D:\softUtil\Apache24\bin目录下

httpd.exe  -k  install

23c3c099b6855aa6e5b10983314e822d.png

启动:

httpd.exe -k start

测试:

-n :请求数

-c: 并发数

2608b86b2cdc7d0507990adf09773f4c.png

三、并发模拟工具JMeter

JMeter也是一款性能测试工具,是图形化的。

下载地址:传送门 http://jmeter.apache.org/

7a99289f3512d06d6dc8176631fd89fe.png

需要Java8+的环境

9c2dd03263ac0619b9a8ade2bcaa2aa8.png

解压到你觉得合适的目录下(注意最好是英文路径)

进入它的bin目录下 启动jmeter.bat即可

7ce878df20ba7d4bb8fadc7405b00977.png

使用很简单,首先在测试计划部分新建一个线程组

524c6cbcd9cc3224378271a1fbc2c107.png

a6efe69ea1be0d49ee03139f4f0f47d8.png

c1670837b6057ff0b18cfe9bd2d7da11.png

设置好基础信息后添加HTTP请求(基本信息设置好没有OK哈,直接添加HTTP请求)

8e53d09e73913ca45cf484bed8a6a44f.png

填写HTTP请求相关的内容

afc6d60fb4ea194f91abf02557659d05.png

之后还要添加监听器,这里选择是图形结果

503eb1d82b651be5b2a2f7b1f6f48743.png

再添加一个查看结果树吧

9617a4f78f413ec9e4ce23d8169b751d.png

在运行之前打开log Viewer

bf09b769a3b20d0fcef914241c74b355.png

下面开始运行:

9c0b1708ad09998022833b3f5681c018.png

执行成功,来感受一下结果:

ed8b11ddd6f6de6c2c6ffb2174c19be3.png

点进去

e8e4cba1a08cd33a213b3da3353941dc.png

查看结果树

d7a76ead9a9db3cd5a761340258bf31c.png

四、代码模拟

这里需要用到一个类,就是CountDownLatch。

CountDownLatch是一个计数器闭锁,通过它可以完成类似于阻塞当前线程的功能,即:一个线程或多个线程一直等待,直到其他线程执行的操作完成。

推荐下自己做的 Spring Cloud 的实战项目:

https://gitee.com/yoodb/jingxuan-springcloud

CountDownLatch用一个给定的计数器来初始化,该计数器的操作是原子操作,即同时只能有一个线程去操作该计数器。调用该类await方法的线程会一直处于阻塞状态,直到其他线程调用countDown方法使当前计数器的值变为零,每次调用countDown计数器的值减1。当计数器值减至零时,所有因调用await()方法而处于等待状态的线程就会继续往下执行。这种现象只会出现一次,因为计数器不能被重置。

下图和它的方法可以体现出来:

cbe8a9dc2e4da636edb2429339303ae5.png

CountDownLatch类只提供了一个构造器:

public CountDownLatch(int count) {  };  //参数count为计数值

然后下面这3个方法是CountDownLatch类中最重要的方法(上图能够反映出来)

public void await() throws InterruptedException { };   //调用await()方法的线程会被挂起,它会等待直到count值为0才继续执行 public boolean await(long timeout, TimeUnit unit) throws InterruptedException { };  //和await()类似,只不过等待一定的时间后count值还没变为0的话就会继续执行 public void countDown() { };  //将count值减1

下面还需要看一个类Semaphore

Semaphore与CountDownLatch相似,不同的地方在于Semaphore的值被获取到后是可以释放的,并不像CountDownLatch那样一直减到底。

它也被更多地用来限制流量,类似阀门的 功能。如果限定某些资源最多有N个线程可以访问,那么超过N个主不允许再有线程来访问,同时当现有线程结束后,就会释放,然后允许新的线程进来。有点类似于锁的lock与 unlock过程。相对来说他也有两个主要的方法:

用于获取权限的acquire(),其底层实现与CountDownLatch.countdown()类似;

用于释放权限的release(),其底层实现与acquire()是一个互逆的过程。

通过这两个类可以进行并发的模拟:

测试一下:

import lombok.extern.slf4j.Slf4j; import java.util.concurrent.*; @Slf4j public class CuncurrencyTest {     // 请求总数     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  {                 try {                     semaphore.acquire();                     add();                     semaphore.release();                 } catch (InterruptedException e) {                     e.printStackTrace();                     log.error("exception",e);                 }                 countDownLatch.countDown();             });         }         countDownLatch.await();         executorService.shutdown();         log.info("count:{}",count);     }     private static void  add() {         count++;     } }

因为count不是线程安全的,且没有作防护措施,结果是错的

82efe2e17bd9aa1f340edb81c5689df2.png

上面是对代码的并发模拟的简单形式,值得注意的是,这里提到的两个类不是专门做并发模拟,它们的用途很广泛,大家可以了解一下。

版权声明:本文为CSDN博主「沉晓」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

https://blog.csdn.net/qq_42322103/article/details/102736170

众号“Java精选”所发表内容注明来源的,版权归原出处所有(无法查证版权的或者未注明出处的均来自网络,系转载,转载的目的在于传递更多信息,版权属于原作者。如有侵权,请联系,笔者会第一时间删除处理!

------ THE END ------

85ccf80cd13b23df7b5f2f14f937dc48.png精品资料,超赞福利!1d4ec2cd9af921f77377bec17b552f1d.png

>Java精选面试题



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


    图片新闻

    实验室药品柜的特性有哪些
    实验室药品柜是实验室家具的重要组成部分之一,主要
    小学科学实验中有哪些教学
    计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
    实验室各种仪器原理动图讲
    1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
    高中化学常见仪器及实验装
    1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
    微生物操作主要设备和器具
    今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
    浅谈通风柜使用基本常识
     众所周知,通风柜功能中最主要的就是排气功能。在

    专题文章

      CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭