Jmeter使用入门Word文件下载.docx
《Jmeter使用入门Word文件下载.docx》由会员分享,可在线阅读,更多相关《Jmeter使用入门Word文件下载.docx(28页珍藏版)》请在冰豆网上搜索。
windows下启动负载生成器服务文件
jmeter-server:
Linux下启动负载生成器文件
/docs目录——Jmeter帮助文档
/extras目录——提供了对Ant的支持文件,可也用于持续集成
/lib目录——存放Jmeter依赖的jar包,同时安装插件也放于此目录
/licenses目录——软件许可文件,不用管
/printable_docs目录——Jmeter用户手册
Jmeter相关插件安装:
插件安装:
Jmeter的插件安装很简单,只需要下载对应插件解压即可。
下载地址:
http:
//jmeter-plugins.org/downloads/all/
下载后解压放入:
apache-jmeter-2.12\lib\ext\目录下
重启jmeter
ps:
数据库链接驱动如果需要需要专门下载,例如mysql需要jdbc的jar包,地址:
使用注意事项:
添加第三方插件并使用后保存的jmx文件在未添加该插件的运行环境下会导致无法打开该文件并报错,请保持环境一致性。
用例生成与导出:
Jmeter的用例格式为jmx文件,实际为xml格式,感兴趣可以学习下自己定制生成想要的jmx文件。
生成原则:
每个功能模块为一个独立的jmx文件。
增加可维护性。
(尽量不要将一个jmx文件放入太多功能,后期维护成本会很高。
)
模块的私有变量保存在模块中,多模块共有的(例如服务器ip端口等)可以考虑存在单独的文件中读取。
接口测试不要放太多线程,毕竟不是做压力测试,意义也不大。
导出方法:
编写测试用例
文件——保存为——确定:
Jmeter常用文件类型
Jmx文件
文件的实际类型:
xml
文件样本:
false
SampletestfordemonstratingJMeterAntbuildscriptandSchematicstylesheet
1143889321000
3
5
continue
1
1000
C
1000000
=
100
Sleep_Time
0xFF
Sleep_Mask
Label
200
ResponseCode
OK
ResponseMessage
Status
Request
SamplerData
ResponseC=${C}
ResultData
org.apache.jmeter.protocol.java.test.JavaTest
Assertion.response_data
6
ResponseC=${C}Tn=${__threadNum}
Jtl文件
自定义
定义方法:
修改{jmeterhome}/bin/jmeter.profile,可选择格式:
csv,xml,db
#legitimatevalues:
xml,csv,db.Onlyxmlandcsvarecurrentlysupported.
#jmeter.save.saveservice.output_format=csv
Jmeter运行模式及参数
GUI模式
打开已有的jmx文件(文件——打开)
点击启动按钮运行
由于GUI模式本身就是带界面的,也有中文版,就不在此详细介绍了。
命令行模式
依赖:
配置jmeter环境变量(windows下为将${jmeterhome}/bin加入Path变量)
如果未加入环境变量,在执行的时候可以直接给出全路径或在${jmeterhome}/bin下执行
命令:
jmeter-n-t-l
参数:
-h帮助->
打印出有用的信息并退出
-n非GUI模式->
在非GUI模式下运行JMeter
-t测试文件->
要运行的JMeter测试脚本文件
-ljtl文件->
记录结果的文件
-r远程执行->
启动远程服务
-H代理主机->
设置JMeter使用的代理主机
-P代理端口->
设置JMeter使用的代理主机的端口号
-j日志文件->
设置JMeter日志文件的名称
实例:
JMeter-n-tmy_test.jmx-llog.jtl-Hmy.proxy.server-P8000
执行步骤:
JMeter默认去当前目录寻找脚本文件,并把日志记录在当前目录。
比如你在C:
\tools\apache-jmeter-2.11\bin目录下执行以上命令,JMeter会去该目录下寻找test.jmx脚本并把执行结果放在该目录。
如果你的脚本在其他目录,而且想要把执行结果放在另外文件夹,可以使用绝对路径告诉JMeter。
执行过程查看:
D:
\apache-jmeter-3.0\bin>
jmeter-n-tD:
\共享\bpintocpin.jmx-lD:
\共享\test.jtl
Writinglogfileto:
D:
\apache-jmeter-3.0\bin\jmeter.log
Creatingsummariser
CreatedthetreesuccessfullyusingD:
\共享\bpintocpin.jmx
Startingthetest@FriJun1715:
12:
21CST2016(1466147541295)
WaitingforpossibleShutdown/StopTestNow/Heapdumpmessageonport4445
summary=1in00:
00:
01=0.8/sAvg:
1178Min:
1178Max:
1178Err:
0(0.00%)
Tidyingup...@FriJun1715:
22CST2016(1466147542649)
...endofrun
执行结果查看:
GUI界面打开聚合报告
在GUI界面创建一个聚合报告
聚合报告界面点击浏览,选中生成的.jtl文件,打开
执行过程中查看
jtl文件转化成html格式查看
通过xslt工具转化成html格式(保存格式必须为xml格式)
Jmeter常用控件
测试计划(TestPlan)
控件截图:
理解:
包含一个测试的所有内容,包含所有的控件,属性,变量。
所以一个jmx文件中只有有一个测试计划。
测试计划中可以定义变量,引入jar包,编辑测试模式等。
注意事项:
可将一些不常变化的数据存入测试计划的变量,方便在测试计划内调用(例如服务器ip,端口,数据库ip等)。
函数测试模式会记录来每个请求到服务器的取样结果,如果在监听器中定义了数据写入文件,会将这些输入写入到该文件中。
同时,该模式会严重影响性能。
工作台
控件的暂存区域,在测试过程中可以把暂时不用的控件放入其中,待测试完成后放回原来的位置。
工作台中的控件不会保存在jmx文件中,所以,如果关闭jmeter,工作台中的控件会丢失。
常用控件:
PropertyDisplay
创建方式:
右键点击工作台,添加——非测试元件——PropertyDisplay
截图:
功能:
查看当前测试计划中的属性以及系统中的属性
线程组(Threads(Users))
一个虚拟用户组,线程组内线程数量在运行过程中不会发生改变。
线程间变量相互独立。
一个测试计划内可以包含多个线程组。
可定义内容:
取样器错误后执行的操作:
继续执行,启动下一个线程,停止线程,停止测试,立刻停止
线程属性:
线程数量,线程启动间隔时间(0为立刻启动所有线程),单线程循环次数,线程执行顺序,是否使用调度器。
调度器配置:
持续时间,启动延迟,启动时间,结束时间
线程组(ThreadGroup):
常规意义上的线程组,即虚拟用户组。
SetUpThreadGroup:
测试初始化操作,即线程组开始之前执行的内容。
实际使用:
可用于初始化测试环境,测试数据准备等。
TearDownThreadGroup:
测试执行后操作,即线程组执行完成后执行的内容。
可用于清理测试环境,清空测试数据等。
测试片段(TestFragment)
与线程组同级别,但是默认不会执行。
只有当他被模块控制器引用的时候才会被执行。
逻辑控制器(LogicController)
用来控制采样器的执行顺序
分类:
控制采样器的逻辑执行顺序,如LoopController、IfController等
对采样器进行分组,方便控制的,如ThroughputController、TransactionController
简单控制器(SimpleController):
作用:
这是Jmeter里最简单的一个控制器,它可以让我们组织我们的采样器和其它的逻辑控制器(分组功能),提供一个块的结构和控制,并不具有任何的逻辑控制或运行时的功能。
循环控制器(LoopController):
指定其子节点运行的次数,可以使用具体的数值(如下图,设置为5次),也可以使用变量
1、Forever选项:
勾选上这一项表示一直循环下去
2、如果同时设置了线程组的循环次数和循环控制器的循环次数,那循环控制器的子节点运行的次数为两个数值相乘的结果。
仅一次控制器(OnceOnlyController):
在测试计划执行期间,该控制器下的子结点对每个线程只执行一次,登录场景经常会使用到这个控制器。
注意:
将OnceOnlyController作为LoopController的子节点,OnceOnlyController在每次循环的第一次迭代时均会被执行。
ForEach控制器(ForEachController):
ForEach控制器一般和用户自定义变量一起使用,其在用户自定义变量中读取一系列相关的变量。
该控制器下的采样器或控制器都会被执行一次或多次,每次读取不同的变量值。
如下图:
参数:
InputVariablePrefix:
输入变量前缀
Outputvariablename:
输出变量名称
Startindexforloop(exclusive):
循环开始的索引(这里如果不填写,默认从1开始,如果没有1开始的变量,执行时会报错)
Endindexforloop(inclusive):
循环结束的索引
Add"
_"
beforenumber:
输入变量名称中是否使用"
进行间隔。
用户自定义变量:
变量名前缀为ForEachController中Inputvariableprefix定义的name+下划线(上图中我们勾选了下划线)+数字编号
执行结果:
总共执行了3次,每次执行时会把获取到的变量值赋值给输出变量outNmae,其它地方可以通过${outNmae}进行调用。
事务控制器(TransactionController):
事务控制器会生产一个额外的采样器,用来统计该控制器子结点的所有时间。
Generateparentsample:
(选中这个参数结果展示如下图红框,否则显示为下图蓝框)
Includedurationoftimerandpre-postprocessorsingeneratedsample:
选中这一项会统计定时器(timer)的时间,否则只统计采样器(sample)的时间
If控制器(IfController):
根据给定表达式的值决定是否执行该节点下的子节点,默认使用javascript的语法进行判断(如下图红框内的文字)。
InterpretConditionasVariableExpression?
:
选中这一项时表示:
判断变量值是否等于字符串true(不区分大小写)
Evaluateforallchildren:
如果选中这一项,在每个子结点执行前都会计算表达式
示例一:
使用变量的方式进行判断:
示例二:
选中InterpretConditionasVariableExpression?
Switch控制器(SwitchController):
Switch控制器通过给该控制器中的Value赋值,来指定运行哪个采样器。
有两种赋值方式:
第一种是数值,Switch控制器下的子节点从0开始计数,通过指定子节点所在的数值来确定执行哪个元素。
第二种是直接指定子元素的名称,比如采样器的Name来进行匹配。
当指定的名称不存在时,不执行任何元素。
当Value为空时,默认执行第1个子节点元素。
示例:
1、SwitchController选择的值为loginpage
2、执行结果:
吞吐量控制器(ThroughputController):
控制其下的子节点的执行次数与负载比例分配,也有两种方式:
TotalExecutions:
设置运行次数
PercentExecutions:
设置运行比例(1~100之间)
1、设置线程组循环5次:
2、ThroughputController1的子结点执行3次:
3、ThroughputController2的子结点执行(40%*线程组循环次数5)=2次:
随机控制器(RandomController):
随机执行其下的所某个子结点
随机顺序控制器(RandomOrderController):
随机执行其下的所有子结点
配置元件(ConfigElement)
为测试提供数据支持的控件
CSVDataSetConfig
读取txt,csv格式的测试数据
使用说明:
新建一个txt文件
设置CVS配置参数
CSVDataSetConfig各个参数的简要说明:
FileName:
csv文件或txt文件路径,可用相对路径
FileEncoding:
文件编码格式设置
VaribleNames:
定义文本文件中的参数名,可设置多个参数,参数之间逗号分隔.定义后可在脚本中引用,引用方式${name}
Delimiter(use"
\t"
fortab):
指定参数分隔符号
AllowQuoateddata:
是否允许引用数据
RecycleonEOF:
是否循环取值
StopThreadonEOF:
当RecycleonEOF为false并且StopThreadonEOF为true,则读完csv文件中的记录后,停止运行
SharingMode:
设置是否线程共享
使用场景:
可用于多个jmx模块情况下读取服务器配置,或存储id,账号等测试数据。
HTTPCookie管理器
特性:
1,象浏览器一样的存储和发送Cookie。
如果你请求一个站点,然后他的Response中包含Cookie,CookieManager就会自动地保存这些Cookie并在所有后来发送到该站点的请求中使用这些Cookie的值。
(在ViewResultsTree的Request界面可以看到被发送的CookieData,同时每个线程的CookieManager是相互独立的)
接受到的Cookie的值能被存储到JMeter线程变量中(2.3.2版本后的JMeter不自动做这个事情)。
要把Cookies保存到线程变量中,要定义属性"
CookieManager.save.cookies=true"
。
线程变量名为COOKIE_+Cookie名。
属性CookieManager.name.prefix=可以用来修改默认的COOKIE_的值。
2,手动添加Cookie到CookieManager,需求注意的是这些Cookie的值被会所有线程共享
定义:
属性"
在jmeter.properties文件中增加CookieManager.save.cookies=true,然后在DebugSampler中就能看到COOKIE_xxx这样的变量,或者也可以使用正则表达式来提取Cookie的值
实例截图:
路径必须填写,否则会导致nocookie
路径和域组成完整的访问地址,谁访问谁就用对应的cookie
Cookie不是跨域的
不同的逻辑控制器中要分别放cookie管理器,或放在该cookie逻辑控制器同级,否则会不生效
HTTP信息头管理器
定义信息头,在其覆盖下的所有元件都会使用该信息头。
例如定义在测试计划中的信息头,即该测试计划所有请求的信息头。
JDBCConnectionConfiguration
数据库连接控件,不会进行的具体的数据库操作。
需要和JDBCRequest配合使用
需要安装jdbc驱动,否则无法连接数据库
用户定义的变量
用户自定义的变量,可用于存储接口路径等信息
注意变量的作用域,不同线程间变量不共享
定时器(Timer)
sampler(采样器)之前执行;
如果只想应用于部分sampler,需要将定时器加入子节点;
简单理解类似于loadrunner中的思考时间,控制sampler的间隔时间。
ConstantThroughputTimer
设置目标吞吐量,限定QPS的控件
配置选项:
Targetthroughput(insamplesperminute):
目标吞吐量。
注意这里是每分钟发送的请求数,因此,对应测试需求中所要求的20QPS,这里的值应该是1200。
CalculateThroughputbasedon:
有5个选项,分别是:
Thisthreadonly:
控制每个线程的吞吐量,选择这种模式时,总的吞吐量为设置的targetThroughput乘以矣线程的数量。
Allactivethreads:
设置的targetThroughput将分配在每个活跃线程上,每个活跃线程在上一次运行结束后等待合理的时间后再次运行。
活跃线程指同一时刻同时运行的线程。
Allactivethreadsincurrentthreadgroup:
设置的targetThroughput将分配在当前线程组的每一个活跃线程上,当测试计划中只有一个线程组时,该选项和Allactivethreads选项的效果完全相同。
Allactivethreads(shared):
与Allactivethreads的选项基本相同,唯一的区别是,每个活跃线程都会在所有活跃线程上一次运行结束后等待合理的时间后再次运行。
Allcativethreadsincurrentthreadgroup(shared):
与Allactivethreadsincurrentthreadgroup基本相同,唯一的区别是,每个活跃线程都会在所有活跃线程的上一次运行结束后等待合理的时间后再次运行。
ConstantThroughputTimer只有在线程组中的线程产生足够多的request的情况下才有意义,因此,即使设置了ConstantThroughputT