JMeter入门使用,手把手教(接口测试和压测)

2024-06-12 23:38

本文主要是介绍JMeter入门使用,手把手教(接口测试和压测),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一.JMeter介绍

二.使用场景

三.开始使用

3.1业务接口

3.2Post请求

3.3统一前置接口

3.4统一前置接口+单个业务接口

3.5批量接口(无需登录)


一.JMeter介绍

以下一段话摘抄JMeter中文网,毕竟我说的可能会存在不恰当的地方:

ApacheJMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。它可以用于测试静态和动态资源,例如静态文件、Java小服务程序、CGI脚本、Java对象、数据库、FTP服务器,等等。JMeter可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。

Apachejmeter可以用于对静态的和动态的资源(文件,Servlet,Perl脚本,java对象,数据库和查询,FTP服务器等等)的性能进行测试。它可以用于对服务器、网络或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。你可以使用它做性能的图形分析或在大并发负载测试你的服务器/脚本/对象。

二.使用场景

JMeter功能比较强大,使用场景很多,单独/批量接口测试、前后关联接口、接口压测等。公司的测试人员一般能比较熟练使用JMeter,开发人员也可以使用JMeter帮助我们开发。

三.开始使用

3.1业务接口

首先你要有jre环境,安装过程自行百度,安装后可以不配置环境变量。首先打开JMeter(我的是5.3版本):

然后是这个界面:

一个空界面,当你创建了测试计划后可以保存为.jmx的文件打开:

切换中文:

工具栏,其实也比较通俗易懂:

先来试一个接口,文件-新建,生成一个测试计划:

右键测试计划-添加-线程(用户):

这时候你会看到有3个选项,线程组是通用的,一般用这个,setUp线程组是前置线程组,也就是线程组之前执行,tearDown线程组是后置线程组,也就是线程组执行完了执行它。我们新建一个线程组,下面的界面也比较通俗易懂:

amp-up时间解释:

【1】决定多长时间启动所有线程。如果使用10个线程,ramp-upperiod是100秒,那么JMeter用100秒使所有10个线程启动并运行。每个线程会在上一个线程启动后10秒(100/10)启动。Ramp-up需要要充足长以避免在启动测试时有一个太大的工作负载,并且要充足小以至于最后一个线程在第一个完成前启动。一般设置ramp-up=线程数启动,并上下调整到所需的。

【2】用于告知JMeter要在多长时间内建立全部的线程。默认值是0。如果未指定ramp-upperiod,也就是说ramp-upperiod为零,JMeter将立即建立所有线程。假设ramp-upperiod设置成T秒,全部线程数设置成N个,JMeter将每隔T/N秒建立一个线程。

【3】Ramp-UpPeriod(in-seconds)代表隔多长时间执行,0代表同时并发。

接下来添加Http请求,一个线程组可以有多个取样器(以下简称任务):

这时候你就可以感受到JMeter的强大。选择HTTP请求后:

填一下服务器地址和参数信息,协议可以不用填,这时候我们用的JMeter功能和Postman、Swagger请求接口一样,不过JMeter可以设置更多东西,随便用一个Get接口试下,不需要额外的配置:

添加一下察看结果树,用于查看结果:

请求一下,弹出保存框就保存下,可以选中多个节点点击启动:

选中当前的HTTP请求节点启动,是启动当前的HTTP请求,如果是setUp线程组下的任务,会执行线程组下的任务。选中线程组节点启动,是启动这个线程组下的所有任务,包括HTTP请求,选中测试计划节点启动,是启动这个测试计划下的所有任务,也可以就选择察看结果树节点:

保存一下测试计划:

请求完成后,点击查看结果树:

绿色表示成功,再点下响应数据看下也能看到返回说明请求成功:

3.2Post请求

上面演示的是Get请求,现在演示一下Post请求,一般我们Post请求的content-type都是application/json;charset=UTF-8,这时候需要添加一下HTTP信息头管理器:

添加content-type:

设置好入参,json格式:

一样地添加查看结果树后请求一下:

请求成功,不过后台报错,这是自己要处理的。

3.3统一前置接口

一般我们的业务,在新增和编辑的时候基本都要校验用户是否登录,如果没有登录就拿不到用户的信息,所以我们可以设置setUp线程组作为用户登录或者是你需要的前置接口,我这里以登录为例,登录成功会返回一个token。

新建setUp线程组,看起来和一般线程组也没什么不一样:

设置前置接口参数信息:

测试一下:

如果你的测试计划比较复杂,不像某个线程组干扰另外的线程组的时候,可以把它禁用下,被禁用是灰色的:

3.4统一前置接口+单个业务接口

设置好统一前置登录后,可以再添加业务接口了,这时候就是怎么拿到登录的token,因为要设置到业务请求的Request Header中,此时要用到前置和后置处理器。选中登录请求,添加后置处理器-JSON提取器:

设置变量名token,设置请求结果中提取的方式,$.表示从返回数据的根节点取,.表示向下取值,通过属性名获取,因为我们登录接口返回形如:

{

    "access_token": "String",

    "token_type": "String",

    "refresh_token": "String",

    "expires_in": 43199,

    "scope": "ddd"

}

所以用$..access_token。Match No忘记了,可以自己查下,这里填1。

再添加前置处理器-BeanShellProcessor:

参数那里写${token},类似FreeMarker的语法,脚本那里:

String token=bsh.args[0];获取token

${__setProperty(accessToken,${token},)};设置全局属性为accessToken

对登录请求设置完后,再设置下业务接口的HTTP信息头管理器,Authorization的值为${__P(accessToken,)},P表示全局属性P()表示从全局属性中获取一个属性,有点类似函数吧,${}表示获取全局属性中的token的值:

可以在登录请求那里添加一个调试后置处理程序用于测试是否取到了token:

默认设置:

添加了调试后置处理程序将会在的响应数据中看到打印的token,请求后可以看下察看结果树的子节点:

业务接口:

还可以对请求设置各种断言,断言在Java中也有,作用就是预判结果走向,如果不符合预期说明错误。比如响应结果断言,Assert JSON Path exists表示返回的JSON中有什么属性,Expected Value表返回值,可以勾选正则表达式选项,表示正则匹配:

请求错误,断言失败,显示红色:

并发运行,设置线程组的线程属性:

3.5批量接口(无需登录)

正如上面所说,一个线程组可以有多个任务,也就是可以同时跑多个线程:

这篇关于JMeter入门使用,手把手教(接口测试和压测)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1055669

相关文章

Conda与Python venv虚拟环境的区别与使用方法详解

《Conda与Pythonvenv虚拟环境的区别与使用方法详解》随着Python社区的成长,虚拟环境的概念和技术也在不断发展,:本文主要介绍Conda与Pythonvenv虚拟环境的区别与使用... 目录前言一、Conda 与 python venv 的核心区别1. Conda 的特点2. Python v

Spring Boot中WebSocket常用使用方法详解

《SpringBoot中WebSocket常用使用方法详解》本文从WebSocket的基础概念出发,详细介绍了SpringBoot集成WebSocket的步骤,并重点讲解了常用的使用方法,包括简单消... 目录一、WebSocket基础概念1.1 什么是WebSocket1.2 WebSocket与HTTP

C#中Guid类使用小结

《C#中Guid类使用小结》本文主要介绍了C#中Guid类用于生成和操作128位的唯一标识符,用于数据库主键及分布式系统,支持通过NewGuid、Parse等方法生成,感兴趣的可以了解一下... 目录前言一、什么是 Guid二、生成 Guid1. 使用 Guid.NewGuid() 方法2. 从字符串创建

Python使用python-can实现合并BLF文件

《Python使用python-can实现合并BLF文件》python-can库是Python生态中专注于CAN总线通信与数据处理的强大工具,本文将使用python-can为BLF文件合并提供高效灵活... 目录一、python-can 库:CAN 数据处理的利器二、BLF 文件合并核心代码解析1. 基础合

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互