一、jmeter安装
1、安装java
2、安装jmeter
(1)官网下载最新版zip包:http://jmeter.apache.org/download_jmeter.cgi
(2)解压下载的zip包到自定义路径即可,例如:D:\Program Files\jmeter
3、运行jmeter
(1)进入jmeter解压路径的\bin路径下,例如:
D:\Program Files\jmeter\apache-jmeter-4.0\bin
(2)双击jmeter.bat
即可运行jmeter。
4、安装插件
(1)下载
plugins-manager.jar
:http://www.jmeter-plugins.org/get/
(2)将下载的jar包放到jmeter路径的\lib\ext路径下,例如:D:\Program Files\jmeter\apache-jmeter-4.0\lib\ext
(3)启动jmeter,菜单栏【选项】会多出一个【Plugins Manager】的选项。
(4)点击 【Plugins Manager】选项打开jmeter插件管理。
- Installed Plugins:显示已安装的插件。
- Available Plugins:显示可安装的插件。
- Upgrades:显示可以升级的插件。
(5)通过”勾选/取消勾选”插件,并点击右下角【Apply Changes and Restart JMeter】按钮来卸载、安装、升级插件。
二、jmeter基础原件
1、测试计划
Test Plan 是其它JMeter测试元件的容器,jmeter创建测试的所有内容是于基于一个计划的。
除了测试计划下的元件还有两种控制器。
2、线程用户
Threads (Users)是一个虚拟用户组,线程组内线程数量在运行过程中不会发生改变。
(1)thread group(线程组)
1) 名称:可以给线程组设置一个命名。
2) 注释:可以对线程组添加备注以标记。
3) 在取样器错误后要执行的动作:
- 继续执行后续的。
- 启动下一线程组循环。
- 停止线程。
- 停止测试。
- 立刻停止测试。
4) 线程数:即用户数,一个虚拟用户占用一个进程或线程,需要多少用户并发,设置多少虚拟用户数在这里也就是设置多少个线程数。
5) Ramp-Up Period(in seconds)准备时长:设置的虚拟用户数需要多长时间全部启动。如果线程数为100,准备时长为10,那么需要10秒钟启动100个线程,也就是每秒钟启动10个线程。
6) 循环次数:每个线程发送请求的次数。
- 如果线程数为20,循环次数为100,那么每个线程发送100次请求。总请求数为20*100=2000 。
- 如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。
7) Delay Thread creation until needed:直到需要时延迟线程的创建。
8) 调度器:可以设置线程组启动的开始时间和结束时间。实践结论是配置调度器时,需要设置循环次数为永远,防止因循环次数不够而终止压测。
- 启动时间:测试计划什么时候启动,启动延迟会覆盖它。当启动时间已过,手动运行脚本时也当前时间也会覆盖它(但启动时间页面显示不会变)。
- 结束时间:测试计划什么时候结束,持续时间会覆盖它。
- 持续时间(秒):测试计划持续多长时间,会覆盖结束时间。
- 启动延迟(秒):测试计划延迟多长时间启动,会覆盖启动时间。
3、配置元件
Config Element 用于提供对静态数据配置的支持。
(1)CSV Data Set Config(csv数据文件设置)
1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。
3) Filename:所需数据文件的路径。如和脚本同一路径,可直接填写文件名
4) File encoding:编码和文件保持一致即可,默认为ANSI。如有中文,建议为UTF-8
5) Variable Names:引用变量时的变量名,对应数据文件中的每一列,以逗号分隔。如不填写,文件的第一行数据将被读取为变量名
6) Delimiter:在.txt、.dat文件中,可以用逗号(,)或者Tab键(\t)来区分列与列
7) Allow quoted data:True时,可以使用双引号来识别逗号或双引号(如数据文件中为 1,2,”3,”4”,5” ,则识别出的为A_1=1,B_1=2,C_1=3,”4”,5)
8) Recycle on EOF:到数据文件结尾时是否循环读取。设置为True时,线程数过多,数据文件读取到最后一行时,会再次从第一行开始读取。设置为False,到达文件结尾时如继续读取,则值会默认为,可通过设置jmeter属性csvdataset.eofstring来改变该值。
9) Stop thread on EOF:Recycle on EOF设置为False,Stop thread on EOF设置为True,则读取数据文件最后一行后,停止测试,不管还有多少线程组未执行。
10) Sharing mode:共享模式。默认在所有线程组中使用,可选择每个线程组单独打开
- All threads:文件在所有线程间共享
- Current thread group: 每个文件会针对每个线程组打开一次
- Current thread: 每个文件会针对每个线程单独打开
- Identifier:所有线程共享相同的标识,共享相同的文件。如有4个线程组,测试人员可以使用一个通用ID,以便在两个或多个线程组之间共享文件。
4、监听器
Listener 是用来对测试结果数据进行处理和可视化展示的一系列元件。
(1)View Results in Table(察看结果树)
1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。
3) 所有数据写入一个文件:提供结果保存功能。保存信息可勾选配置。
4) Text下拉列表:用来显示不同的取样器请求,默认Text方式显示。
5) 取样器结果:显示取样器运行结果。
6) 请求:显示请求表单内容,不同取样器会有不同显示格式。
7) 响应数据:显示服务器响应数据,同时还提供查询功能。
(2)Aggregate Report(聚合报告)
1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。
3) 所有数据写入一个文件:提供结果保存功能。保存信息可勾选配置。
4) Label: 请求的名称,就是我们在进行测试的httprequest sampler的名称
5) Samples: 总共发给服务器的请求数量
6) Average: 单个请求的平均响应时间,单位是毫秒
7) Median: 50%的请求的响应时间
8) 90%Line: 90%的请求的响应时间
9) 95%Line: 95%的请求的响应时间
10) 99%Line: 99%的请求的响应时间
11) Min: 最小的响应时间
12) Max: 最大的响应时间
13) Error%: 错误率=错误的请求的数量/请求的总数
14) Throughput: 吞吐量即表示每秒完成的请求数
15) Received KB/sec: 每秒从服务器端接收到的数据量
16) Sent KB/Sec: 每秒从发送到服务器端的数据量
5、定时器
Timer 用于操作之间设置等待时间,等待时间是性能测试中常用的控制客户端QPS的手段。
(1)Constant Timer(固定定时器)
1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。
3) 线程延迟(毫秒):让每个线程在请求之前按相同的指定时间停顿。需要注意的是,固定定时器的延时不会计入单个sampler的响应时间,但会计入事务控制器的时间。
6、前置处理器
Pre Processors 用于在实际的请求发出之前对即将发出的请求进行特殊处理。
(1)User Parameters(用户参数)
1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。
3) 每次迭代更新一次:如果选中该选项,则参数的值在每个迭代中保持不变,在新的迭代开始时取下一个值。如果取消该选项,则参数值在每个在其作用域内的sampler发出请求时取下一个可用值。
4) 添加变量
5) 添加用户
6) 删除变量
7) 删除用户
8) UP:向上移动
9) down: 向下移动
7、后置处理器
Post Processors 用于对Sampler发出请求后得到的服务器响应进行处理。一般用来提取响应中的特定数据。
(1)JSON Extractor(json提取器)
1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。
3) Apply to:Sampler可能会产生子Sampler,这里需要选择从哪个Sampler中进行提取。
- Main sample and sub-samples:作用于父节点的取样器及对应子节点的取样器
- Main sample only:仅作用于父节点的取样器
- Sub-samples only:仅作用于子节点的取样器
- JMeter Variable:作用于jmeter变量(输入框内可输入jmeter的变量名称)
4) Variable Names:变量名。例如:status
5) JSON Path Expressions: Json提取表达式。例如:$.status
6) Match No. (0 for Random):当提取有多个结果值时,选择需要的值保存到变量中,默认值为0
- 0:随机一个
- -1:全部值,使用_N 方式保存(N从1开始),比如status_1,status_2…
- X: 自然数,比如1,返回第X个值(如果X大于返回值的数量,结果会不能获取,最终返回设置的默认值)
7) Compute concatenation var:如果有匹配到多个值,选择此项,会将全部值保存到_ALL,并使用逗号分割每个值。Match No. (0 for Random)需要为-1才有效,不然只能匹配到一个值了。
8) Default Value: 缺省值
8、断言
Assertions 断言用于检查测试中得到的相应数据等是否符合预期,断言一般用来设置检查点。
(1)Response Assertion(响应断言)
1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。
3) Apply to:Sampler可能会产生子Sampler,这里需要选择从哪个Sampler中进行提取。
- Main sample and sub-samples:作用于父节点的取样器及对应子节点的取样器
- Main sample only:仅作用于父节点的取样器
- Sub-samples only:仅作用于子节点的取样器
- JMeter Variable:作用于jmeter变量(输入框内可输入jmeter的变量名称)
4)要测试的响应字段:要检查的项。
- 响应报文
- Documeng(text):测试文件
- URL样本
- 响应代码
- 响应信息
- Response Headers:响应头部
- Ignore status:忽略返回的响应报文状态码
5) 模式匹配规则:
- 包括:返回结果包括你指定的内容
- 匹配:(好像跟Equals查不多,弄不明白有什么区别)
- Equals:返回结果与你指定结果一致
- Substring:返回结果是指定结果的字串
- 否:不进行匹配
6) 要测试的模式:即填写你指定的结果(可填写多个),按钮【添加】、【删除】是进行指定内容的管理
9、测试片段
Test Fragment 是控制器上的一个种特殊的线程组,它在测试树上与线程组处于一个层级。它与线程组有所不同,因为它不被执行,除非它是一个模块控制器或者是被控制器所引用时才会被执行。
(1)Test Fragment(测试片段)
1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。
10、非测试元件
Non-Test Elements 提供http镜像服务、http代理服务、属性显示等功能。
1)Property Display(属性显示)
1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。
3) System:系统变量。
4) Jmeter Properties:jmeter变量。
11、取样器
Sampler 是测试中向服务器发送请求,记录响应信息,记录响应时间的最小单元。
(1)HTTP Sampler(HTTP取样器)
1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。
3) 协议:向目标服务器发送http请求时的协议,http/https,大小写不敏感,默认http.
4) 服务器名称或IP:http请求发送的目标服务器名称或者IP地址。
5) 端口号:目标服务器的端口号,默认值为80,可不填
6) 方法:发送http请求的方法
- GET:向特定的资源发出请求。
- POST:向指定资源提交数据进行处理请求。
- HEAD:获得报文首部
- PUT:向指定资源位置上传其最新内容。
- OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。
- TRACE:追踪路径,回显服务器收到的请求,主要用于测试或诊断。
- DELETE:请求服务器删除Request-URI所标识的资源。
- PATCH:实体中包含一个表,表中说明与该URI所表示的原内容的区别。
7) 路径:目标的URL路径(不包括服务器地址和端口)
8) Content encoding:内容的编码方式(Content-Type=application/json;charset=utf-8)
9) 自动重定向:发出的http请求得到响应是301/302,jmeter会重定向到新的界面
10) 跟随重定向:响应Code是3XX时,自动跳转至目标地址。JMeter会记录重定向过程中的所有请求响应。
11) Use keep Alive:jmeter 和目标服务器之间使用 Keep-Alive方式进行HTTP通信(默认选中)。
12) Use multipart/from-data for HTTP POST :当发送HTTP POST 请求时使用。
13) browser-compatible headers:浏览器兼容请求头。
14) Parameters:xx=xx&xxx=xx格式的参数为GET或者POST请求中,url中带的参数值。
- Encode?:参数有“=”、“&”、“?”等特殊符号时选择。
- Include Equals:自动添加参数名和值之间的等号。
15) Body Data:json格式的是POST请求中的参数
16) Files Upload:发出HTTP请求并获得响应的HTML文件内容后还对该HTML进行Parse,并获取HTML中包含的所有资源(图片、flash等):(默认不选中)
17) Implementation:执行
- Java:使用的http是使用的JAVA JVM提供的方法,有相关的限制。
- HttpClient4:使用Apache HttpClient 4.1部件
- 空白:使用HTTP默认请求中的配置或jmeter.properties中jmeter.httpsample中的配置
18) Timeouts:超时
- Connect:连接
- Response:响应
19) Embedded Resources from HTML Files:解析HTML文件并发送所有资源请求(包括图片,java小程序,JS,CSS等)
- 从HTML文件获取所有内含的资源
- Parallel downloads.Number:并行下载.数量
- URLs must match:URL需匹配
20) Source address:IP欺骗,指定请求要用到的本地地址(参数化)。
21) Proxy Server:代理相关设置
- 服务器名称或IP
- 端口号
- 用户名
- 密码
22)Save response as MD5 hash?:在执行时仅记录服务端响应数据的MD5值,而不记录完整的响应数据。在需要进行数据量非常大的测试时,建议选中该项以减少取样器记录响应数据的开销。
12、逻辑控制器
Logic Controller 用来控制采样器的执行顺序。分为两类:一种是控制采样器的逻辑执行顺序,如Loop Controller、If Controller等;一种是对采样器进行分组,方便控制的,如Throughput Controller、Transaction Controller等。
(1)Loop Controller(循环控制器)
1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。
3) Loop Count:循环次数
4) Forever:永远循环
(2)ForEach Controller(遍历循环控制器)
1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。
3) 输入变量前缀:在其中输入需要遍历的用户参数(User Parameter)
4) Start index for loop(exclusive):循环指数开始(唯一)→ 遍历查询的变量范围,开始的值(这里如果不填写,默认从1开始,如果没有1开始的变量,执行时会报错)
5) End index for loop(inclusive):循环指数结束(包含)→ 遍历查询的变量范围,结束的值
6) 输出变量名称:将遍历查询到的符合条件的用户参数赋值给输入变量(Vname),然后就可以在控制器下的取样器使用,格式为${输出变量名}
7) Add””before number:输入变量名称中是否使用“”进行间隔
(3)Switch Controller(转换控制器)
1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。
3) Switch value:控制器具体赋值的value值字段。当Value为空时,默认执行第1个子节点元素。
- 第一种:是数值,Switch控制器下的子节点从0开始计数,通过指定子节点所在的数值来确定执行哪个元素。
- 第二种:是直接指定子元素的名称,比如采样器的Name来进行匹配。当指定的名称不存在时,不执行任何元素。
(4)While Controller(while条件控制器)
1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。
3) Condition(function or variable):条件(函数或变量)。需要注意的是:条件是评估两次,一次取样前,一次随机取样。里面可填入判断依据的条件,可能的条件值有:
- 空白:最后一个示例循环失败时退出循环。
- 最后一个值:最后一个示例循环失败时退出循环。 如果之前的最后一个示例只是循环失败,不进入循环。
- 否则:退出时(或不输入)循环条件等于字符串“ 假 ”
(5)If Controller(IF控制器)
1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。
3) Condition(default javascript)(条件(默认JavaScript)):使用JavaScript的函数或变量进行评估判断条件为真或假
4) interpret condition as variable expression(条件解释为变量表达式):如果勾选该项,那么变量表达式会进行求值,并与“ture”或“false”进行比较,而无需使用JavaScript
5) evaluate for all children(对所有子条件执行):如果勾选该项,则该controller在没一个子节点执行时执行一次;
(6)Module Controller(模块控制器)
1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。
3) Find target element(寻找目标元素):寻找测试计划中需要特定测试的元素,模块;也可理解为该控制器可以控制已经封装好的模块元素。
(7)Simple Controller(简单控制器)
1) 名称:可以给元件一个命名。
2) 注释:可以对元件添加备注以标记。
三、原件作用域和顺序
1、元件的作用域
jmeter中共有8类可被执行的元件(test plan和thread group不属于元件)。
其中:sampler(取样器)是不与其他元件发生交互的作用的元件,Logic Controller(逻辑控制器)只对其子节点的sampler有效,而其他元件需要与sampler等元件交互。
1)Config Elements(配置元件):影响其范围内的所有元件
2)Pre-porcessors(前置处理器):在其作用范围内的每一个sampler元件之前执行
3)Timer(定时器):对其作用范围内的每一个sampler有效
4)Post-porcessors(后置处理器):在其作用范围内的每一个sampler元件之后执行
5)Assirtions(断言):对其作用范围内的每一个sampler元件执行后的结果执行校验
6)Listener(监听器):收集其作用范围内的每一个sampler元件的信息并且呈现出来
在jmeter中,元件的作用域是靠test plan的树形结构中元件的父子关系来确定的,其原则如下:
1) sampler(取样器)不与其他元件相互作用,因此不存在作用域问题
2) Logic Controller(逻辑控制器)只对其子节点中的sampler和Logic Controller作用
3) 除sampler和Logic Controller外的其他元件,如果是某个sampler的子节点,则该元件仅对其父节点作用
4) 除sampler和Logic Controller外的其他元件,如果其父节点不是sampler,则其作用域是该元件父节点下的其他所有后带节点(包括子节点,子节点的子节点等)
2、元件的执行顺序
在同一作用域范围内,test plan中的元件按照以下顺序执行:
1) Config Elements(配置元件)
2) Pre-porcessors(前置处理器)
3) Timer(定时器)
4) Sampler(取样器)
5) Post-porcessors(后置处理器)(除非Sampler得到的返回结果为空)
6) Assirtions(断言)(除非Sampler得到的返回结果为空)
7) Listener(监听器)(除非Sampler得到的返回结果为空)
PS:Pre-porcessors、Post-porcessors和Assirtions等元件仅对Sampler作用,如在它们作用域内没有任何Sampler,则不会被执行;如果在同一作用域范围内有多个同一类型的元件,则这些元件按照它们在test plan中的上下顺序依次执行。
四、jmeter运行模式
1、GUI模式
GUI打开已有的jmx文件,点击启动按钮运行 。
2、命令行模式
(1)依赖:
配置jmeter环境变量(windows下为将${jmeterhome}/bin加入Path变量)。
如果未加入环境变量,在执行的时候可以直接给出全路径或在${jmeterhome}/bin下执行。
(2)命令:jmeter -n -t <testplan filename> -l <listener filename>
- -h 帮助 -> 打印出有用的信息并退出
- -n 非 GUI 模式 -> 在非 GUI 模式下运行 JMeter
- -t 测试文件 -> 要运行的 JMeter 测试脚本文件
- -l jtl文件 -> 记录结果的文件
- -r 远程执行 -> 启动远程服务
- -H 代理主机 -> 设置 JMeter 使用的代理主机
- -P 代理端口 -> 设置 JMeter 使用的代理主机的端口号
- -j 日志文件->设置JMeter日志文件的名称
(3)实例:
1 JMeter -n -t my_test.jmx -l log.jtl -H my.proxy.server -P 8000
(4)执行步骤:
jmeter默认去当前目录寻找脚本文件,并把日志记录在当前目录。比如你在 C:\tools\apache-jmeter-4.0\bin 目录下执行以上命令,jmeter会去该目录下寻找test.jmx脚本并把执行结果放在该目录。
如果你的脚本在其他目录,而且想要把执行结果放在另外文件夹,可以使用绝对路径告诉jmeter。
持续更新…
最后更新: 2018年05月11日 14:58