1、Jmeter使用入门Jmeter使用入门Jmeter简介Jmeter的基本概念XX百科:Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度
2、的灵活性,JMeter允许使用正则表达式创建断言我们为什么使用Jmeter开源免费,基于Java编写,可集成到其他系统可拓展各个功能插件支持接口测试,压力测试等多种功能,支持录制回放,入门简单相较于自己编写框架活其他开源工具,有较为完善的UI界面,便于接口调试多平台支持,可在Linux,Windows,Mac上运行Jmeter安装配置Windows下Jmeter下载安装登录 http:/jmeter.apache.org/download_jmeter.cgi ,根据自己平台,下载对应文件安装JDK,配置环境变量(具体步骤不做介绍)将下载Jmeter文件解压,打开/bin/jmeter.bat
3、其他平台安装Jmeter与Windows平台一致,除入口文件不同,例如linux平台下为/bin/jmeter.shJmeter的目录结构/bin 目录(常用文件介绍)examples:目录下包含Jmeter使用实例ApacheJMeter.jar:JMeter源码包jmeter.bat:windows下启动文件jmeter.sh:Linux下启动文件jmeter.log:Jmeter运行日志文件jmeter.properties:Jmeter配置文件jmeter-server.bat:windows下启动负载生成器服务文件jmeter-server:Linux下启动负载生成器文件/docs目
4、录Jmeter帮助文档/extras目录提供了对Ant的支持文件,可也用于持续集成/lib目录存放Jmeter依赖的jar包,同时安装插件也放于此目录/licenses目录软件许可文件,不用管/printable_docs目录Jmeter用户手册Jmeter相关插件安装:插件安装:Jmeter的插件安装很简单,只需要下载对应插件解压即可。下载地址:http:/jmeter-plugins.org/downloads/all/下载后解压放入:apache-jmeter-2.12libext目录下重启jmeterps:数据库链接驱动如果需要需要专门下载,例如mysql需要jdbc的jar包,地址:
5、使用注意事项:添加第三方插件并使用后保存的jmx文件在未添加该插件的运行环境下会导致无法打开该文件并报错,请保持环境一致性。用例生成与导出:Jmeter的用例格式为jmx文件,实际为xml格式,感兴趣可以学习下自己定制生成想要的jmx文件。生成原则:每个功能模块为一个独立的jmx文件。增加可维护性。(尽量不要将一个jmx文件放入太多功能,后期维护成本会很高。)模块的私有变量保存在模块中,多模块共有的(例如服务器ip端口等)可以考虑存在单独的文件中读取。接口测试不要放太多线程,毕竟不是做压力测试,意义也不大。导出方法:编写测试用例文件保存为确定:Jmeter常用文件类型Jmx文件文件的实际类型:
6、xml文件样本: false false Sample test for demonstrating JMeter Ant build script and Schematic stylesheet 1143889321000 3 false 5 false 1143889321000 continue 1 1 1000 C false 1000000 = 100 Sleep_Time = 0xFF Sleep_Mask = Label = 200 ResponseCode = OK ResponseMessage = OK Status = Request SamplerData = Res
7、ponse C=$C ResultData org.apache.jmeter.protocol.java.test.JavaTest 3 Assertion.response_data 6 false = 100 Sleep_Time = 0xFF Sleep_Mask = Label = 200 ResponseCode = OK ResponseMessage = OK Status = Request SamplerData = Response C=$C Tn=$_threadNum ResultData org.apache.jmeter.protocol.java.test.Ja
8、vaTest Jtl文件文件的实际类型:自定义定义方法:修改jmeterhome/bin/jmeter.profile,可选择格式:csv,xml,db# legitimate values: xml, csv, db. Only xml and csv are currently supported.#jmeter.save.saveservice.output_format=csvJmeter运行模式及参数GUI模式打开已有的jmx文件(文件打开)点击启动按钮运行由于GUI模式本身就是带界面的,也有中文版,就不在此详细介绍了。命令行模式依赖:配置jmeter环境变量(windows下为将$
9、jmeterhome/bin加入Path变量)如果未加入环境变量,在执行的时候可以直接给出全路径或在$jmeterhome/bin下执行命令:jmeter -n -t-l参数:-h 帮助 - 打印出有用的信息并退出-n 非 GUI 模式 - 在非 GUI 模式下运行 JMeter-t 测试文件 - 要运行的 JMeter 测试脚本文件-l jtl文件 - 记录结果的文件-r 远程执行 - 启动远程服务-H 代理主机 - 设置 JMeter 使用的代理主机-P 代理端口 - 设置 JMeter 使用的代理主机的端口号-j 日志文件-设置JMeter日志文件的名称实例:JMeter -n -t m
10、y_test.jmx -l log.jtl -H my.proxy.server -P 8000执行步骤:JMeter 默认去当前目录寻找脚本文件,并把日志记录在当前目录。比如你在 C:toolsapache-jmeter-2.11bin 目录下执行以上命令,JMeter 会去该目录下寻找 test.jmx 脚本并把执行结果放在该目录。如果你的脚本在其他目录,而且想要把执行结果放在另外文件夹,可以使用绝对路径告诉 JMeter。执行过程查看:D:apache-jmeter-3.0binjmeter -n -t D:共享bpintocpin.jmx -l D:共享test.jtlWriting
11、log file to: D:apache-jmeter-3.0binjmeter.logCreating summariser Created the tree successfully using D:共享bpintocpin.jmxStarting the test Fri Jun 17 15:12:21 CST 2016 (1466147541295)Waiting for possible Shutdown/StopTestNow/Heapdump message on port 4445summary = 1 in 00:00:01 = 0.8/s Avg: 1178 Min: 1
12、178 Max: 1178 Err: 0 (0.00%)Tidying up . Fri Jun 17 15:12:22 CST 2016 (1466147542649). end of run执行结果查看:GUI界面打开聚合报告在GUI界面创建一个聚合报告聚合报告界面点击浏览,选中生成的.jtl文件,打开执行过程中查看summary = 1 in 00:00:01 = 0.8/s Avg: 1178 Min: 1178 Max: 1178 Err: 0 (0.00%)jtl文件转化成html格式查看通过xslt工具转化成html格式(保存格式必须为xml格式)Jmeter常用控件测试计划(T
13、est Plan)控件截图:理解:包含一个测试的所有内容,包含所有的控件,属性,变量。所以一个jmx文件中只有有一个测试计划。测试计划中可以定义变量,引入jar包,编辑测试模式等。注意事项:可将一些不常变化的数据存入测试计划的变量,方便在测试计划内调用(例如服务器ip,端口,数据库ip等)。函数测试模式会记录来每个请求到服务器的取样结果,如果在监听器中定义了数据写入文件,会将这些输入写入到该文件中。同时,该模式会严重影响性能。工作台控件截图:理解:控件的暂存区域,在测试过程中可以把暂时不用的控件放入其中,待测试完成后放回原来的位置。注意事项:工作台中的控件不会保存在jmx文件中,所以,如果关闭
14、jmeter,工作台中的控件会丢失。常用控件:Property Display创建方式:右键点击工作台,添加非测试元件Property Display截图:功能:查看当前测试计划中的属性以及系统中的属性线程组( Threads (Users)理解:一个虚拟用户组,线程组内线程数量在运行过程中不会发生改变。注意事项:线程间变量相互独立。一个测试计划内可以包含多个线程组。可定义内容:取样器错误后执行的操作:继续执行,启动下一个线程,停止线程,停止测试,立刻停止线程属性:线程数量,线程启动间隔时间(0为立刻启动所有线程),单线程循环次数,线程执行顺序,是否使用调度器。调度器配置:持续时间,启动延迟,
15、启动时间,结束时间线程组(Thread Group):控件截图:理解:常规意义上的线程组,即虚拟用户组。SetUp Thread Group:控件截图:理解:测试初始化操作,即线程组开始之前执行的内容。实际使用:可用于初始化测试环境,测试数据准备等。TearDown Thread Group:控件截图:理解:测试执行后操作,即线程组执行完成后执行的内容。实际使用:可用于清理测试环境,清空测试数据等。测试片段(Test Fragment)理解:与线程组同级别,但是默认不会执行。只有当他被模块控制器引用的时候才会被执行。控件截图:逻辑控制器(Logic Controller)理解:用来控制采样器的
16、执行顺序分类:控制采样器的逻辑执行顺序,如Loop Controller、If Controller等对采样器进行分组,方便控制的,如Throughput Controller、Transaction Controller控件截图:常用控件:简单控制器(Simple Controller):作用:这是Jmeter里最简单的一个控制器,它可以让我们组织我们的采样器和其它的逻辑控制器(分组功能),提供一个块的结构和控制,并不具有任何的逻辑控制或运行时的功能。循环控制器(Loop Controller):作用:指定其子节点运行的次数,可以使用具体的数值(如下图,设置为5次),也可以使用变量1、For
17、ever选项:勾选上这一项表示一直循环下去2、如果同时设置了线程组的循环次数和循环控制器的循环次数,那循环控制器的子节点运行的次数为两个数值相乘的结果。仅一次控制器(Once Only Controller):作用:在测试计划执行期间,该控制器下的子结点对每个线程只执行一次,登录场景经常会使用到这个控制器。注意:将Once Only Controller作为Loop Controller的子节点,Once Only Controller在每次循环的第一次迭代时均会被执行。ForEach控制器(ForEach Controller):作用:ForEach控制器一般和用户自定义变量一起使用,其在用
18、户自定义变量中读取一系列相关的变量。该控制器下的采样器或控制器都会被执行一次或多次,每次读取不同的变量值。如下图:参数:Input Variable Prefix:输入变量前缀Output variable name:输出变量名称Start index for loop(exclusive):循环开始的索引(这里如果不填写,默认从1开始,如果没有1开始的变量,执行时会报错)End index for loop(inclusive):循环结束的索引Add_before number:输入变量名称中是否使用_进行间隔。用户自定义变量:变量名前缀为ForEach Controller中Input v
19、ariable prefix定义的name + 下划线(上图中我们勾选了下划线)+数字编号执行结果:总共执行了3次,每次执行时会把获取到的变量值赋值给输出变量outNmae,其它地方可以通过$outNmae进行调用。事务控制器(Transaction Controller):作用: 事务控制器会生产一个额外的采样器,用来统计该控制器子结点的所有时间。参数:Generate parent sample:(选中这个参数结果展示如下图红框,否则显示为下图蓝框)Include duration of timer and pre-post processors in generated sample:选
20、中这一项会统计定时器(timer)的时间,否则只统计采样器(sample)的时间If 控制器(If Controller):作用:根据给定表达式的值决定是否执行该节点下的子节点,默认使用javascript的语法进行判断(如下图红框内的文字)。参数:Interpret Condition as Variable Expression?:选中这一项时表示:判断变量值是否等于字符串true(不区分大小写)Evaluate for all children:如果选中这一项,在每个子结点执行前都会计算表达式示例一:使用变量的方式进行判断:示例二:选中Interpret Condition as Var
21、iable Expression?Switch控制器(Switch Controller):作用:Switch控制器通过给该控制器中的Value赋值,来指定运行哪个采样器。有两种赋值方式:第一种是数值,Switch控制器下的子节点从0开始计数,通过指定子节点所在的数值来确定执行哪个元素。第二种是直接指定子元素的名称,比如采样器的Name来进行匹配。当指定的名称不存在时,不执行任何元素。当Value为空时,默认执行第1个子节点元素。示例:1、Switch Controller选择的值为login page2、执行结果:吞吐量控制器(Throughput Controller):作用:控制其下的子
22、节点的执行次数与负载比例分配,也有两种方式:Total Executions:设置运行次数Percent Executions:设置运行比例(1100之间)示例:1、设置线程组循环5次:2、Throughput Controller1的子结点执行3次:3、Throughput Controller2的子结点执行(40% * 线程组循环次数5)= 2次:执行结果:随机控制器(Random Controller):作用:随机执行其下的所某个子结点随机顺序控制器(Random Order Controller):作用:随机执行其下的所有子结点配置元件(Config Element)理解:为测试提供数
23、据支持的控件控件截图:常用控件:CSV Data Set Config理解:读取txt,csv格式的测试数据使用说明:新建一个txt文件设置CVS 配置参数CSV Data Set Config各个参数的简要说明:FileName:csv文件或txt文件路径,可用相对路径File Encoding: 文件编码格式设置Varible Names: 定义文本文件中的参数名,可设置多个参数,参数之间逗号分隔.定义后可在脚本中引用,引用方式$nameDelimiter(use t for tab):指定参数分隔符号Allow Quoated data: 是否允许引用数据Recycle on EOF:
24、是否循环取值Stop Thread on EOF: 当Recycle on EOF为false并且Stop Thread on EOF为true,则读完csv文件中的记录后,停止运行Sharing Mode: 设置是否线程共享使用场景:可用于多个jmx模块情况下读取服务器配置,或存储id,账号等测试数据。HTTP Cookie管理器特性:1,象浏览器一样的存储和发送Cookie。如果你请求一个站点,然后他的Response中包含Cookie,Cookie Manager就会自动地保存这些Cookie并在所有后来发送到该站点的请求中使用这些Cookie的值。(在View Results Tree
25、的Request界面可以看到被发送的Cookie Data, 同时每个线程的Cookie Manager是相互独立的)接受到的Cookie的值能被存储到JMeter 线程变量中(2.3.2版本后的JMeter不自动做这个事情)。要把Cookies保存到线程变量中,要定义属性CookieManager.save.cookies=true。线程变量名为COOKIE_ + Cookie名。属性CookieManager.name.prefix= 可以用来修改默认的COOKIE_的值。2,手动添加Cookie到Cookie Manager,需求注意的是这些Cookie的值被会所有线程共享定义:属性Co
26、okieManager.save.cookies=true在jmeter.properties文件中增加CookieManager.save.cookies=true,然后在Debug Sampler中就能看到COOKIE_xxx这样的变量,或者也可以使用正则表达式来提取Cookie的值实例截图:使用注意事项:路径必须填写,否则会导致nocookie路径和域组成完整的访问地址,谁访问谁就用对应的cookieCookie不是跨域的不同的逻辑控制器中要分别放cookie管理器,或放在该cookie逻辑控制器同级,否则会不生效HTTP信息头管理器理解:定义信息头,在其覆盖下的所有元件都会使用该信息头
27、。例如定义在测试计划中的信息头,即该测试计划所有请求的信息头。实例截图:JDBC Connection Configuration理解:数据库连接控件,不会进行的具体的数据库操作。实例截图:注意事项:需要和JDBC Request配合使用需要安装jdbc驱动,否则无法连接数据库用户定义的变量理解:用户自定义的变量,可用于存储接口路径等信息实例截图:注意事项:注意变量的作用域,不同线程间变量不共享定时器(Timer)理解:sampler(采样器)之前执行;如果只想应用于部分sampler,需要将定时器加入子节点;简单理解类似于loadrunner中的思考时间,控制sampler的间隔时间。控件截
28、图:常用控件:Constant Throughput Timer理解:设置目标吞吐量,限定QPS的控件实例截图:配置选项:Target throughput(in samples per minute):目标吞吐量。注意这里是每分钟发送的请求数,因此,对应测试需求中所要求的20 QPS ,这里的值应该是1200 。Calculate Throughput based on :有5个选项,分别是:This thread only :控制每个线程的吞吐量,选择这种模式时,总的吞吐量为设置的 target Throughput 乘以矣线程的数量。All active threads : 设置的tar
29、get Throughput 将分配在每个活跃线程上,每个活跃线程在上一次运行结束后等待合理的时间后再次运行。活跃线程指同一时刻同时运行的线程。All active threads in current thread group :设置的target Throughput将分配在当前线程组的每一个活跃线程上,当测试计划中只有一个线程组时,该选项和All active threads选项的效果完全相同。All active threads (shared ):与All active threads 的选项基本相同,唯一的区别是,每个活跃线程都会在所有活跃线程上一次运行结束后等待合理的时间后再次运行。All cative threads in current thread group (shared ):与All active threads in current thread group 基本相同,唯一的区别是,每个活跃线程都会在所有活跃线程的上一次运行结束后等待合理的时间后再次运行。注意事项:Constant Throughput Timer只有在线程组中的线程产生足够多的request 的情况下才有意义,因此,即使设置了Constant Throughput T
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1