【压测】Jmeter入门

一、前言

      项目做大的时候就必不可少要进行压力测试,常见的压力测试工具有loadrunner、Jmeter。最近小编在项目中接触了Jmeter,有一些感触,所以做一些这方面的总结。主要包括了两个方面:直接通过可视化界面操作,还有就是自己编写Jmeter运行脚本来操作。

二、介绍一些Jmeter

      Jmeter 是Apache组织开发的基于Java的压力测试工具,开源并且支持多个操作系统,是一款很好的HTTP测试工具。迅速掌握Jmeter的基本工程配置流程,并可以使用GUI界面进行基础的测试工作。

      Jmeter是由Java开发的,所以在运行之前需要安装Jre,具体的安装过程可以参考这篇文章的内容。接下来直接进入正题,假设后端开发了一个IP地址查询库,想做一下基本的性能测试,使用Jmeter如何做?

三、基本测试

3.1 基本测试

      首先打开Jmeter软件。

【压测】Jmeter入门_第1张图片

      jmeter_gui

3.1 添加线程组

      所有的测试工作都是从新建一个线程组开始的。
【压测】Jmeter入门_第2张图片

      它的作用其实是为了模拟用户,所以也叫Users。一个线程组模块可以包含多个线程,每个线程代表一个用户,这样可以模拟高并发下的请求,并根据网站的响应信息来判断网站的相关性能。
【压测】Jmeter入门_第3张图片

      线程组包含很多属性,目前我们只关注线程属性那一块。其中线程数代表访问的并发数,默认是1。Ramp-Up Period 表示多长时间内容启动所有线程,如果时间很短,会造成网站的瞬间高并发,默认值是1秒。循环次数是表示执行多少次,默认值为1,表示执行一次结束,这里可以勾选永远,让其一直运行下去。

      这些属性暂时不用动,因为还没有将工程配置好,测试工程配置的时候使用单次测试容易排查问题,以后压力测试直接修改该面板的值即可。

3.2 添加HTTP请求

      因为是HTTP接口,这里添加一个HTTP请求,用来访问网站的API接口。

【压测】Jmeter入门_第4张图片

      HTTP请求面板主要的目的是设置测试时候HTTP请求的相关信息,模拟浏览器访问或者其他程序访问后台的相关配置。

【压测】Jmeter入门_第5张图片

      该面板主要的配置包括协议、服务器IP、端口、方法、路径和参数等内容,接下来可以将测试样例的相关信息填入。
      这里测试使用的是淘宝IP地址库,首页有Rest API接口的测试接口说明:

1. 请求接口(GET):
  /service/getIpInfo.php?ip=[ip地址字串]
  2. 响应信息:
  (json格式的)国家 、省(自治区或直辖市)、市(县)、运营商
  3. 返回数据格式:

{
	"code": 0,
	"data": {
		"ip": "210.75.225.254",
		"country": "中国",
		"area": "华北",
		  "region": "北京市",
		"city": "北京市",
		"county": "",
		"isp": "电信",
		  "country_id": "86",
		"area_id": "100000",
		"region_id": "110000",
		"city_id": "110000",
		  "county_id": "-1",
		"isp_id": "100017"
	}
}

其中code的值的含义为,0:成功,1:失败。
  因为是GET请求,所以具体内容填写如下:

3.3 添加结果树

      现在基本配置已经OK,但是这样执行后返回的结果却没有地方查看。为了方便查看结果,这里添加View Results Tree面板,有很多其它的结果查看面板,大家可以自己尝试一下。
【压测】Jmeter入门_第6张图片

      结果树主要是观察服务器响应信息,并支持将结果写入文件。

3.4 HTTP信息头管理器

      使用HTTP信息头管理,可以帮助测试人员设定JMeter发送的HTTP请求头所包含的信息
【压测】Jmeter入门_第7张图片

【压测】Jmeter入门_第8张图片

3.5 聚合报告

      查看所有请求的综合情况。最常用的就是聚合报告模块。
【压测】Jmeter入门_第9张图片

【压测】Jmeter入门_第10张图片

      压测结果查看
运行完后,聚合报告会显示压测的结果。主要观察Samples、Average、error、Throughput。
1. Samples:表示一共发出的请求数
2. Average:平均响应时间,默认情况下是单个Request的平均响应时间(ms)
3. Error%:测试出现的错误请求数量百分比。若出现错误就要看服务端的日志,配合开发查找定位原因
4. Throughput:简称tps,吞吐量,默认情况下表示每秒处理的请求数,也就是指服务器处理能力,tps越高说明服务器处理能力越好。

压测结果的分析
1. 有错误率同开发确认,确定是否允许错误的发生或者错误率允许在多大的范围内;
2. Throughput吞吐量每秒请求的数大于并发数,则可以慢慢的往上面增加;若在压测的机器性能很好的情况下,出现吞吐量小于并发数,说明并发数不能再增加了,可以慢慢的往下减,找到最佳的并发数;
3. 压测结束,·登陆相应的web服务器查看CPU等性能指标,进行数据的分析;
4. 最大的tps:不断的增加并发数,加到tps达到一定值开始出现下降,那么那个值就是最大的tps。
5. 最大的并发数:最大的并发数和最大的tps是不同的概率,一般不断增加并发数,达到一个值后,服务器出现请求超时,则可认为该值为最大的并发数。
6. 压测过程出现性能瓶颈,若压力机任务管理器查看到的cpu、网络和cpu都正常,未达到90%以上,则可以说明服务器有问题,压力机没有问题。
7. 影响性能考虑点包括:数据库、应用程序、中间件(tomact、Nginx)、网络和操作系统等方面。

3.6 批量测试 CSV Data Set Config

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

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

【压测】Jmeter入门_第11张图片

      这里拿IP地址为案例。首先准备一个文件,每行一个IP。
【压测】Jmeter入门_第12张图片

      然后,在CSV Data Set Config面板中如下配置:
【压测】Jmeter入门_第13张图片

      这里的配置很简单,Filename代表解析的文件,这里选择刚刚创建的Ip列表文件。

  • File encoding 代表文件编码,使用默认配置。

  • Variable Names 代表赋值的变量,这里可以填写多个变量,但是目前每行只有一个ip地址。

  • Ignore first line 是否忽略首行,主要是对那些有标题头的文件格式,接下来Delimiter 代表每行的分隔符,这里每行一个变量,填什么都无所谓,保持默认即可。

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

  • Sharing mode这里保持默认即可。

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

【压测】Jmeter入门_第14张图片

3.7 开始测试

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

在这里插入图片描述

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

四、小结

      压力测试才能发现其中的问题,以前总是没有特定留意一下压力测试,现在自己亲自感受一下的时候,才发现压力测试还是很重要的,系统要做大,就要用压力测试。

你可能感兴趣的:(➤,JAVA提高篇,测试,jmeter)