Jmeter压力测试(入门篇)

  1. 添加HTTP镜像服务器

  在运行测试之前,如何验证我们发送的信息是否有误?如何可以很有勇气的告诉别人自己发送的测试请求是没有问题的?这里推荐添加HTTP镜像服务器进行校验测试。

  HTTP镜像服务器并不是测试组件,而是用来校验的非测试组件,具体添加位置在工作台。

  

  添加后,默认端口为8081,如果和你电脑上的端口不冲突,直接开启即可。

     

  接着回到HTTP请求面板修改IP地址和端口。

  

  点击运行按钮进行测试。

  

  如果你之前没有保存过测试方案,会提示你保存,这里直接选择一个位置进行保存。

   

  在结果树面板可以查看镜像服务器返回的结果,该结果信息就是你发送的请求配置信息。

  因为该演示发送的参数比较简单,所以感觉该操作没有必要的样子,但对于复杂的测试来说,测试之前保证自身请求的正确性是很必要的。

  2.开始测试

  接下来再将HTTP请求面板改回原来的样子,点击清除按钮,清楚当前无用的测试结果,然后点击开始按钮进行新的测试。

  

  小技巧:这里请求面板改来改去感觉跟麻烦,有一个简单的方法就是改之前将面板拷贝到工作台,测试后,再将其拷贝回去,这样就可以节省再次更改的时间了,当然复制/禁用的效果也是类似的。

  查看测试面板:

  

  结果有些和想象的不一样,我们非常确定请求发送的没有问题,原因可能是淘宝的服务端做了HTTP头判断,防止其它的应用程序进行滥用,一般公司内部测试不会遇见这种情况,大多数这种手段貌似都是防爬虫之类的。

  解决方法很简单,就是再披一层皮。增加HTTP信息头管理面板:

  

  这里添加User-Agent头部,让请求看起来是浏览器本身访问一样。

  

  再次测试,这回返回正常。

  接下来压力测试只需要修改线程组面板,就可以尝试大批量进行请求了。不过大批量测试几个地方还需要学习

  3.批量测试

  批量测试要想做好有三个最基本的问题。第一个如何做到批量输入,测试肯定越偏向于越真实越好,很多都是拿钱上数据进行测试,在Jmeter中最简单的批量导入的手段就是使用CSV Data Config面板。第二个是如何校验返回结果,批量测试不像单个测试可以人眼扫描,大批量的数据返回肯定是看不过来的,在Jmeter中可以使用断言,类似于编程中的断言,可以校验返回结果是否正确。第三个是如何统计数据,这个最方便,因为基本的统计Jmeter有很多原生的模块。

  3.1.CSV Data Set Config

  该模块主要是从外部加载数据使用,可以按照规定的格式读取并将文本解析成对应的变量,可以供其它模块使用。

  

  这里拿一个IP地址作为案例:首先准备一个文件,每行一个IP。

          

然后在CSV Data Config面板中如下配置:

  

 

 

 

这里的配置嗯简单,Filename代表解析的文件,这里选择刚刚创建的IP列表文件。File encoding代表文件编码,使用默认配置。Variable Names代表赋值的变量,这里可以填写多个变量,但是目前每行只有一个IP地址。lgnore first line是否忽略首行,主要是对那些标题头的文件格式,接下来Delimiter代表每行的分隔符,这里每一个变量,填什么都无所谓,保持默认即可。

  Recycle on EOF/Stop thread on EOF/Sharing mode 这三个设置一般用于测试文件数据的使用策略。如果你想只测试文件中的数据,测试完成后终止,那么需要将Recycle on EOF和Stop thread on EOF分别设置为false和true。Sharing mode这里保持默认即可。

  有了数据的输入,接下来修改HTTP请求,让每次请求的参数不同。

  

 

 

 

  将IP的值改为${ip},大括号包含的ip代表CSV Data Set Config中定义的变量,这样每次请求的IP参数将和文件中的顺序一一映射。

  

 

 

 

  提示;大家测试时候不要使用淘宝接口测试,该接口对批量请求做了限制。

  3.2.断言

  上面的结果好像全部没问题,其实不是,查看第二个请求,你会发现,虽然请求本身没问题,但是数据返回的信息却表示输入的IP地址无效,我们却无法感知。

  

  如何校验返回结果?Jmeter支持添加断言模块。

  

  断言的种类非常丰富,这里使用最简单常用的响应断言。断言面板支持很多匹配规则,甚至支持正则表达式。这里只是简单的使用包括来进行校验。

  

  接着可以运行查看结果。

  

  3.3.聚合报告

  就剩下最后一个问题,如何查看所有请求的综合情况。最常用的就是聚合报告模板。

  

  该模板可以详细的展示所有请求的综合水平。包括请求个数,平均响应时间,最大响应时间、吞吐量等等。

  下面是我测试四个请求的报告:

  

  4.总结

  到这里基本的常用模块就介绍完了,通过本文可以掌握基本的测试组件,主要是对HTTP请求的相关测试,非常简单的过程,适合入门观看。

<div>
</div>                   
<br>
<a href="http://www.51testing.com/html/85/n-4458385.html"         
      target="_blank" style="color:#900">【调查报告】你以为的测试行业现状,其实是 
       这样的!
</a>    

  扩展知识:

  jmeter的作用:

  1)、能够对HTTP和FTP服务器进行压力和性能测试,也可以对任何数据库进行同样的测试(通过JDBC)。

  2)、完全的可移植性和100%纯java.

  3)、完全Swing和轻量组件支持(预编译IDEJAR使用javax.swing.*)包。

  4)、完全多线程框架允许通过多个线程并发取样和通过单独的线程组对不同的功能同时取样。

  5)、精心的GUI设计允许快速操作和更精确的计时。

  6)、缓存和离线分析/回放测试结果。

  JMETER的高扩展性

  1)、可链接的取样器允许无限制的测试能力。

  2)、各种负载统计表和可链接的计时器可供选择。

  3)、数据分析和可视化插件提供了很好的可扩展性以及个性化。

  4)、具有提供动态输入到测试的功能(包括javascript).

  5)/持脚本编程的取样器(在1.9.2及以上版本支持BeanShell)。

  意义:

  1)、Label:定义的HTTP请求名称。

  2)、Samples:表示这次测试中一共发出了多少个请求。

  3)、Average:访问页面的平均响应时间。

  4)、Min:访问页面的最小响应时间。

  5)、Max:访问页面的最大响应时间。

 

  jmeter客户端实现方式有三种,一种是java,一种是httpclient4,还有一种是默认,我们来看一下java与httpclient4的区别:

java:选择压测时,链接是复用的(代码中的http调用都加了连接池)

httpclient4:压测时,每请求一次都创建一个新的链接,(jmeter5.0以前默认关闭了连接复用,5.0上是打开的:即每请求一次都会创建一个新的链接),从JMeter5.0开始,当使用默认的HC4实现时,JMeter将在每个线程组迭代时重置HTTP状态(SSL状态+连接)。如果您不想要此行为,请设置httpclient.rest_state_on_thread_group_iteration = false

所以httpclient4在连接复用设置打开的情况下,压测结果与java的是不一样的,因为java复用链接,httpclient4每次连接都会重新建立tcp连接,如果httpclient4吞吐量过低,需要考虑网络宽带的限制。

java实现适应压榨性测试,httpclient4适合真实场景的模拟。

连接池的作用与原理:

正常访问数据库的过程中,每次访问都需要创建新的连接,这会消耗大量的资源;连接池的就是为数据库连接建立一个“缓冲区”,预先在缓冲池中放入一定数量的连接对象,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去;并且连接池允许多个客户端使用缓存起来的连接对象,这些对象可以连接数据库,它们是共享的、可被重复使用的;使用连接池可以节省大量资源,提高程序允许速度。

连接池的基本原理是:先初始化一定的数据库连接对象,并且把这些连接保存在连接池中。这些数据库连接的数量是由最小数据库连接数来设定的。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。当程序需要访问数据库的时候,如果连接池中有空闲的连接,可直接得到一个连接;如果连接对象中没有空闲的连接,并且连接数没有达到最大,会创建一个新的连接从连接池中取出一个 连接,数据库操作结束后,再把这个用完的连接重新放回连接池。

 

posted @ 2021-07-06 14:13  极地~阳光  阅读(652)  评论(0编辑  收藏  举报