jmeter基本教程

2023-10-30

目录

1、简述

2、下载安装

3、基础设置

Jmeter的语言切换

修改Jmeter默认编码为utf-8解决控制台乱码

4、编写项目测试脚本

4.1、添加线程组

4.2、添加测试接口

4.3、添加察看结果树

4.4、添加用户自定义变量

4.5、json断言(因为我这里返回是json,其他需求更据实际情况选择)

4.6、添加聚合报告

5、性能测试

后记

1、简述

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

2、下载安装

由于Jmeter是基于java开发,首先需要下载安装JDK,配置环境变量。JMeter最低要求Java 8,可兼容更高版本,官网建议使用最低要求版本。

Jmeter官网下载地址:https://jmeter.apache.org/download_jmeter.cgi

下载Jmeter

下载完成后解压zip包,找到bin目录下 apache-jmeter-5.2.1\bin\jmeter.bat双击启动Jmeter

启动Jmeter

  • 注意:打开的时候会有两个窗口,Jmeter的命令窗口和Jmeter的图形操作界面,不可以关闭命令窗口。

大致界面

3、基础设置

Jmeter的语言切换

  • 临时方法:依次点击 OptionsChoose LanguageChinese(Simplified) 可切换为简体中文,仅针对本次,关闭Jmeter后下次启动会恢复默认语言。

切换语言

  • 永久方法:打开Jmeter解压后文件下的bin目录,找到jmeter.properties文件并用编辑器打开,在#language=en下面插入一行language=zh_CN,修改后保存,重启Jmeter界面默认显示为中文简体。

修改默认语言

修改Jmeter默认编码为utf-8解决控制台乱码

  • 打开Jmeter解压后文件下的bin目录,找到jmeter.properties文件并用编辑器打开
  • #The encoding to be used if none is provided (default ISO-8859-1)#sampleresult.default.encoding=ISO-8859-1
  • 下面插入一行#The encoding to be used if none is provided (default utf-8)、sampleresult.default.encoding=utf-8
  • 修改后保存重启Jmeter

修改编码

4、编写项目测试脚本

4.1、添加线程组

  • 右键点击 "测试计划” → “添加” → “线程(用户)” → “线程组”

新建线程组

  • 配置线程组参数

配置

线程组主要参数详解:

  1. 线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。模拟多少用户访问也就填写多少个线程数量。

  2. Ramp-Up时间(秒):设置的虚拟用户数需要多长时间全部启动。如果线程数为100,准备时长为5,那么需要5秒钟启动100个线程,也就是每秒钟启动20个线程。 相当于每秒模拟20个用户进行访问,设置为零我理解为并发访问。

  3. 循环次数:如果线程数为100,循环次数为100。那么总请求数为100*100=10000 。如果勾选了“永远”,那么所有线程会一直发送请求,直到选择停止运行脚本。

4.2、添加测试接口

  • 右键点击 “你的线程组” → “添加” → “取样器” → “HTTP请求”

添加请求

  • 填写接口请求参数,我这里对本地的 Spring-boot 服务进行测试(本教程所用demo源码在文章最后),可以参考下图填写:

填写接口

Http请求主要参数详解(做过接口测试的应该上手很快):

  • 协议:向目标服务器发送HTTP请求协议,可以是HTTPHTTPS,默认为HTTP
  • 服务器名称或IP :HTTP请求发送的目标服务器名称或IP
  • 端口号:目标服务器的端口号,默认值为80
  • 方法:发送HTTP请求的方法,可用方法包括GETPOSTHEADPUTOPTIONSTRACEDELETE等。
  • 路径:目标URL路径(URL中去掉服务器地址、端口及参数后剩余部分)。
  • 内容编码:编码方式,默认为ISO-8859-1编码,这里配置为utf-8
  • 参数:同请求一起发送参数 ,在请求中发送的URL参数,用户可以将URL中所有参数设置在本表中,表中每行为一个参数(对应URL中的 key=value),注意参数传入中文时需要勾选“编码”。

4.3、添加察看结果树

  • 右键点击 “你的线程组” → “添加” → “监听器” → “察看结果树”

添加结果

  • 这里,我们修改响应数据格式(你返回什么格式就选什么,我这里是返回json),运行Http请求,可以看到本次请求返回的响应数据。

查看结果

4.4、添加用户自定义变量

  • 添加用户自定义变量用以Http请求参数化,右键点击 “你的线程组” → “添加” → “配置元件” → “用户定义的变量”:

自定义变量

  • 新增一个用户名参数(与你实际请求参数key对应,做过接口测试的应该特别明白)

添加变量

  • 在Http请求中使用该参数,格式为:${key} ,例如:

使用参数

  • 这里我有一个根据用户名查询用户的方法,所以改变参数后,再次运行结果为zero用户数据

再次查看结果树

4.5、json断言(因为我这里返回是json,其他需求更据实际情况选择)

  • 添加断言:右键点击 “你的HTTP请求” → “添加” → “断言” → “json断言”

json断言

  • 配置json断言具体内容

断言内容

  • 断言结果:右键点击 “你的HTTP请求” → “添加” → “监听器” → “断言结果”

断言结果

断言成功

为了演示失败,我将断言内容进行修改为zero

断言失败

4.6、添加聚合报告

  • 右键点击 “你的线程组” → “添加” → “监听器” → “聚合报告”,用以存放性能测试报告

添加报告

到此我们已经完成了一个最基础的接口测试脚本

5、性能测试

  • 为了测试出效果,我这里模拟100个用户并发访问获取数据,循环6次,线程组数据修改如下:

修改线程组

  • 回到聚合报告运行本次压力测试

压力测试

  • 分析测试报告(先得让本次压力测试运行完毕)

测试数据

聚合报告参数详解:

  1. Label:每个 JMeterelement(例如我这里只有一个 Spring WebFlux)都有一个 Name 属性,这里显示的就是 Name 属性的值。

  2. 样本(Samples):请求数——表示这次测试中一共发出了多少个请求,我这里模拟了100个用户循环6次也就为100*6=600

  3. 平均值(Average):平均响应时间(单位:ms)。默认是单个Request的平均响应时间,当使用了Transaction Controller时,也可以是Transaction为单位显示平均响应时间。

  4. 中位数(Median):也就是 50% 用户的响应时间。

  5. 90% 百分位(Line):90% 用户的响应时间。相邻几个*%同意。

  6. 最小值(Min):最小响应时间。

  7. 最大值(Max):最大响应时间。

  8. 异常(Error) %:错误率——错误请求数/请求总数。

  9. 吞吐量(Throughput):吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunnerTransaction per Second 数 。

  10. 接收 KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec

  11. 发送 KB/Sec:每秒向服务器发送的数据量,相当于LoadRunner中的Throughput/Sec

后记

一般而言,性能测试中我们需要重点关注的数据有: 请求数, 平均响应时间, 最小响应时间, 最大响应时间,% 错误率及 吞吐量。 

原文链接:https://www.jianshu.com/p/6bc152ca6126

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jmeter基本教程 的相关文章

  • PHP Github Pull 脚本错误“权限被拒绝(公钥)”

    我已经设置了一个 PHP 脚本来执行 GitHub 拉取 这包含在我的 Github 文件夹中 home mysite public html github github pull php 我的服务器已经有 SSH 公钥 就像我执行git
  • 如何将jscrollpane添加到jframe?

    我有以下源代码 有人可以给我建议如何将 jscrollpane 添加到 jframe 上吗 我尝试了几次将其添加到 jframe 但没有任何进展 它甚至没有显示 public class Form3 JFrame jframe new JF
  • 将SQL数据引入jquery availabletag

    我正在尝试制作自动完成文本框 但如何将 SQL 数据包含到 jquery 可用标记并循环它 我无法根据以下代码执行该功能 任何帮助 将不胜感激 谢谢 这是我的预期输出 预期结果演示 http jsfiddle net VvETA 71 jq
  • 埃拉托色尼筛法 - 实现返回一些非质数值?

    我用 Java 实现了埃拉托斯特尼筛法 通过伪代码 public static void sieveofEratosthenes int n boolean numArray numArray new boolean n for int i
  • 如何在java Spring Boot中实现通用服务类?

    我有许多具有重复代码的服务 我想知道如何实现通用服务 以便我的所有服务都可以扩展它 服务接口示例 重复代码 Service public interface IUserService List
  • 为什么 MOVE CURSOR 在 OS X Mountain Lion 上不显示?

    我正在做一个项目 想看看 Swing 提供的每个光标是什么样子的 public class Test public static void main String args JFrame frame new JFrame frame set
  • 为什么Iterator接口没有add方法

    In IteratorSun 添加了remove 方法来删 除集合中最后访问的元素 为什么没有add方法来向集合中添加新元素 它可能对集合或迭代器产生什么样的副作用 好的 我们开始吧 设计常见问题解答中明确给出了答案 为什么不提供 Iter
  • Android蓝牙java.io.IOException:bt套接字已关闭,读取返回:-1

    我正在尝试编写一个代码 仅连接到运行 Android 5 0 KitKat 的设备上的 目前 唯一配对的设备 无论我尝试了多少方法 我仍然会收到此错误 这是我尝试过的最后一个代码 它似乎完成了我看到人们报告为成功的所有事情 有人能指出我做错
  • 在 MongoDB 和 Apache Solr 之间同步数据的简单方法

    我最近开始使用 MongoDB 和 Apache Solr 我使用 MongoDB 作为数据存储 并且希望 Apache Solr 为我的数据创建索引 以实现应用程序中的搜索功能 经过一些研究 我发现 基本上有两种方法可以在 MongoDB
  • Java:从集合中获取第一项

    如果我有一个集合 例如Collection
  • 如何通过注解用try-catch包装方法?

    如果应该在方法调用中忽略异常 则可以编写以下内容 public void addEntryIfPresent String key Dto dto try Map
  • 从休眠乐观锁定异常中恢复

    我有一个这样的方法 Transactional propagation Propagation REQUIRES NEW public void doSomeWork Entity entity dao loadEntity do some
  • 从子域中的 ../ 路径

    假设我创建了一个子域 http subdomain mydomain com http subdomain mydomain com 最初是在这个网址 http mydomain com subfolder folder http mydo
  • Java:如何确定文件所在的驱动器类型?

    Java 是否有一种独立于平台的方法来检测文件所在的驱动器类型 基本上我有兴趣区分 硬盘 可移动驱动器 如 USB 记忆棒 和网络共享 JNI JNA 解决方案不会有帮助 可以假设 Java 7 您可以使用 Java 执行 cmd fsut
  • 如何从日期中删除毫秒、秒、分钟和小时[重复]

    这个问题在这里已经有答案了 我遇到了一个问题 我想比较两个日期 然而 我只想比较年 月 日 这就是我能想到的 private Date trim Date date Calendar calendar Calendar getInstanc
  • 如何通过 Android 按钮单击运行单独的应用程序

    我尝试在 Android 应用程序中添加两个按钮 以从单独的两个应用程序订单系统和库存系统中选择一个应用程序 如图所示 我已将这两个应用程序实现为两个单独的 Android 项目 当我尝试运行此应用程序时 它会出现直到正确选择窗口 但是当按
  • IntelliJ 组织导入

    IntelliJ 是否具有类似于 Eclipse 中的组织导入功能 我拥有的是一个 Java 文件 其中多个类缺少导入 例子 package com test public class Foo public Map map public J
  • 禁用 Android 菜单组

    我尝试使用以下代码禁用菜单组 但它不起作用 菜单项仍然启用 你能告诉我出了什么问题吗 资源 菜单 menu xml menu menu
  • 如何处理 StaleElementReferenceException

    我正在为鼠标悬停工作 我想通过使用 for 循环单击每个链接来测试所有链接的工作条件 在我的程序中 迭代进行一次 而对于下一次迭代 它不起作用并显示 StaleElementReferenceException 如果需要 请修改代码 pub
  • Java 的 PriorityQueue 与最小堆有何不同?

    他们为什么命名PriorityQueue如果你不能插入优先级 它看起来与堆非常相似 有什么区别吗 如果没有区别那为什么叫它PriorityQueue而不是堆 默认的PriorityQueue是用Min Heap实现的 即栈顶元素是堆中最小的

随机推荐

  • 打开运行PS、AI等软件时卡在启动窗口的解决办法

    在运行 Adobe Photoshop Illustrator PR等软件时 如果遇到卡在启动页面 可以尝试用下面方法解决 Mac软件资源下载站https mac macsc com id Mjk0ODE5 先将卡住的应用强制退出 左上角
  • 计算机键盘盲打方法,电脑键盘盲打练习方法 盲打键盘指法练习技巧

    小编在小学的时候电脑老师就教过打字 但是那时候还不会盲打 当时各种羡慕会盲打的童鞋 如今已经会盲打了 也想将练习盲打的一些技巧分享给大家 电脑键盘盲打练习方法 盲打键盘指法练习技巧 1 所谓标准指法就是把你的双手依照下图的位置放在键盘上 即
  • chrome - 开发者工具调试技巧

    谷歌浏览器 通常简称为 Chrome 是由谷歌开发的网络浏览器 在开发工作中 Chrome极大的方便开发调试代码 主流的浏览器都内置了 DevTools 掌握 Chrome 的调试技巧 可以提高工作效率 对于测试人员来说 掌握Chrome
  • 测试php中接收call_user_func_array抛出的异常

    1 首先新建一个mytest数据表 表引擎注意使用的innodb CREATE TABLE mytest id int 11 NOT NULL AUTO INCREMENT name varchar 30 NOT NULL DEFAULT
  • Vue的MVVM原理

    MVC 传统的MVC是指用户的操作会调用服务器接口 服务器将处理结果返回给前端Model 然后页面进行重新渲染 MVVM MVVM模型则是指ViewModel通过Data Bindings绑定数据来监听数据的变化 从而更新页面的DOM Vi
  • 如何用html调出磁盘空间,磁盘空间满了?SpaceSniffer 让硬盘空间容量使用一目了然!...

    本来用得好好的电脑 某一天打开之后发现系统盘C盘显示红色 也就是说磁盘空间满了 但是想来想去C盘里也没有什么大的文件 最近也没有安装过什么大型程序 奇怪了 怎么办 C盘下这么多文件如何查找和判断 这里请出非常好用的 SpaceSniffer
  • uniapp小程序分享功能onShareAppMessage函数传参数

    1 使用onShareAppMessage函数 在页面的js文件中定义了 onShareAppMessage 函数时 页面可以表示该页面可以转发 可以在函数中设置页面转发的信息 1 只有定义了该函数 小程序右上角的菜单中才会有转发按钮 2
  • 短视频seo矩阵系统开发者源码打包

    foreach video list as item item video num material model gt getMaterialCountByVideo item dv id 1 item audio num material
  • 在Mac/win10上将Python 3设置为默认

    which python3 alias python usr bin python3 pip3同理 pip3更换为国内镜像 pip3 config set global index url https pypi tuna tsinghua
  • 程序员11月书讯

    10月书讯中奖名单 iorilan 极简 逆流的鱼yuiop mlcjq Marksinoberg 好书推荐 在图灵书讯中选出你认为值得推荐的好书加推荐理由或推荐语 在文末评论里回复 下期书讯更新时 会在本期的书讯评论中选出若干优秀评论 获
  • 一个完整的软件项目管理流程包括什么?有什么软件项目管理工具?

    软件项目管理全流程 及各环节方法 辅助工具 项目的类型不同 其流程必然会不一样 关于通用项目管理的流程其他回答讲述已经非常完善 个人推荐这篇 泛项目管理流程包括哪些 这里就不再赘述 这里要分享的是关于软件项目管理的流程是什么样的 以及我们使
  • 突发!ChatGPT之父警告AI可能灭绝人类,350名AI权威签署联名公开信

    外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 img Xij9fMAd 1685974950524 C Users lenovo AppData Local Temp ksohtml3116 wps1 jpg 就在刚刚
  • 多标记学习(大大杂烩,有点乱)

    多标记学习算法 算法分类 按相关性划分 一阶 first order 策略 该类策略通过逐一考察单个标记而忽略标记之间的相关性 如将多标记学习问题分解为 个独立的二类分类问题 从而构造多标记学习系统 该类方法效率较高且实现简单 但由于其完全
  • Unity导入FBX动画文件

    给刚入门的同学稍微记一下fbx格式动画导入unity的步骤 首先直接把fbx文件拖入unity内 如图操作 将avatar骨骼创建之后 我们接下来就根据自己对动画的一些需求设置一下动画的参数 比如截取一下动画的开始帧和结束帧来达到剪切的目的
  • 使用vue实现幻灯片

    1 在父组件中
  • JS事件循环机制(event loop)之宏任务/微任务

    原文地址 Tasks microtasks queues and schedules 视频讲解地址 https www bilibili com video av83625811 from search seid 6644038259868
  • 测试磁盘寻道时间

    分析性能时 文件系统读取速度不定 主要因为时间不仅花在读取上 还花在磁盘旋转和寻道上 写了一段代码测试这个的时间 一般普通硬盘是10ms左右 有两个函数 第一个函数是生成50G数据 第二个函数是测试 package WebGis Tile
  • OPTICS 点云聚类算法 (附python代码)

    OPTICS Ordering Points To Identify the Clustering Structure 和DBSCAN Density Based Spatial Clustering of Applications wit
  • QObject::connect: Cannot queue arguments of type ‘XXX‘

    1 开发环境 Win10 64bit Qt5 4 2 64bit 2 错误描述 在不同线程之间通过信号 槽来传递自定义数据类型QList
  • jmeter基本教程

    目录 1 简述 2 下载安装 3 基础设置 Jmeter的语言切换 修改Jmeter默认编码为utf 8解决控制台乱码 4 编写项目测试脚本 4 1 添加线程组 4 2 添加测试接口 4 3 添加察看结果树 4 4 添加用户自定义变量 4