jmeter使用手册.docx
- 文档编号:11136546
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:79
- 大小:1.68MB
jmeter使用手册.docx
《jmeter使用手册.docx》由会员分享,可在线阅读,更多相关《jmeter使用手册.docx(79页珍藏版)》请在冰豆网上搜索。
jmeter使用手册
性能测试工具-Jmeter
修订记录
日期
修订版本
修订内容
作者
130317
0.1
初稿拟制(介绍最常用的功能,部分内容翻译自官方文档)
张蓉
1.JMeter的介绍
ApacheJMeter是Apache组织的开放源代码项目,是一个100%纯Java桌面应用,用于压力测试和性能测量。
它最初被设计用于Web应用测试但后来扩展到其它测试领域。
ApacheJMete可以用于对静态的和动态的资源(文件,Servlet,Perl脚本,Java对象,数据库和查询,FTP服务器或是其它资源)的性能进行测试。
JMeter可以用于在服务器,网络或对象模拟繁重的负载来测试它们提供服务的受压能力或者分析不同压力条件下的总体性能情况。
你可以使用JMeter提供的图形化界面,分析性能指标或者在高负载情况下测试你的服务器/脚本/对象。
另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。
为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。
2.整体概述
2.1.名词解释
在使用JMeter之前,需要理解JMeter工具所使用的术语:
名词
解释
TestPlan
测试计划,实际上是一个或一组测试用例,在一个测试计划中可以有多个用例
WorkBench
工作台,可以在工作台中配置HTTP代理服务器,将录制的脚本存入工作台中,进行初步编辑,然后将脚本复制/粘贴到测试计划中,主要用来保存暂时不使用的测试元素,保存测试计划时,这部分内容不会一起被保存
ThreadGroup
线程组,可以理解为一个测试用例。
虚拟用户,在LR中叫VUser,实际上在这些压力测试工具实现虚拟用户的时候使用的技术就是线程,用一个线程来模拟一个虚拟用户,在JMeter中线程组用于配置虚拟用户的数目、迭代次数等
ConfigElement
配置元件配合取样器工作,虽然它不发送请求(除了HTTP代理服务器),但是它可以添加或修改请求
Timer
定时器,同LR的思考时间,通过添加定时器指定一个延迟
PreProcessors
前置处理器在取样器请求建立前执行一些行为
PostProcessors
后置处理器在取样器请求建立后执行一些行为
Assertions
断言允许你断言关于从测试服务器收到的响应结果
Listener
监听器用来收集当JMeter运行时的关于测试计划的信息
LogicController
逻辑控制器,用来模拟程序语言的逻辑结构,如顺序、分支、循环等
Sampler
取样器告诉JMeter发送请求到服务器,发送HTTP请求时添加一个HTTP请求取样器,可以通过添加一个或多个配置元件到一个取样器来定制一个请求
2.2.工作原理
Jmeter作为web服务器与浏览器之间的代理网关,它通过代理方式截获客户端和服务器之间交互的数据流,这样服务器和客户端都以为是在一个真实运行环境中。
Jmeter通过线程组来模拟真实用户对服务器的访问压力,而线程组提供了各种属性来设置对线程组的调度作用以产生不同的压力。
Jmeter也提供了各种监控脚本以对服务器,响应结果等各项指标进行收集统计及展现。
2.3.入门知识
测试计划描述了测试过程中jmeter的执行过程和步骤。
一个完整的测试计划包括一个或者多个线程组(ThreadGroup)、逻辑控制器(LogicController)、取样器(Sampler)、监听器(Listener)、定时器(Timer)、断言(Assertions)、配置元件(ConfigElements)等元素。
Jmeter执行顺序规则:
(1)配置元件
(2)前置处理器
(3)定时器
(4)采样器
(5)后置处理器(除非服务器响应为空)
(6)断言(除非服务器响应为空)
(7)监听器(除非服务器响应为空)
注意:
只有当作用域内存在采样器时,定时器、断言、前置处理器、后置处理器才会被执行。
逻辑控制器和采样器按照在测试树中出现的顺序依次执行,其它测试元件会依据自身的作用域范围来执行。
同一类型的测试元件,会按照它们在测试树中出现的顺序依次执行。
建议:
最好能按实际的情况进行测试元件顺序的编排,不要通过默认的顺序含义来执行,容易导致程序可读性差。
jmeter测试树包含的测试元件有两种规则,包括分层规则和顺序规则:
分层规则:
监听器,配置元素,后置处理器,前置处理器,断言,定时器
顺序规则:
控制器,取样器
当创建测试计划时,你将创建一个描述被执行步骤集的请求有序列表,而我们又会经常将请求组织在有序的控制器中。
给出如下测试树:
执行顺序为:
One、Two、Three、Four
Assertion#1仅作用于请求One,Assertion#2作用于请求Two、Three,执行顺序为:
One、Two、Three、Four
Timer#1作用于请求Two,Three,Four,Assertion#1作用于Three,Timer#2则会作用于所有的请求,执行顺序为:
One、Two、Three、Four、Five
配置元件与默认配置元件(元件名中包含default,如HTTP请求默认值)的处理方式不同,默认配置元件包含的设置会被合并起来,而配置元件的设置值则不会被合并。
对于一个取样器而言,如果在相同的作用域范围内有多个配置元件,那么只有一个配置元件会被应用,且目前无法指定是哪个配置元件被使用。
3.JMeter的部署
3.1.JMeter下载
JMeter的网站地址是:
http:
//jmeter.apache.org/,网站提供了最新版本的JMeter安装包的下载:
http:
//jmeter.apache.org/download_jmeter.cgi,作者下载的是apache-jmeter-2.9.zip,本安装包包含了您创建和执行大多数类型的测试:
web(http/https)、FTP、JDBC、LDAP、Java、junit所需要的文件。
3.2.JMeter安装
JMeter需要一个完全兼容的jvm6或更高的版本,需要设置JAVA_HOME变量指向到相应的JRE目录,同时修改PATH变量,将JRE1.6的bin目录添加进去。
安装的过程很简单,只要解压已成功下载的zip包到任意目录,这里解压到D:
\ProgramFiles\,则成功安装JMeter,在win7系统下直接双击D:
\ProgramFiles\apache-jmeter-2.9\bin目录下的jmeter.bat文件:
4.测试场景的应用
4.1.ws服务
webservice服务的测试脚本有两种写法:
(1)使用WebService(SOAP)请求取样器(DEPRECATED):
其中soap/xml-rpcdata的内容为:
Envelopexmlns: soapenv="http: //schemas.xmlsoap.org/soap/envelope/"xmlns: fac=""> Header/> Body> couponPayAbort> in0>${tid} in0> in1>23242 in1> couponPayAbort> Body> Envelope> (2)使用Http请求取样器(推荐): 设置项如下图所示,使用postbody选项页,直接将 (1)中的soap/xml-rpcdata的内容复制过来即可 4.2.前台页面 这里就以查看我的支付宝页面来介绍一下前台页面脚本的编写: (1)登录,这里直接使用信息登录的方式,使用http请求取样器取可: (2)登录成功后访问我的支付宝/portal/i.htm页面,检查是否访问成功添加响应断言,如下为本流程对应的测试计划: 本脚本为了方便大家查阅,先不进行过多的参数化,仅做整体的介绍说明: 用户定义的变量内容如下: HTTPCookie管理器: 必须的,否则登录成功后进行后续操作会失败 事务控制器是为了对每个独立的事务进行划分,类似于loadrunner的事务标志 HTTP请求-TrustLogin: 主要填写如下参数,路径此处为: /login/trust_login.do? sign_account_no=20881020027627520156&信任登录所需要的参数&goto=需要跳转的url,此请求放在仅一次控制器中主要是因为它是登录,类似于loadrunner放在init脚本中是一样的效果,如果专门测试登录时,不能放在仅一次控制器中,且需要勾选HTTPcookie管理器的每次反复清除cookies HTTP请求-/portal/i.htm: 访问成功后,对页面进行断言,检查页面信息是否展现 添加察看结果树主要是在调试过程中方便检查请求发送及响应内容是否正确。 4.3.tr服务(todo) 5.基础讲解 本章将单独介绍JMeter每个独立的功能如何使用。 5.1.线程组 处理每个JMeter测试计划的第一步就是添加线程组。 这个线程组会告诉JMeter你想要模拟的用户数量,用户应该发送请求的频率和应该发送的数量。 如上图所示,在图中红框位置点击右键,选择: 添加-Threads(User)-线程组,这时可以看到这个线程组已经在测试计划下面了,如果没有看到,就点击测试计划元件展开这个测试计划树。 下一步,你需要修改这些默认的属性。 如果你还没有选择线程组元件,则从测试计划树型结构中选择它。 这时你应该看到JMeter窗口右边的线程组控制面板了。 循环次数设置为Y次,线程数设置为X时,那么每个线程会执行Y/X次请求 如果勾选上永远,则jmeter不会自己停止下来,直到用户手工停止 而对应LR中经常会设置请求异常时继续执行这种情况,对应上图: 在取样器错误后要执行的动作,单选: 继续即可 当用户勾选: 调度器时,会出现调度器配置,调度器的配置遵循如下判断: 而对于Ramp-UpPeriod和线程数的关系,Jmeter是如下处理的: 于是对应在LR中我们经常会设置如下场景: LR场景 JMeter设置 并发20个用户持续执行10分钟 线程数填写: 20,勾选调度器,设置启动时间后,持续时间写上600 并发20个用户启动时需要每10s启动2个用户 线程数填写: 20,Ramp-upPeriod(inseconds): 100 每10s启动2个用户,则20个用户需要启动时间为100s,此设置的实际效果是100s启动20个用户,每5s启动1个用户,与LR的期望效果略为不同 5.2.取样器 4.2.1Http请求 http请求取样器可以发送一个http/https的请求给web服务器,可以通过配置控制是否需要jmeter解析html文件中的图片和其它内嵌资源,并发送http请求下载这些资源,如下类型的内嵌资源可以被检索: (1)image (2)applets (3)stylesheets (4)externalscripts (5)frames、iframes (6)backgroundimages(body、table、TD、TR) (7)backgroundsound 默认使用的解析器是htmlparser,详细介绍见: RequestDefaultsConfiguration(HTTP请求默认值)配置元件,这样你就可以不必为每个http请求都写入相同的信息,或者,你也可以使用httpproxy服务器来录制发送的http请求,这样当你在创建很多http请求时能够很大程度上节省你的时间。 HTTP请求有一个下拉框可以选择http协议的实现,目前可设置4个选项: (1)Java: 由jvm提供,与HTTPClient相比有一定的局限性,如无法控制连接如何重用,当一个连接被jmeter释放后不一定能够重新被同一个线程使用,且目前存在bug,具体可自行搜索 (2)HTTPClient3.1: 使用ApacheCommonsHttpClient3.1,这个版本目前已不再开发,未来的jmeter版本会丢弃这个版本 (3)HTTPClient4: 使用ApacheHttpComponentsHttpClient4.x (4)空白: 即不设置任何选项,会默认读取jmeter.properties文件中设置的jmeter.httpsampler的值,目前默认使用HttpClient4 对于普通登录,例如你需要在一个表单可输入登录名和密码时,你需要先了解表单的按钮提交时会如何处理,然后再创建一个http请求选择method为post(通常情况),并构造表单可要求的正确参数一并提交。 如果页面使用http协议,你还可以使用jmeter的proxy代理去捕捉登录时发起的请求参数。 在jmeter2.2版本,只有一个单一的SSL上下文被用在所有线程的取样器中,这样做无法模拟多个用户产生压力。 现在的版本可以为每个线程设置一个单独的SSL上下文,是否回到之前共享一个SSL上下文的方式,可以通过https.sessioncontext.shared=true来控制。 默认情况下,SSL的上下文会在测试过程可被保持的,在2.5.1的版本之后,SSL的会话可以选择性地在每次迭代中进行重置,这可通过设置https.use.cached.ssl.context=false来实现,这个设置不适用于java实现的http请求。 Jmeter默认的SSL协议是使用TLS,如果服务器需要不同的如SSLv3,那么可以修改https.default.protocol=SSLv3的,jmeter可以使用其它额外的协议,可以直接修改https.socket.protocols属性值。 如果你的请求需要cookies,那么你可以添加一个httpcookie管理器,只要添加到线程组中即可使用,这个cookie管理器,所有的http请求均可共享使用。 ServerNameorIP: web服务器的域名或ip地址,如,不需要加上http: //前缀 Port: web服务器监听请求的端口号,默认是80端口 ConnectTimeout: 连接超时时间,即等待连接打开的毫秒数。 当HTTP请求中implementation选择java时,需要java1.5或以上版本 ResponseTimeout: 响应超时时间,即等待服务器返回响应的毫秒数。 当HTTP请求中implementation选择java时,需要java1.5或以上版本 Implementation: 3个选项java、HttpClient3.1、HttpClient4,如果此处没有指定,则默认值取决于jmeter的配置项jmeter.httpsampler,当取不到时,会使用java这个选项 Protocol: http或https Method: http的get、post请求,此处还包含head、put、options、trace、delete、patch Contentencoding: 所发送请求的报文内容所使用的编码 Path: 资源的路径(如/servlets/myServlet),如果资源需要带上查询参数的话,可以添加到SendParametersWiththeRequest部分,需要注意的是,path必须填写完整的路径 RedirectAutomatically: 设置是否自动重定向,可以用在GET和HEAD请求中,勾选此项时,如果服务器返回重定向相关的状态码,会直接取得Responseheaders中的location值进行重定向请求,察看结果树视图中,看不到重定向的样本,只能看到一个样本。 对于POST或PUT的请求,忽略此设置。 具体可参考重定向相关内容: FollowRedirects: 此选项的设置与RedirectAutomatically有互斥关系,当不勾选RedirectAutomatically时,才能勾选FollowRedirects。 如果设置了此选项,jmeter的取样器将会检查响应是否需要重定向,如果有则会随后发起请求。 使用察看结果树视图可以看到,最初的请求和随后的重定向请求都会显示在结果树中。 父取样器请求的URL和数据字段都会从最后一个请求中取得,但父样本的字节数和执行时间将包含子取样器的所有数据 UseKeepAlive: 需要先介绍keep-aliver模式: HTTP协议采用“请求-应答”模式,当使用普通模式,即非KeepAlive模式时,每个请求/应答客户和服务器都要新建一个连接,完成之后立即断开连接(HTTP协议为无连接的协议);当使用Keep-Alive模式(又称持久连接、连接重用)时,Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。 勾选此选项,jmeter会在http头加入"Connection: Keep-Alive",才能启用Keep-Alive,它需要选择HttpClient的实现才能起作用 Usemultipart/form-dataforHTTPPOST: 使用multipart/form-data或者application/x-www-form-urlencoded设置post请求提交数据所使用的格式,详细介绍见: Sendparameterswiththerequest: 设置参数名和参数值,将会依据你所选的post和get方法发送参数和参数值,当选择get时,参数会被添加到url直接发送,当选择post时,参数将单独发送。 当你需要发送一个文件时,需要使用multipartform,参数的创建也需要根据multipartform的规范。 表格中还有选项encode? : 可以指定某一参数是否进行编码,如果你不确定,那么最好都打上勾,当你的参数值中包含$、&、+、逗号、/、冒号、=、问号、@等时,通常需要进行编码 Sendfileswiththerequest: (1)filepath: 发送的文件名称,如果不设置,jmeter不会发送文件,当填写文件名时,jmeter会自动以multipartform形式发送。 当请求为POST、PUT、PATCH请求时,仅有一个文件,那么parametername将会被忽略,直接将文件作为请求的整个包体进行发送,这样的使用方式可以允许用户发送任何请求内容。 (2)parametername: 请求参数名“name”的值 (3)MIMEType: MIME类型,如text/plain,如果是POST或PUT请求且“name”值被忽略,或请求仅由参数值构成,那么该字段设置的值将作为请求头content-type的值 Proxyserver: (1)serverNameorip: 执行请求的代理服务器或ip地址 (2)port: 代理服务器端口 (3)username: 代理服务器的用户名 (4)password: 代理服务器的密码 Optionaltasks: (1)retrieveAllEmbeddedResourcesfromHTMLFiles: 设置jmeter是否需要从html文件中解析引用的所有图片、javaapplets、js文件、css等 (2)Useconcurrentpool: 使用并发池的连接去获取嵌入的资源 (3)size: concurrentpool的连接数大小 (4)useasmonitor: 配合监视器结果视图(Monitorresults)使用 (5)saveresponseasMD5hash: 如果选择了此项设置,响应将不会被取样器直接存储,jmeter会对响应进行md5哈希后再行存储,这主要针对大数据量的测试(这块是直接从官网翻译的,不明白为什么是针对大数据量的测试) (6)embeddedURLsmustmatch: 选择时,可以使用正则表达式匹配指定url的资源才被下载,如你需要下载url为 (7)sourceipaddress: 设置后,请求或响应均会使用这个属性设置的地址,如有多个ip地址时,则可直接指定 需要注意的是,当使用RedirectAutomatically时,cookies仅会发送给初始的url,这可能会导致意想不到的行为,例如: 访问时重定向到www.example.co.uk,这时服务器可能会返回两个URL的cookies,但jmeter可能只看到最后一个主机地址的cookie,如果在下一个请求还是测试而非www.example.co.uk,则可能会发送不正确的cookie。 同样请求头的内容也是被发到初始的请求,不会发送给重定向后的URL,这种情况只会在手动创建的测试计划中比较经常出现,如果是通过http代理录制下来的则不会有类似问题。 HTTP请求中可以对parameters和postbody进行切换,一旦你需要切换回parameters的tab页时,需要清空postbody的内容。 在postbody模式下,每行将会自动添加CRLF回车换行符,除了最后一行。 响应报文大小的计算设置,通过设置sampleresult.getbytes.body_real_size=true可以获取返回的响应中的body部分的字节数,设置sampleresult.getbytes.headers_size=true则获取整个报文的字节数,包含报文头和报文体。 4.2.2Jdbc请求 Jdbc请求取样器可以向数据库发送一个jdbc请求,在使用前,需要先创建一个JDBCConnectionConfiguration配置元件,详见4.9.6节。 Variablename: 绑定的连接池名称,此处填写的是JDBCConnectionConfiguration配置元件所定义的数据库连接名称 QueryType: SelectStatement、UpdateStatement、CallableStatement、PreparedSelectStatement、PreparedUpdateStatement、Commit、Rollback、AutoCommit(false)、AutoCommit(true),,以下仅列出主要的执行代码版本,try、catch、fin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- jmeter 使用手册
![提示](https://static.bdocx.com/images/bang_tan.gif)