并发模拟工具(JMeter、Apache Bench、postMan)详解 | 您所在的位置:网站首页 › 压力测试的工具是什么 › 并发模拟工具(JMeter、Apache Bench、postMan)详解 |
目录
一、Psotman:Http请求模拟工具 二、Apace Bench(AB):Apache附带的工具,测试网站性能 三、JMeter:Apache组织开发的压力测试工具(使用比较多的工具) 四、代码模拟 五、总结 简介: 一、Psotman 二、Apache Bench(AB) 三、JMeter 四、代码 一、Psotman:Http请求模拟工具严格来说postMan并不是并发请求,而是串行执行的,现在用postMan更多的是用来测试Http连接的一个工具,但是也是一个很实用的工具,也有一些比较强大的功能和优点 1.1 下载地址 Postman for MACPostman for windows X64Postman for windows X86Postman for linux X64Postman for Linux X86官网地址1.2 操作说明(以win64为例) 1、打开Postman,输入我们需要测试的网址,点击左边的"+",保存请求 4、这里我们可以设置请求次数和间隔时间,一般间隔时间会设置为0,设置好之后,我们点击Run gbfTest运行 5、查看结果,从图中我们可以看到百度的响应速度还是很快的 6、点击 Run Summary 可以看到运行结果概述 2.1 简介 Apache Bench 是 Apache 服务器自带的一个web压力测试工具,简称ab。ab又是一个命令行工具,对发起负载的本机要求很低,根据ab命令可以创建很多的并发访问线程,模拟多个访问者同时对某一URL地址进行访问,因此可以用来测试目标服务器的负载压力。总的来说ab工具小巧简单,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。比如nginx、tomcat、IIS等,上手学习较快,可以提供需要的基本性能指标,但是没有图形化结果,不能监控 2.2 原理 ab命令会创建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,它既可以用来测试apache的负载压力,也可以测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力 2.3 Apache Bench安装 Apache服务器,下载地址:https://www.apachelounge.com/download/ 选择:httpd-2.4.41-win64-VS16 下载目录结构: 2.4 Apache Bench 使用 运行环境:Windows7 Apache Bench版本:httpd-2.4.41-win64-VS16 1、进入cmd目录下,进入我们解压好的Apache Bench目录下 命令参数参考: -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表的格式输出结果。默认时,它是白色背景的两列宽度的一张表。 123456789101112131415161718192021222324252.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.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工具 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:从我们复制的内容中进行添加 123456
1、右键点击 Http请求 > Add > Listener > View Results Tree 2、这里我们设置响应数据格式:HTML Source Formatted,点击运行我们就可以看到请求结果 6、添加用户自定义变量 1、添加用户自定义变量用以Http请求参数化:Http请求 > Add > Config Element > User Defined Variables 2、新增请求参数,存放搜索关键字 右键点击 Http测试请求(注意是Http测试请求) > Add > Assertions > Response Assertion
7、添加响应断言结果 右键点击 Http测试请求 > Add > Listener > Assertion Results 8、添加聚合报告 右键点击 Http请求 > Add > Listener > Aggregate Report 到这里我们就完成了一个完整的Http接口的性能测试编写,接下来我们会对它的性能进行测试 3.4 JMeter 性能测试 1、配置Http请求(线程组)信息 点击Http请求(线程组),配置相关的性能测试相关参数 线程数:50 循环次数:永远 持续时间:60秒 2、执行测试信息 选择聚合报告,查询结构,点击 箭头 按钮启动测试,如果要清楚具体内容,点击小扫把,清除调试结果 3、测试结果分析解读 1、打开聚合报告 参数详解: Label:每个 JMeter 的 element都有一个 Name 属性,这里显示的是 Name 属性的值#Samples:请求数——表示这次测试中一共发出了多少个请求如果模拟10个用户,每个用户迭代10次,那么这里显示100Average:平均响应时间——默认情况下是单个 Request 的平均响应时间当使用了 Transaction Controller 时,以Transaction 为单位显示平均响应时间Median:中位数,也就是 50% 用户的响应时间90% Line:90% 用户的响应时间99% Line:99% 用户的响应时间Min:最小响应时间Max:最大响应时间Error%:错误率——错误请求数/请求总数Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second)当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数KB/Sec:每秒从服务器端接收到的数据量在实际中我们需要关注的点只有——#Samples 请求数,Average 平均响应时间,Min 最小响应时间,Max 最大响应时间,Error% 错误率和Throughput 吞吐量 四、代码模拟1、Semaphore Semaphore是计数信号量。Semaphore管理一系列许可证。每个acquire方法阻塞,直到有一个许可证可以获得然后拿走一个许可证;每个release方法增加一个许可证,这可能会释放一个阻塞的acquire方法。然而,其实并没有实际的许可证这个对象,Semaphore只是维持了一个可获得许可证的数量。 执行结果:如下图所示,我们看到虽然结果是无序的,但是请求的线程数量是正确的,这里展示的是获取一个许可,同时也释放一个许可,我们可不可以获取多个许可,释放多个许可呢,答案是可以的
执行结果:这里我们看到我们设置了获取多个许可同时也释放多个许可,放回的线程数是正确的,同时执行结果也是有序的 2、CountDownLatch CountDownLatch是一个同步工具类,用来协调多个线程之间的同步,或者说起到线程之间的通信(而不是用作互斥的作用)。 CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。使用一个计数器进行实现。计数器初始值为线程的数量。当每一个线程完成自己任务后,计数器的值就会减一。当计数器的值为0时,表示所有的线程都已经完成了任务,然后在CountDownLatch上等待的线程就可以恢复执行任务 2.1 代码演示: import lombok.extern.slf4j.Slf4j; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @Slf4j public class CountDownLatchExample1 { private final static int threadCount = 200; public static void main(String[] args) throws Exception { int num = 0; ExecutorService exec = Executors.newCachedThreadPool(); final CountDownLatch countDownLatch = new CountDownLatch(threadCount); for (int i = 0; i < threadCount; i++) { final int threadNum = i; num++; exec.execute(() -> { try { test(threadNum); } catch (Exception e) { log.error("exception", e); } finally { countDownLatch.countDown(); } }); } countDownLatch.await(); log.info("finish——"+num); exec.shutdown(); } private static void test(int threadNum) throws Exception { Thread.sleep(100); log.info("{}", threadNum); Thread.sleep(100); } } 1234567891011121314151617181920212223242526272829303132333435363738394041424344
postMan:非专业的并发测试,严格来说postMan并不是并发请求,而是串行执行的,postMan更多的是用来测试Http连接的一个工具,是一个很实用的工具 Apache Bench:Apache Bench是 Apache 服务器自带的一个web压力测试工具,简称ab,ab工具小巧简单,上手学习较快,可以提供需要的基本性能指标,但是没有图形化结果,不能监控 JMeter:Apache JMeter 是Apache 组织开发的基于java的压力测试工具。用于对软件做压力测试的工具,它可以用于测试静态和动态资源例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、 数据库, FTP 服务器等等 总的来说,并发测试中,JMeter和Apache Bench是比较好的选择,由于Apache Bench是基于命令行的,ab处理速度更快,而Jmeter更准确,由于Jmeter本身支持断言、可变参数和CSV数据集的输入,能设定更加灵活多变的的测试场景,至于postMan这款工具,用来最多的是用来模拟Http请求的一个,并不是一个专业的并发请求工具。 |
CopyRight 2018-2019 实验室设备网 版权所有 |