- 简介
- Jmeter的安装
- 环境配置
- Jmeter的安装
- bin目录中的内容
- Jmeter开发时可能需要安装的其余软件
- Jmeter的各大组件
- Test Plan
- Thread Group
- 多个线程同时开始运行or一个结束下一个再运行
- 测试方案中暂时不用此线程组时,点禁用,不必删除
- 取样器Sampler
- 逻辑控制器Logic Controller
- 配置元件config element
- 各组件的作用域
- Jmeter的使用
- Jmeter的启动(从[官方文档](http://jmeter.apache.org/usermanual/get-started.html)1.4开始补入,通过新建一个启动项setenv.bat来绕过配置环境变量)
- 创建线程组
- 设置集合点(同步定时器 Synchronizing Timer)
- 打印线程号(使用 函数助手(Function Helper)中的功能)
- Jmeter的设置
- 切换Jmeter的语言
- 设置Jmeter可使用的内存
- 使用用途
- 性能测试
- 录制脚本
- ${username}
此处先给出Jmeter的官网地址和官网使用文档。官网提供了两种下载版本——Binaries和Source,如下图红框所示。Binaries版本表示已经编译后,可以直接拿来运行的版本;Source版本表示源代码版本,还需要自己编译后才能运行。
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的安装按照官方说明文档中的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目录中主要包含启动项和一些你可能会用到的额外 脚本(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
- 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”,可以向测试计划中添加个组件。
其他所有组件的容器,所有组件均需放置到测试计划中才能工作,其内容详情如下所示。可通过第二个红框中的Browse(浏览)按钮来将jar包导入Jmeter。
在Jmeter中使用线程,是在测试方案中创建Thread Group,然后再在Thread Group中创建各个线程,用来模拟用户。在Thread Group详情页设置创建线程的数量、总时间、循环次数,用于模拟用户的并发,比如200个用户就创建200个线程。如何在线程组中实现“仅可创建一个”的效果,补入本文
多个线程同时开始运行or一个结束下一个再运行在测试方案的设置界面进行设置,点击“测试方案”,右侧设置页面红框位置。勾选后,会一个一个运行线程组(此种设计适用于有前置关系的线程间使用);取消勾选会同时并发运行测试方案中设置的多个线程组。
右键该线程组,点击禁用“Disable”即可,下次运行便不会运行此线程组。
【(JMeter中唯一真正)向服务器发送请求】,并等待服务器的响应,被誉为“真正干活的”。
取样器必须在线程组下创建,通过右键线程组来进行创建,不能创建在Test Plan下。
逻辑控制器Logic Controller控制sampler发送请求的逻辑顺序,或控制sampler本身,来模拟复杂请求。
配置元件config element仅对所在分支树有效。
各组件的作用域靠测试计划的树形结构中元件间的父子关系确定。
- 取样器Sampler:不与其他元件相互作用,所以不存在作用域的问题。
- 逻辑控制器Logic Controller:只对 自己 子节点中的“取样器”和“逻辑控制器”起作用。
- 取样器Sampler的子节点(是采样器和逻辑控制器之外的其他六类元件类型时),该子节点仅对同父的其他子节点起作用(自认,待确认)。
- 取样器Sampler以外类型的子节点(是采样器和逻辑控制器之外的其他六类元件类型时),该子节点对同父的其他子节点及其下所有节点都起作用(即包括子节点的子节点)。
通过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请求,
右键“线程组”,依次选择Add——timer——Synchronizing Timer进行创建,并且要注意集合点放在被测业务请求之前。补入这篇博客。注意,集合点放在被测业务请求之前,待自己确认。
点击功能栏的对应按钮,如下图所示。
在d出的对话框中,选择需要的函数,比如本次要打印线程号,所以要选中“threadNum”,然后点击“Generate&Copy to clipboard”。
点击该按钮后,会在Function syntax框内显示此次代表线程号的变量${__threadNum},如下图所示。然后Jmeter会将${__threadNum}自动存到系统的粘贴板下,直接粘贴就可以使用了。
${__threadNum}是按照第几次循环计数的,比如循环三次,那么这个数就会在每一次循环之后加1,所以会有1、2、3三种取值。
如下图所示的方法,仅能临时设置,即关闭Jmeter后再次启动又变回英文。
若想始终设置为中文,需要修改Jmeter根目录下的bin文件夹下的jmeter.properties,如下图所示。将第一个红框中的language设置为zh_CN,第二个红框中是目前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条)