Jmeter压测工具入门篇

2022-11-11 10:44:33 浏览数 (1)

背景:本文档主要内容是jmeter脚本入门配置以及调试方法,借助已有的jmeter脚本模板,快速理解并写出一个成功的jmeter脚本用例。

1. jmeter脚本编写

1.1 jmeter脚本模版

拿到脚本模板文件后,直接在模板上做相应更改就行,模板中包含了必备配置和选择配置,可以快速完成一个成功的脚本,减少试错节省时间。

模板可以看到很多组件。高亮的部分是必备配置,置灰的选择配置,可以根据自己的使用场景设置哪些需要高亮,哪些需要置灰。

2. jmeter必备配置

2.1 线程组

使用jmeter进行性能测试时,所有的任务都是基于线程组的,一个线程组可以模拟若干个用户:

2.1.1 添加线程组

右键测试计划,选择线程组,可以看到线程组面板如下:

1)线程组默认选择在取样器错误后,继续执行后面的请求

2)线程数、ramp-up时间、循环次数默认为1

2.1.2 调度器

调度器默认置灰的,勾选后可使用。调度器可配置持续时间和启动延迟时间,用来模拟稳定性能压测。

(延迟时间常用于多个线程组串行执行的时候,若是只有测试计划中只有一个线程组,可配置为0)

2.2 HTTP请求

2.2.1 添加http请求,面板中请求url配置如下:

2.2.2 除了url配置外,面板中传参模块有3种方式:

1)键值对传参

2)消息体数据传参(常用):

3)文件上传类型:

步骤一:部分接口传参可能需要导入一个文件,可以通过文件上传实现

步骤二:抓包查看接口头部中Content-Type的类型是什么?由下图可见,该接口传参类型为:image/jepg

步骤三:最重要的一步,勾选对post使用multipart/from-data,高级设置中选择java实现

2.3 断言

常用BeanSell断言,jmeter在它的bean shell中内置了变量,用户可以通过这些变量与jmeter进行交互。脚本常用内容如下:

代码语言:javascript复制
//断言响应码为200的请求
if(!ResponseCode.equals("200")){
	Failure = true;
	FailureMessage=ctx.getPreviousResult()   " 请求失败,返回码:"   ResponseCode   "n";
	String response = new String(ResponseData);
	log.info(FailureMessage);
	log.info("=============================分割1==========================");
	log.info(response);
	return;
}

//断言响应体中的内容
String response = new String(ResponseData);
Failure = !(response.contains("<!--STATUS OK-->")); //需要修改contains中的内容,根据响应体中的实际内容进行断言

if (Failure) {
	Failure = true;
	FailureMessage=ctx.getPreviousResult()   "未发现断言结果"   response   "n";
	log.info("=============================分割2==========================");
	log.info(response);
	return;
	
}

断言只需要根据接口响应体中的内容更改 Failure = !(response.contains("<!--STATUS OK-->")) 这一句,其余无需更改!

2.4 HTTP信息头管理器

http信息头管理器在发送请求时起重要作用,通常在用jmeter向服务器发送请求的时候,往往后端需要一些验证信息。例如web服务器需要将cookie带过去给服务器验证,一般就是放在header头中。因此可以将请求头中的数据以键值对的形式放在http信息头管理器中。

以下是常用的头部字段:

2.4.1 content-type

content-type作用是告诉服务器我们发送的请求是哪种格式的。常用content-type有以下3种:

1)content-type: application/x-www-form-urlencoded

http请求默认值,若不指定content-type,默认使用这种格式。这种格式的参数可以在“参数”或者“消息体数据”里输入,格式不同,如下图所示:

2)content-type:application/json

支持格式为json

3)content-type:multipart/form-data

该类型是在post请求时,支持文件上传参数的方式。具体步骤见1.2.2 http请求中的传参方式。

步骤一:部分接口传参可能需要导入一个文件,可以通过文件上传实现

步骤二:抓包查看接口头部中Content-Type的类型是什么?由下图可见,该接口传参类型为:image/jepg

步骤三:最重要的一步,勾选对post使用multipart/from-data,高级设置中选择java实现

2.4.2 accept-encoding

accept-encoding是客户端表明自己接的编码方法,通常指定压缩方法,例如gzip,deflate等。实际从浏览器访问网页是默认带上该配置的,因此jmeter设计脚本时,可以在请求头中配置。

accept-encoding:gzip, deflate, br。意思是支持这3种压缩方法,服务器可能返回content-encoding:gzip,意思是服务器以gzip的方式进行压缩。

2.5 用户定义的变量

编写脚本过程中,常常有大量重复的变量需要设置,如果修改的话,要修改很多次。为了节省这部分耗时,我们可以配置用户定义的变量组件来定义全局变量,变量有改动只需要改动一次,并且更好管理。

  1. 使用步骤如下:

2、经常设置为变量的属性有哪些:

1)线程组相关属性:线程数、ramp-up时间、持续时间等,如上图一样

2)http请求中的域名或者ip:通常一个项目中使用的域名就几个,而接口有几十甚至上百,因此可以将域名或者ip设置为全局变量

2.6 HTTP请求默认值

该组件可以为我们设置http请求默认值,当一个测试计划中有多个请求都发送到同一个server,就可以直接设置默认的域名或者ip,然后http请求中不填写域名,最终请求时会默认使用http请求默认值中的值。

注意:若出现以下2种配置情况:

1) 若是一个测试计划中设置了两个http请求默认值,最终以前一个为准

2)若是测试计划中,设置了全局http默认请求值,某个线程组下也设置了一个http默认请求值,最终以线程组下的设置为准

2.7 查看结果树

查看结果树组件主要是调试脚本,配置后不用做任何设置,就可以看到请求的发送和返回信息。以下说明查看结果树如何快速调试脚本:

2.7.1 面板左侧展示请求成功/失败的状态,后侧取样器中可以看到状态码。以下是常见状态码:

200:服务器已经成功处理了请求

400:错误请求,服务器不理解请求的语法

401:未授权,通常是未登录或者登陆态失效

503:服务不可用,无法处理请求

2.7.2 请求中分两部分,一部分是请求体,一部分是请求头

2.7.3 响应数据中分两部分,一部分是响应体,一部分是响应头

2.8 聚合报告

2.9 后端监听器

后端监听器是一个异步监听器,可以将压测数据推到数据库中,提供了influxDB、graphite选项可选择。我们压测时选择influxdb做持续存储,结合grafana面板监控jmeter压测数据。

2.9.1 后端监听器的面板如下:

2.9.2 如何配置监控面板

1)拿到默认的脚本模版后,更改influxdbUrl,从默认的host_to_change改成自己使用的地址

我们一般使用为:http://jmeter-influxdb:8086/write?db=jmeter

2)更改application为自己的项目名称,可快速辨认即可。

3. jmeter脚本调试

将脚本模板的信息修改为自己要用的接口后,需要调试脚本,看单接口能否调试通过。

3.1 脚本启动方法

调试脚本只需要跑一条数据即可,以下有两种调试方法,推荐第二种

1)修改线程组配置,将threads和loop count改成1,点击start运行

2)右键线程组,点击validate,该线程组下的请求只运行一次

3.2 调试结果查看-查看结果树

脚本调试的结果首选查看结果树组件,配置后不用做任何设置,就可以看到请求的发送和返回信息。以下说明查看结果树如何快速调试脚本:

3.2.1 面板左侧展示请求成功/失败的状态,后侧取样器中可以看到状态码。以下是常见状态码:

200:服务器已经成功处理了请求

400:错误请求,服务器不理解请求的语法

401:未授权,通常是未登录或者登陆态失效

503:服务不可用,无法处理请求

3.2.2 请求中分两部分,一部分是请求体,一部分是请求头

3.2.3 响应数据中分两部分,一部分是响应体,一部分是响应头

3.3 调试结果查看-jmeter日志查看器

当脚本运行后,查看结果树中无响应的时候,可以查看日志进行错误分析。

选择jmeter选项->勾选日志查看,面板右下角会展示日志模块:

日志模块中错误信息一般会以info或者error的前缀打印出来

0 人点赞