jmeter使用

5/8/2023 测试Jmeter

# 一、jmeter安装与配置

# 1、jdk安装

Jmeter是基于JAVA的应用,所以需要安装jdk

jdk安装参考:https://www.cnblogs.com/gaobobo/p/10674934.html (opens new window)

# 2、jmeter下载安装

参考:https://www.cnblogs.com/siduoxiaohua/p/11127669.html (opens new window)

# 3、jmeter配置

在jemter bin安装目录下修改jmeter.properties文件:

(1)sampleresult.default.encoding=UTF-8 请求编码

(2)CookieManager.save.cookies=true

# 二、jmeter目录结构简介

jmeter常用的目录主要有bin目录、lib目录

# 1、bin目录

主要包含jmeter的启动文件、配置文件和日志文件等

启动文件:Jmeter.bat/Jmeter.sh

配置文件:Jmeter.properties,一旦修改配置文件,需要重启jmeter才能生效

# 2、lib目录

lib\ext目录,用来存放第三方的组件和插件,包括我们自己编写的二次扩展包

# 三、jmeter常用组件

jmeter常用组件有:测试计划、线程、配置元件、定时器、前置处理器、后置处理器、断言、监听器、逻辑控制器、取样器

# 1、测试计划

# (1)用户定义的变量

用户自定义的全局变量,可以在整个测试用例中使用

使用自定义变量${变量名称}:

# (2)独立运行每个线程组

勾选后,普通线程组之间间按上下排列顺序执行,而非默认的并行

勾选前,每个线程组并行运行,每次执行时的顺序是随机的:

勾选后,线程组按上下排列顺序执行:

在使用时一般默认不勾选

# (3)添加目录或jar到classpath

把jar文件的目录添加到指定的测试计划,关于jar的使用见下文

# 2、线程组

线程组是用来请求接口的,常用的有:线程组、jp@gc - Stepping Thread Group、setUp线程组、tearDown线程组

# (1)线程组

# (一)在取样器错误后要执行的动作

继续:线程出错继续执行

启动下一线程循环:开始下一次循环

停止线程:3个线程循环2次,如果第二个线程出问题,出错的线程停止,继续执行其余线程

停止测试:把线程运行的请求运行完才停止

立即停止测试:立刻停止所有线程

一般默认选择出错后继续执行

# (二)线程属性

线程数:做接口功能测试时一般默认填写1,创建线程要消耗CPU,做并发测试时可以结合目标tps以及rt进行设置,应用处理快可以设置小点

Ramp-Up时间(秒):线程在多少秒内启动,一般默认填写1。如果线程数是100,这里设置为10,表示10秒内启动100线程,但是不一定是每秒启动10个线程:

循环次数:线程循环执行的次数

调度器:勾选后,可以设置持续时间和启动延迟时间

# (2)jp@gc - Stepping Thread Group

阶梯加压,可以设置在多长时间用多少线程压测

# (3)setUp线程组

执行前执行一次,应用场景是初始化数据

# (4)tearDown线程组

执行最后执行一次,做关闭连接、清除垃圾数据等收尾工作

# 3、取样器

取样器中常用的是http请求

http请求中,需要填写协议、IP、端口号、请求方式(POST/GET)、请求路径

参数:Content-Type一般为form,格式如下:

点击添加按钮新增一行,也可以批量粘贴

消息体数据:Content-Type为application/json,格式如下所示:

# 4、配置元件

# (1)CSV 数据文件设置

可以用来定义全局变量,根据变量名称进行引用${变量名称}

文件名称:文件的路径,路径不要包含空格、特殊字符

文件编码:一般选择UTF-8

变量名称:csv文件中每列的名称,如有多列,用英文逗号间隔,如果只有一列,则不加分隔符

忽略首行:如果参数文件中有很多列,为了区分每列,就在首行把列名写上,此时就要选True

分隔符(用'\t'代表制表符):是变量值的分隔符,分隔符就是英文逗号

是否允许带引号?:如果是False,请求中保留引号;如果是True:请求中去掉引号

遇到文件结束符再次循环?:True表示循环,false表示不循环,一般保持默认False

遇到文件结束符结束线程?:值不够,是否停止线程,一般保持默认False,如果设置True,则遇到文件结束符再次循环中设置的True失效

线程共享模式:

a、所有现场:默认值,多个线程组取值不一样,每个线程组内的线程取值也不一样

b、当前线程:多个线程组取值一样,每个线程组内的线程取值也一样

c、当前线程组:多个线程组取值一样,每个线程组内的线程取值不一样

# (2)HTTP信息头管理器

设置content-type、token等,在后续的请求header中会自动带入

# (3)HTTP Cookie管理器

如果登录后有cookie,重定向时没cookie,就又跳转到登录页面,有cookie时添加cookie管理器

# (4)HTTP请求默认值

应用场景:相同的脚本,测试不同的环境(测试环境、开发环境等),填写协议、ip、端口、公共参数等

# 5、前置处理器

前置处理器主要用来做一些请求前的准备工作,比如测试数据的生成

# 6、后置处理器

后置处理器于运行结果数据的提取、处理等,常用的后置处理器有:json提取器、正则表达式提取器、beanshell后置处理器

beanshell后置处理器:

token提取器:

正则表达式提取器:

# 7、定时器

接口请求前等待多少毫秒

# 8、断言

响应断言用来判断接口是否响应成功

常用的断言有两种:响应文本、响应代码

响应文本:判断接口响应数据中是否包含某个字段

响应代码:接口响应状态码,如:200、404、504等

# 9、监听器

常用的监听器:查看结果树、聚合报告

# (1)查看结果树

用于查看接口的请求和响应内容

# (2)聚合报告

用于查看接口的响应时间和tps

# 10、逻辑控制器

# (1)循环控制器

# (2)if控制器

# (3)吞吐量控制器

用于控制混合场景压测时的业务比例

# (4)foreach控制器

例子:提取并打印出www.baidu.com响应结果中所有name值

# 四、jmeter函数助手

# 1、生成随机数

# 2、获取随机时间

# 3、获取当前时间/过去日期/未来日期

当前日期:${__timeShift(yyyyMMdd,,,,)}

昨天日期:${__timeShift(yyyyMMdd,,-P1D,,)}

明天日期:${__timeShift(yyyyMMdd,,P1D,,)}

当前时间:${__timeShift(yyyyMMdd HH:mm:ss,,,,)}

1个小时前:${__timeShift(yyyyMMdd HH:mm:ss,,-PT1H,,)}

20分钟前时间:${__timeShift(yyyyMMdd HH:mm:ss,,-PT20M,,)}

50秒之后:${__timeShift(yyyyMMdd HH:mm:ss,,PT50s,,)}

明天3小时20分钟50秒后:${__timeShift(yyyyMMdd HH:mm:ss,,P1DT3H20M50S,,)}

# 五、jmeter引入java文件

jmeter中使用java文件的场景多用于构造复杂数据,比如MD5加解密、生成身份证、手机号等,java代码可委托java开发帮忙编写

# 六、jmeter接口性能测试简介

# 1、什么是接口性能?

不同的角色关注的点不同:

用户--响应时间的快慢

产品--业务处理快慢

运维--响应时间、资源利用率(CPU、内存、磁盘IO、网络带宽)、稳定性

dba--数据库资源利用率,是否有慢sql、死锁等

开发--响应时间、代码性能

架构师--架构设计是否合理

测试--需要关注以上所有,响应时间快慢、资源利用率、稳定性、数据库、架构、TPS等

# 2、如何理解性能测试

性能测试是指,根据性能需求/指标(响应时间、业务容量TPS、服务器资源利用率)、业务模型(压测时每个业务的比例),设计性能测试方案(包括压测环境、数据、场景、脚本、性能指标、压力策略、监控策略、风险),以合理的线程数连续递增加压,并同时进行监控,根据监控数据找到性能瓶颈、并进行分析、定位、调优,最终得出结论来评估系统的性能指标是否满足业务需求。还要进行强度测试,找到系统的最大容量。

# 3、性能测试中什么是并发?线程、tps、rt之间的关系是什么?

性能测试中通常所说的并发并非jmeter的线程数,而是服务器每秒处理的线程数

线程、tps、rt之间的关系:tps = 处理总请求/并发时间 = 线程数*(1000/rt)

# 4、性能测试的步骤

(1)了解业务场景

(2)性能需求评审,需要压测哪些接口、确定接口性能测试目标、接口业务模型

(3)申请性能测试环境

(4)编写压测方案

(5)编写性能测试用例,准备测试数据、设计业务场景

(6)部署性能指标监控工具

(7)预热测试

(8)执行压测、并监控性能指标

(9)根据监控指标分析定位性能瓶颈、并调优

(10)回归测试

(11)压测报告

# 5、性能测试思考题

# (1)思考题一

假设:牧原肉食平均每天有10000台冷链车外出送货,要监控这10000台车的物流轨迹,要求每秒实时上传车的位置到监控系统(假设不涉及定时任务进行批处理、异步处理)。

请根据以上场景,请提取性能需求

# (2)思考题二

假设:聚爱优选app,目前有500w用户,日活50w。用户在早中晚三个时段集中活跃,每个时段持续20分钟。商品查询业务每天平均请求总量在1000w平均响应时间在2s,下订单业务每天平均总请求量在100w,平均响应时间在3s。当前系统稳定运行。

由于业务快速发展,聚爱优选app用户暴增,业务要求支撑的用户达到5000w,要求测试目前的系统是否能够支撑?如果不能,需要确定当前能够支撑多少用户平稳运行。

请根据以上场景建立性能测试模型、估算性能测试指标