并发模拟工具(JMeter、Apache Bench、postMan)详解

并发模拟工具(JMeter、Apache Bench、postMan)详解

码农世界 2024-05-13 前端 75 次浏览 0个评论

Document Path: /path #请求路径

Document Length: 222 bytes #页面大小

Concurrency Level: 500 #并发量,设置的参数之一

Time taken for tests: 45.805 seconds #整个测试所用的时间/秒

Complete requests: 1000 #完成的请求数

Failed requests: 0 #失败的请求数

Non-2xx responses: 1000 #接收到的HTTP响应数据的头信息中含有2XX以外的状态码,则会在测试结果中显示另一个名为“Non-2xx responses”的统计项,用于统计这部分请求数(1000)

Total transferred: 484000 bytes #表示所有请求的响应数据长度总和

HTML transferred: 222000 bytes #表示所有请求的响应数据中正文数据的总和

Requests per second: 21.83 [#/sec] (mean) #吞吐率,吞吐率是与并发数相关的,使请求总数相同,但如果并发数不一样,吞吐率还是很可能有很大差异的

Time per request: 22902.310 [ms] (mean) #用户平均请求等待时间。也就是一次并发总的时间

Time per request: 45.805 [ms] (mean, across all concurrent requests) #服务器平均请求等待时间。也就是一次请求(在本例中也就是500中的平均每一次)所需时间

Transfer rate: 10.32 [Kbytes/sec] received #这些请求在单位时间内从服务器获取的数据长度

Connection Times (ms)

min mean[+/-sd] median max

Connect: 9 46 460.5 11 9060

Processing: 25 20066 13796.4 14798 36549

Waiting: 14 16163 15029.9 8460 36484

Total: 37 20111 13785.1 22804 36562

Percentage of the requests served within a certain time (ms)

50% 22804 #50%用户请求在22804ms内返回

66% 33043 #66%用户请求在33043ms内返回

75% 34181

80% 34791

90% 35877

95% 36416

98% 36502 #98%用户请求在36502ms内返回

99% 36512

100% 36562 (longest request)

命令参数参考:

-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表的格式输出结果。默认时,它是白色背景的两列宽度的一张表。

2.5 使用注意

1、MAC中自带了Apache。

2、在使用ab命令时,并发了过高会出现错误:Too many open files,由于系统打开文件数量限制了

具有轻量化特点的bench还是很适合中小企业使用,尤其在于模拟访问页面的多机测试

三、JMeter:Apache组织开发的压力测试工具(使用比较多的工具)


3.1 简介

Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件。相比Loadrunner而言,JMeter小巧轻便且免费,逐渐成为了主流的性能测试工具,是每个测试人员都必须要掌握的工具之一

JDK版本:1.8

运行环境:Windows 7 64

JMeter版本:3.3

注意:安装JMeter需要 Java8和8以上的JDK版本

3.2 JDK安装(如果已经安装JDK 1.8 忽略这一步)

1、jdk官网下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

2、选择 Java SE 8u231,点击JDK下载

3. 安装下载的JDK

4. 配置系统环境变量

具体可以自行查找资料,这里就不做过多描述

3.2 JMeter安装

1、官网下载地址:JMeter地址

2、下载最新JMeter 5.1.1 版本:Apache JMeter 5.1.1 (Requires Java 8+)

3、下载完成后解压zip包,双击bin目录下jmeter.bat文件

3.3 JMeter 使用

1、双击bin目录下jmeter.bat文件后,打开Apache JMeter工具

2、案例测试(Test Plan - > Add - > Thread(User) - > Thread Group)

3、设置名称和线程数

线程参数解读:

Number of Threads (users):虚拟用户数(也就是线程数),一个虚拟用户占用一个进程或线程

Ramp-Up Period(in seconds):准备时长,设置的虚拟用户数需要多长时间全部启动。

例如:如果线程数为20,准备时长为2,那么需要2秒钟启动20个线程,也就是每秒钟启动10个线程

Loop Count:循环次数每个线程发送请求的次数

如果线程数为20,循环次数为100,那么每个线程发送100次请求。总请求数为20*100=2000 。如果勾选了“Forever”,那么所有线程会一直发送请求,一到选择停止运行脚本。

Delay Thread creation until needed:直到需要时延迟线程的创建

Scheduler:调度器,设置线程组启动的开始时间和结束时间(配置调度器时,需要勾选循环次数为永远)

Duration(Seconds):持续时间(秒),测试持续时间,会覆盖结束时间

Startup delay(Seconds):启动延迟(秒),测试延迟启动时间,会覆盖启动时间

4、添加Http请求

右键点击,Htto请求 > Add > Sampler > Http Request

接下来我们对接口https://www.baidu.com/s?ie=UTF-8&wd=edg进行性能测试,如下图所示:

请求参数详解:

  • Web Server(Http服务):

    1、Protocol[http]:协议,向目标服务器发送HTTP请求协议,可以是HTTP或HTTPS,默认为HTTP

    2、服务器名称或IP:HTTP请求发送的目标服务器名称(域名)或IP

    3、Port Number:端口号

    • Http Reuqeset(Http请求体):

      1、Method:请求方法类型,有GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等

      2、path:目标URL路径,除去服务器地址、端口和请求参数后所得到的数据

      3、Content encoding:编码方式,设置为 UTF-8

      • 请求参数:

        设置请求参数,都在下面的列表中进行设置,

        • 列表参数解读:

          Name:请求参数名

          Value:请求值

          URL Encode:是否Url编码

          Conten-Type:内容类型,有需要自行调整(一般选择默认即可)

          include Equals:是否包含等于

          注意:参数传入中文时需要勾选“URL Encode”

          这里的按钮都是针对列表中的数据进行操作的

          Detail:查看参数详情

          Add:添加一行列表请求参数

          Delte:删除一行数据

          Up:设置列表参数上移

          Down:设置列表参数下移

          add from Clipdoard:从我们复制的内容中进行添加

          5、添加察看结果树

          1、右键点击 Http请求 > Add > Listener > View Results Tree

          2、这里我们设置响应数据格式:HTML Source Formatted,点击运行我们就可以看到请求结果

          3、本次搜索返回结果页面标题为edg_百度搜索

          6、添加用户自定义变量

          1、添加用户自定义变量用以Http请求参数化:Http请求 > Add > Config Element > User Defined Variables

          2、新增请求参数,存放搜索关键字

          3、在 Http测试请求 中使用该参数,格式为:${wd} ,如下图所示

          7、添加响应断言

          右键点击 Http测试请求(注意是Http测试请求) > Add > Assertions > Response Assertion

          校验返回的文本中是否包含搜索词,添加参数${wd}到要测试的模式中

          Contains:包括

          Matches:匹配

          Equals:相等

          SubString:原谅博主才疏学浅,这个就不做解释了

          Not:否

          or:或者

          7、添加响应断言结果

          右键点击 Http测试请求 > Add > Listener > Assertion Results

          点击运行,查询运行结果

          8、添加聚合报告

          右键点击 Http请求 > Add > Listener > Aggregate Report

          到这里我们就完成了一个完整的Http接口的性能测试编写,接下来我们会对它的性能进行测试

          3.4 JMeter 性能测试
          1、配置Http请求(线程组)信息

          点击Http请求(线程组),配置相关的性能测试相关参数

          线程数:50

          循环次数:永远

          持续时间:60秒

          2、执行测试信息

          选择聚合报告,查询结构,点击 箭头 按钮启动测试,如果要清楚具体内容,点击小扫把,清除调试结果

          3、测试结果分析解读

          1、打开聚合报告

          参数详解:

          1. Label:每个 JMeter 的 element都有一个 Name 属性,这里显示的是 Name 属性的值

          2. #Samples:请求数——表示这次测试中一共发出了多少个请求

          如果模拟10个用户,每个用户迭代10次,那么这里显示100

          1. Average:平均响应时间——默认情况下是单个 Request 的平均响应时间

          当使用了 Transaction Controller 时,以Transaction 为单位显示平均响应时间

          1. Median:中位数,也就是 50% 用户的响应时间

          2. 90% Line:90% 用户的响应时间

          3. 99% Line:99% 用户的响应时间

          4. Min:最小响应时间

          5. Max:最大响应时间

          6. Error%:错误率——错误请求数/请求总数

          7. Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second)

          当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数

          1. KB/Sec:每秒从服务器端接收到的数据量

          在实际中我们需要关注的点只有——#Samples 请求数,Average 平均响应时间,Min 最小响应时间,Max 最大响应时间,Error% 错误率和Throughput 吞吐量

          四、代码模拟


          1、Semaphore

          Semaphore是计数信号量。Semaphore管理一系列许可证。每个acquire方法阻塞,直到有一个许可证可以获得然后拿走一个许可证;每个release方法增加一个许可证,这可能会释放一个阻塞的acquire方法。然而,其实并没有实际的许可证这个对象,Semaphore只是维持了一个可获得许可证的数量。

          1.1 代码演示:获取一个许可证

          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

          public class SemaphoreExample1 {

          自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

          深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

          因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

          既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

          由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

          如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

          总结

          阿里伤透我心,疯狂复习刷题,终于喜提offer 哈哈~好啦,不闲扯了

          1、JAVA面试核心知识整理(PDF):包含JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算共30个章节。

          2、Redis学习笔记及学习思维脑图

          3、数据面试必备20题+数据库性能优化的21个最佳实践

          《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!

          存中…(img-XrW3xg46-1712434617093)]

          1、JAVA面试核心知识整理(PDF):包含JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算共30个章节。

          [外链图片转存中…(img-BqqrKtUl-1712434617093)]

          2、Redis学习笔记及学习思维脑图

          [外链图片转存中…(img-epEW7E1D-1712434617093)]

          3、数据面试必备20题+数据库性能优化的21个最佳实践

          [外链图片转存中…(img-8WSFgyzY-1712434617094)]

          《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!

转载请注明来自码农世界,本文标题:《并发模拟工具(JMeter、Apache Bench、postMan)详解》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,75人围观)参与讨论

还没有评论,来说两句吧...

Top