JMeter

简介

Jmeter是一个开源、纯JAVA编写的工具,支持【二次开发(用于在Jmeter本身难以适用的一些场景,可以通过二次开发来改变Jmeter,此处不是指Beanshell,而是真地去修改Jmeter自身工程的代码)】;多线程框架-支持请求并发操作;支持Web、数据库、FTP服务器等各类系统性能测试。

Jmeter的下载

此处先给出Jmeter的官网地址官网使用文档。官网提供了两种下载版本——BinariesSource,如下图红框所示。
在这里插入图片描述

  • Binaries版本表示已经编译后,可以直接拿来运行的版本——找到项目目录下的bin文件夹中的jmeter.bat,双击启动即可;PS.自己因为不需要二次开发,所以直接选择了Binaries
  • Source版本表示源代码版本,还需要自己编译后才能运行。自认,主要用于Jmeter的二次开发注意,若使用Source源代码版本,可能会遇到下载下来的项目中没有依赖的jar包,此时可以再下载Binaries版本,从编辑好的项目中取出需要的jar包,导入到Source源代码版本中来

Source源代码版本的Jmeter项目导入Eclipse的方法:
①在Eclipse中创建新项目,选择JAVA Project,如下图所示。
在这里插入图片描述
②将前面下载好的Source源代码版的Jmeter项目导入到上一步中创建的eclipse的JAVA Project中,如下图所示。
在这里插入图片描述
此处选择"General"中的“File System” ,如下图所示。
在这里插入图片描述
找到Source源代码版本的Jmeter项目,点击Finish按钮即可。
在这里插入图片描述
如果eclipse只支持到JDK1.7,则需要修改到1.8,因为Jmeter需要JDK 1.8以上。
在这里插入图片描述
有博客提到,下载好的源代码版的jmeter项目缺少一些jar包,导致导入eclipse后依然无法正常运行,其提到需要补充的jar包如下:

  • bcmail-jdk15on-1.47
  • bcpkix-jdk15on-1.47
  • bcprov-jdk15on-1.47
  • spock-core-0.3

缺少的jar包①可以从Binaries版的Jmeter中取出需要的jar包,导入到Source源代码版本中来②(此方法有待验证)也可以通过工程中的build.xml文件去下载jmeter需要的各种jar包——在工程build.xml右击选择run as 然后选择ant build

Jmeter是apache的纯Java开源项目,目前主要用来 “加载测试的行为(自认是指,录制脚本之意)” 和 “进行性能测试”。它可以用来测试静态和动态资源(static and dynamic resources)和Web工程(Web dynamic applications)。其最初是用来测试Web工程(Web dynamic applications),但现在已经被拓展到了很多其他测试领域,比如①模拟 一个服务器、一组服务器、一个网络或着一个对象在较大负载下的承受能力 ②分析 其(指 一个服务器、一组服务器、一个网络或着一个对象)在不同负载类型下的总体性能。

其优势有四:

  • 多线程框架,支持多并发操作。Jmeter本身是Java进程,创建用户数是创建多个线程。

  • 对服务器模拟负载,它可以模拟高负载情况下的 单个服务器/一组服务器/网络/object(指其余对象 or Java对象),以测试它们的抗压能力,还可以分析他们在不同负载情况下的整体性能。

    这些对象包括不同的应用、服务器、协议类型(网络中的HTTP和HTTPS协议、接口中的Webservices、文件传输的FTP协议、数据库中的JDBK、网络通信的TCP协议、Java objects指开发中的类?)

  • 支持各种服务器的性能测试,比如Web、数据库、FTP服务器系统等等。

  • 开源、纯Java、可二次定制开发。

Jmeter的安装

Jmeter的安装按照官方说明文档中的1.3部分进行即可。

环境配置

因为Jmeter是纯Java项目,所以使用Jmeter前,需要安装指定版本以上的JDK。官网使用指南中提到,从下载的版本Jmeter5.4.1需要至少JDK 1.8以上的版本(网上说 Jmeter 5以上版本 需要配套 JDK1.8以上)。

Jmeter的安装

去官网下载合适版本的Jmeter,安装/解压后即可。请注意,官方文档中提到的,Jmeter的安装路径不可出现空格,原文如后所示There can be problems (especially with client-server mode) if the directory path contains any spaces.

官网文档中提到了解压后的文件目录,根节点“apache-jmeter-X.Y”代表Jmeter的根目录(即我们解压下载的压缩包后,最外层的文件夹)。一个完整的Jmeter,其根目录下应包含bin、docs、extras、licenses、printable_docs、lib及其下的ext、junit文件夹,如下图所示。根节点“apache-jmeter-X.Y”可以重命名,但其下的bin等文件夹名称不可修改。
在这里插入图片描述

bin目录中的内容

bin目录中主要包含启动项和一些你可能会用到的额外 脚本(script),官网原话:There are some additional scripts in the bin directory that you may find useful. Windows script files (the .CMD files require Win2K or later)。下面给出官网对bin目录中的一些常用文件的介绍,首先是bin目录下的三个Windows批处理文件:

  • jmeter.bat:run JMeter (in GUI mode by default),在文件夹中显示为jmeter[.bat]文件
  • jmeterw.cmd:run JMeter without the windows shell console (in GUI mode by default)
  • jmeter-n.cmd:drop a JMX file on this to run a CLI mode test
  • jmeter-n-r.cmd:drop a JMX file on this to run a CLI mode test remotely
  • jmeter-t.cmd:drop a JMX file on this to load it in GUI mode
  • jmeter-server.bat:start JMeter in server mode,分布式模式启动jmeter。
  • mirror-server.cmd:runs the JMeter Mirror Server in CLI mode
  • shutdown.cmd:Run the Shutdown client to stop a CLI mode instance gracefully
  • stoptest.cmd:Run the Shutdown client to stop a CLI mode instance abruptly

Jmeter开发时可能需要安装的其余软件

  • JDK 8及以上版本:用于编写Jmeter代码和开发Jmeter插件。
  • SAX XML解析器:JMeter附带Apache的Xerces XML解析器。如果您想在Jmeter中使用其他的XML解析器,可以在JMeter的类路径中添加第三方解析器的类,并将实现该解析器的完整类名更新到JMeter.properties文件中。
  • Email Support:支持根据测试结果发送电子邮件。
  • SSL加密:为了使用SSL加密(HTTPS)测试web服务器,JMeter要求提供SSL的实现,就像Sun Java 1.4及更高版本要求的一样。【如果您的Java版本不包括SSL支持,则可以添加外部实现:①在JMeter的类路径中添加必要的加密包。②更新system.properties以注册SSL提供程序】。
    JMeter HTTP默认为协议级TLS。这可以通过编辑JMeter.properties或user.properties中的JMeter属性https.default.protocol来更改。

JMeter HTTP采样器配置为接受所有证书,无论是否可信,也不管有效期等。这是为了在测试服务器时提供最大的灵活性。

如果服务器需要客户端证书,则可以提供该证书。

还有SSL管理器,用于更好地控制证书。

JMeter代理服务器(见下文)支持记录HTTPS(SSL)

SMTP采样器可以选择使用本地信任存储或信任所有证书。

Jmeter的各大组件

右键测试计划,选择“Add”,可以向测试计划中添加个组件。
在这里插入图片描述

Test Plan

其他所有组件的容器,所有组件均需放置到测试计划中才能工作,其内容详情如下所示。可通过第二个红框中的Browse(浏览)按钮来将jar包导入Jmeter
在这里插入图片描述

Thread Group

在Jmeter中使用线程,是在测试方案中创建Thread Group,然后再在Thread Group中创建各个线程,用来模拟用户。在Thread Group详情页设置创建线程的数量、总时间、循环次数,用于模拟用户的并发,比如200个用户就创建200个线程。如何在线程组中实现“仅可创建一个”的效果,补入本文

多个线程同时开始运行or一个结束下一个再运行

在测试方案的设置界面进行设置,点击“测试方案”,右侧设置页面红框位置。勾选后,会一个一个运行线程组(此种设计适用于有前置关系的线程间使用);取消勾选会同时并发运行测试方案中设置的多个线程组。
在这里插入图片描述

测试方案中暂时不用此线程组时,点禁用,不必删除

右键该线程组,点击禁用“Disable”即可,下次运行便不会运行此线程组。
在这里插入图片描述

取样器Sampler

【(JMeter中唯一真正)向服务器发送请求】,并等待服务器的响应,被誉为“真正干活的”

取样器必须在线程组下创建,通过右键线程组来进行创建,不能创建在Test Plan下。

逻辑控制器Logic Controller

控制sampler发送请求的逻辑顺序,或控制sampler本身,来模拟复杂请求。

配置元件config element

仅对所在分支树有效。

各组件的作用域

靠测试计划的树形结构中元件间的父子关系确定。

  • 取样器Sampler:不与其他元件相互作用,所以不存在作用域的问题
  • 逻辑控制器Logic Controller:只对 自己 子节点中的“取样器”和“逻辑控制器”起作用。
  • 取样器Sampler的子节点(是采样器和逻辑控制器之外的其他六类元件类型时),该子节点仅对同父的其他子节点起作用(自认,待确认)
  • 取样器Sampler以外类型的子节点(是采样器和逻辑控制器之外的其他六类元件类型时),该子节点对同父的其他子节点及其下所有节点都起作用(即包括子节点的子节点)。

Jmeter的使用

Jmeter的启动(从官方文档1.4开始补入,通过新建一个启动项setenv.bat来绕过配置环境变量)

通过bin目录下的jmeter.bat (for Windows,即Windows批处理文件) or jmeter (for Unix) file,可以以 图形模式(GUI mode )启动Jmeter。官方文档要求,GUI mode应当用于创建测试脚本,CLI mode (NON GUI) 必须被用来负载测试。

双击jmeter.bat启动时,会先打开命令提示行,提醒不要使用GUI mode来执行负载测试方案,GUI仅限于测试方案的创建和调试,如下图所示。随后,启动Jmeter的图形界面。
在这里插入图片描述

配置Jmeter_Home变量(Jmeter安装路径)和Path变量(Jmeter的bin路径),若没有path变量,则需要在命令提示行中先cd到jmeter.bat所在目录。
配置完成后,打开命令提示行,直接输入jmeter就可启动Jmeter。

在命令提示行中输入jmeter指令启动时,会提醒不要使用GUI(图形界面)来进行压力测试,GUI(图形界面)是用于测试计划的创建和 调试?(debugging)。Jmeter建议仅用CLI(即命令提示行)进行压力测试,以减少资源占用(GUI模式会占用电脑资源从而影响服务器的性能)。

创建线程组

用线程组来模拟用户,右键测试方案(test-plan),依次选择“Add”——“Thread”——“Thread Group”,如下图所示。
从中可以看到,红框下面还有两种线程组,第一个setUp线程组 表示初始化线程组,其会运行在Thread Group之前;第二个tearDown线程组,其会运行在Thread Group之后,用于环境清除(清理收尾)。
在这里插入图片描述
点击创建好的线程组,右侧就会出现该线程组的详情页面,如下图所示。右侧第一个红框中输入的是线程数(模拟的用户数),第二个红框中输入的是时间(要在此时间内启动完所有线程,即代表在此时间内所有用户访问完)。第二个红框下有一个“Loop Count”表示循环次数,勾选“Infinite”表示永远。第三个红框是设定请求的持续时间和启动延迟。若要设置此,需要先勾选第三个红框上方的“Specify Thread lifetime”,否则第三个红框的内容是灰色的,无法编辑。若同时设定了“几秒内启动完多少线程数”和“线程持续时间”,以第一个设定——“几秒内启动多少线程数”为主,第二个设定“线程持续时间”失效;若同时设定了“几秒内启动完多少线程数”和“线程持续时间”,但是第一个设定中还勾选了Loop Count(循环次数)中的永远,则此时以第二个设定“线程持续时间”为准。左侧红框中的“HTTP Request Defaults”用于设置默认的HTTP请求,
在这里插入图片描述

设置集合点(同步定时器 Synchronizing Timer)

右键“线程组”,依次选择Add——timer——Synchronizing Timer进行创建,并且要注意集合点放在被测业务请求之前。补入这篇博客注意,集合点放在被测业务请求之前,待自己确认
在这里插入图片描述

打印线程号(使用 函数助手(Function Helper)中的功能)

点击功能栏的对应按钮,如下图所示。
在这里插入图片描述
在弹出的对话框中,选择需要的函数,比如本次要打印线程号,所以要选中“threadNum”,然后点击“Generate&Copy to clipboard”
在这里插入图片描述
点击该按钮后,会在Function syntax框内显示此次代表线程号的变量${__threadNum},如下图所示。然后Jmeter会将${__threadNum}自动存到系统的粘贴板下,直接粘贴就可以使用了
在这里插入图片描述
${__threadNum}按照第几次循环计数,比如循环三次,那么这个数就会在每一次循环之后加1,所以会有1、2、3三种取值。

Jmeter的设置

切换Jmeter的语言

如下图所示的方法,仅能临时设置,即关闭Jmeter后再次启动又变回英文。
在这里插入图片描述
若想始终设置为中文,需要修改Jmeter根目录下的bin文件夹下的jmeter.properties,如下图所示。将第一个红框中的language设置为zh_CN,第二个红框中是目前Jmeter支持设置的语言种类。
在这里插入图片描述

设置Jmeter可使用的内存

用于解决启动Jmeter时提示heap out of memory问题,编辑Jmeter根目录下的bin文件夹下的Jmeter.bat文件(右键——编辑,而非右键——打开,否则会直接启动Jmeter),如下图所示。
在这里插入图片描述
第一个下划线-Xms 1g是指定Jmeter启动时,初始堆为1G(先占用1G的内存);第二个下划线-Xmx 1g是指定Jmeter能使用的最大内存数,本例中Jmeter能使用的最大内存为1G(有博主提到,最多给Jmeter电脑总内存的80%)。

使用用途

性能测试

进行性能测试,并生成测试报告,详见这篇博客

补入本文:“通常进行性能测试时,我们一般只考虑主要的数据返回,不考虑页面渲染所需要的数据(例如:css、js、图片等)。但当我们需要衡量打开一个页面(页面渲染完成)的性能时,我们就需要考虑完成页面渲染所需要的图片、css、js等资源文件,因为这些数据的传输等也会消耗系统、网络等资源。因而测试页面的性能,尤其是含有大图片、大文件等,就必须要考虑这些资源的性能消耗。比如我们要测试用户登录模块的性能,以前我们只需要考虑用户名与用户密码到数据库进行校验的过程 。而真实情况要考虑CSS,JS全部的,就可以通过事务控制器元件将所有的请求作为一个事务来看待”。其次,关于测试的事例 和 “从性能测试结果发现问题(文章结尾)”也一并补入。

可以做分布式压力测试

录制脚本

补入这篇博客,解决了录制步骤不存放在线程组内的问题这篇

${username}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值