Jmeter录制脚本
http://www.cnblogs.com/wang1988ming/archive/2012/08/01/2618550.html
http://wenku.baidu.com/link?url=CxwfwPCMqcCpwjsAD3UUeiV8Y8_LacoEgcyQKrwZEU_YHhzm8xxjKN_zQ3r9fKfG6_BA8o5vFFcgFhFCC_88bjTR1IchBlSn20TPvcyi_pC
JMeter入门实例——ForEach控制器(未完)
来源网址:file:///C:/Users/niupp/AppData/Local/Yodao/DeskDict/frame/20141120132153/index.html
http://blog.sina.com.cn/s/blog_696665040101cpch.html
http://www.51testing.com/html/53/61753-229619.html
ForEach控制器在用户自定义变量中读取一系列相关的变量,该控制器下的采样器或控制器都会被执行一次或多次,每次读取不同的变量值,所以ForEach总是和User Defined Variables一起使用。
一、前期准备
配置好JAVA环境,下载Jmeter包解压,双击jmeter.bat打开工作界面:
二、操作步骤
下面将创建一个web测试项目,让它去访问我们设定好的URL地址,并将得到的信息返回。
1、在测试计划上右击>添加>Threads(Users)>线程组,使用Jmeter测试必须创建线程组,线程的作用是模拟多个访问对象:
设定线程数为10,设定时间5s,即5s内启动10个线程,每秒钟启动2个线程;循环次数为5,则表示一共有10*5次请求。
2、在线程组上右击>逻辑控制器>ForEach控制器
Add"_" before number?:表示在输入变量的数字前加“_”;
Start index for loop(exclusive):循环开始数(除外)
End index for loop(inclusive):循环结束数(包含)
Jmeter目录说明
bin:执行文件;
docs:API使用说明;
lib:jar包目录,自己编写的jar可放在该目录下,该目录ext下是重要的jar包,包括协议等;
licenses:注册文件;
printable_dosc:帮助文档;
修改Properties的两种方法:1)打开JMeter,在工作台右击>添加非测试单元>Properties Display;
2)打开目录bin下的jmeter.properties。
Apache Jmeter读书粗略笔记(需整理)
第三章
1、如果需要使用Jmeter远程测试,路径中不能有空格;
2、双击bin/jmeter.bat打开Jmeter,在这个过程中,jmeter会自动从lib和lib/ext中的jar包中查找类,所以如果自己编译了jar需放在lib/ext文件夹下;
3、运行不带GUI的Jmeter,在命令行中进入jmeter的bin目录
-n 表示运行jmeter为non-GUI模式;
-t JMX文件的名称(Jmeter创建的测试计划保存后后缀为jmx)
-l JTL文件,记录简单的结果
-r 运行所有在jmeter.properties中指定的远程服务
-H 代理服务器的域名或IP
-P 代理服务器的端口
第四章 The Test Plan
1、对于一个测试计划,线程组是必须的;
2、一个简单的测试计划,一般包括:线程组、取样器、监听器;
3、ramp-up period:指定创建所有线程的时间;
4、
《Apache Jmeter》
来源网址:file:///C:/Users/niupp/AppData/Local/Yodao/DeskDict/frame/20150109090345/index.html
第5章 Load/Performance Testing of Websites
所以你现在已经准备好在你的web程序中使用web负载/性能测试。
在我们开始这个有意义的旅行前,我必须指出强调负载测试和性能测试有所不同的事实。IEEE 90定义的性能测试:用来评价一个系统或组件符合特定性能需求的测试。其他目的包括确定系统瓶颈,之后可支持性能调优工作,目的是审计系统的性能,或者收集其他相关数据来帮助利益相关者对测试中程序的质量作出明智的判断。
负载测试,作为性能测试的一部分,是一个简单的过程来评判组件或一整个系统接近它极限的工作等级。另一个需要关注的点是有些地区用负载测试替代压力测试。这可能不会一个完全准确的实践,因为它们之间有一个小小的区别。负载测试是资源量受到限制,而通常执行压力测试是评估资源的性能和行为达到或超出正常的能力。总得来说,负载和压力测试都是性能测试的一部分。
为了方便起见(也为了不使读者受到打击),这个章节将集中于使用Jmeter来执行Web程序的负载测试,作为性能测试的一部分。首先会给你一下常用的引导来帮助你准备和计划一个负载测试。章节其余的部分将会循序渐进地将Jmeter组件预排在一起来创建一个负载测试计划。这个章节的最后一部分会捕获执行完测试后的测试结果。
Preparing for Load Testing
为了准备负载测试标出一系列基于测试目标服务器的关注点是非常重要的。负载测试帮助用基准问题测试性能服务器的性能行为,为了得到成的负载测试,这点是很重要的考虑正常预期和其他问题。
What You Need to Know
之前文本中提到的,负载测试在这里是subjects应用服务器工作接近它的限制。很明显,限制点需要明确定义,理解,被利益相关者同意,即你的上司。另外,性能度量需要很清楚为了保持性能目的被检验。
负载测试的重要期望包括:
对应用进行负载测试适合的时间,在服务器上没有开发工作(负载测试可能会引起服务器崩溃),没有其他用户在使用服务器(否则测试结果可能不准确)。
性能基准,可接受的层次,或目标。
测试的目的。
应用在使用的网络协议,如HTTPs,HTTP,FTP等。
如果你的应用有个状态,该方法用来管理它(URL重写,cookies等)。
工作压力在平常和高峰时期。
无关应用所在环境,任何形式的性能测试,包括负载测试,在功能稳定的应用程序上执行通常都是可取的。当AUT(Application Under Test)的功能足够稳定来产生一致性和正确的结果时,是做负载测试的最好时机。
Some Helpful Tips to Get Better Results
使用可度量的测试场景(使用用例很有帮助)来构造测试计划用真实的测试用例;
在机器上运行Jmeter而不是运行你正在测试的应用程序;
确保机器运行时Jmeter有足够的网络带宽,这样网络连接对结果只有很小或没有影响。另外,机器运行时Jmeter需要足够的运算容量(内存,CPU)来形成压力;
让Jmeter的测试计划跑一段很长的时间,数小时或数天,或大量的迭代。这样产生的偏差更小,能给一个更好更准确的结果。另外,这种做法可以测试系统的可用率,突出服务器性能的延时;
在测试并发用户前,保证应用程序对于一个用户是稳定的最优的;
包含思考时间或延时可在Jmeter测试计划中使用定时器;
测试需要在可监控和可控制的环境中进行,以阻止其他用户影响Jmeter的结果;
仔细观察以下四个主要事物:处理器,内存,硬盘和网络‘
只有在服务器运行jmeter是分配给测的任务,其他你可能被指责造成DoS攻击。
Using JMeter Components
因为实际和线上的原因,我们将会使用一台存在的远程服务器来测试性能。首先,我们要创建一些有用的场景来作为我们测试的基线。
第一步,我们需要确定测试用例。一般,我们测试5个主要场景:
首页
关键词搜索——新用户进行关键词搜索
新建账号——新用户创建账号
选择标题——注册客户选择的特殊标题
添加到购物车——注册用户添加所选到购物车
为了简单,这些场景将会包含在一个单独的Jmeter测试计划中。
Recording HTTP Requests
快速捕获应用程序HTTP页面的方法是录制发给服务器的每一个请求。因此我们需要使用特殊目的的配置原色:HTTP代理服务器。注意代理服务器原价只在工作台中可用。
代理服务器元素不仅录制任何的页面请求,包括用户请求,它也可以录制浏览器的背景请求。因为我们只希望代理元素录制发给目标服务器的请求,设置web过滤只允许当前浏览器发给目标服务器的请求。否则,不需要的请求会混淆录制。你会发现这些web过滤器作为在任何当前网络安全工具或软件的可选项运行在您机器上。
运行Jmeter(双击jmeter/bin文件夹下的jmeter.bat),你将会看到测试计划和工作台两个默认元素。右击工作台选择添加>非测试元素>HTTP代理服务器。
HTTP代理服务器配置元件作为工作台的子节点出现。必须记住,作为工作台的子元件是不会作为测试计划的一部分进行保存,但是可以分开保存它们。在HTTP代理服务器配置目标控制器可以允许你确定记录请求放置在哪和分组选项允许记录页面作为分组或单独的请求。注意我们使用的是默认端口,按照下面的指示设置浏览器。
接下来,我们将会改变浏览器的设置来接受代理,在相同的端口进行监听。你可以为浏览器和Jmeter代理设置使用端口90。
下图是FireFox和IE浏览器的设置:
我们认为一个单独的页面请求会有多个嵌入请求如图片、JavaScript文件、CSS文件等。因此为了更成功的记录,可以为每一个请求包含子请求创建控制器。
在HTTP代理服务器上右击,选择添加 | 逻辑控制器 | 简单控制器。重复以上步骤添加5个控制器,或者你可以简单的复制粘贴。给每个控制器命名为:首页,关键字搜索,创建账户,选择标题和添加到购物车。然后配置HTTP代理服务器中的目标控制器为首页,其他保持默认。
现在我们已经准备好录制我们的第一个页面请求。回到JMeter,点击HTTP代理服务器界面上的开始按钮,使用你的浏览器。记住JMeter会录制浏览器中的所有HTTP请求。我们今天的浏览器有很多插件,因此,你可能希望能分离出发给目标服务器的请求。你需要配置你的浏览器或防火墙来做这个工作。
单击开始按钮,在浏览器中输入需要测试的服务器的URL地址。你将会看到JMeter开始录制首页的请求和子请求到首页控制器。(需要部署在本地的服务)
接下来,在目标控制器中,选择HTTP 代理服务器>关键词搜索,回到浏览器,输入关键词点击搜索按钮。JMeter将会录制搜索页面和它的子请求到关键词搜索控制器中。
创建账户,选择标题和添加到购物车也是一样的处理。
当录制结束,我们需要右键HTTP代理服务器控制器保存在你指定的文件夹下。每一个请求可能会也可能不会形成子请求。现在Web浏览器的缓存特点是允许这些文件(*.png,*.jpg,*.css,*.js等)在第一个他们下载过来时存储在浏览器的缓存中。除非主请求中有变化,否则浏览器不会为这些缓存文件做新的请求,只会简单的加载本地的缓存。这个特点在应用程序性能的基准中有何帮助呢?对于迭代,这变成了一个测试目标的决定应用程序是否应该在第一个用户访问和已经存在用户访问的情况下评价测试性能。如果我们测试第一次的访问者,我们可以用时第一次录制来模拟第一次访问用户。随后的录制可以模拟已经访问过的用户。
另外,我们可以配置代理服务器的配置元件来排除录制特定的文件类型。随后的相同动作的录制可以使用HTTP代理服务器的新配置来排除缓存文件。让我们来开始另一轮的录制然后查看结果如何。
我们的目的是,模拟10个已经存在的用户,运行测试计划至少10次迭代,思考时间再1到3秒之间。我们将使用第二次的录制,因为它最接近模拟已有的访问者,我们期望缓存文件已经存储在本地。移除组件,高亮测试计划中的控制器按下delete键。移动测试计划中新的控制器,简单高亮然后在线程组中复制粘贴。
Creating the Test Plan 创建测试计划
我们会创建一个单独的线程组(用户组)然后配置成我们所期望的测试计划。
右击测试计划元件,选择添加 | 线程组。配置线程数量为10,Ramp-Up为1秒,循环次数为50.当然你也可以设置调度器让测试计划达到设定条件后自动运行。
我们希望每个请求的目标服务器只有一个,因此我们需要设置默认请求来实现这一目的。增加测试计划配置元件 | HTTP请求默认值。
在这个测试中需要模拟真实场景,在创建账户请求中需要500个不同的账户被创建。我们需要生成多个新用户像JMeter创建新的账户,一种选择是特定的账号对解析成适当的取样器,在这个例子中\login请求在创建账户控制器。Jmeter提供了该功能前置处理器 | 用户参数 或 配置元件 | CSV Data Set Config。用户参数元件允许用户为用户变量指定特定值到具体到各个线程。CSV Data Set Config元件提供相同的目的。这些值读取顺序是从文件中一行行读取,这些值会分割成变量之后可以在线程的整个生命周期使用。
提供大量用户,CSV Data Set Config是个不错的选择。
前置处理器 > 用户参数:手动输入参数
配置元件 > CSV Data Set Config:读取外部文件
我们需要创建500个不同的账户,自然是选择CSV Data Set Config元件。建议为改测试创建的CSV文件跟测试计划放置在同一个目录下。这个元件可以让你定义数据文件的分隔符。我们只是需要500个特定账号,无须选择recycle on EOF,该项的功能是一旦这个文件已经解析过从文件的开始重读这些账户(读到文件尾处,循环取值)。
这些数据需要解析成合适的参数使用语法:${变量名}。我们将在创建账户 | /login Sampler中使用账户,你可以看到名字和参数(邮箱、密码、确认密码)被取样器捕获。
Adding Listeners
在测试计划中增加监听器。我们是基于场景来评价性能,每一个场景控制器需要有它自己的监听器。一个监听器用来捕获性能数据已经足够,保存的数据根据所选的监听器可以以不同的方式呈现。接下来的步骤会带你走一遍。
右击Homepage的控制器,选择新增 | 监听器 | 监视器结果。在文件名文本框中输入xml或jtl后缀的名称,会将该监听器的请求结果保存下来。默认会放置在JMeter安装路径的\bin目录下;你也可以制定一个特定的存放位置。
Adding Timers
因为我们是模拟真实胡静的用户,因此需要考虑再请求之间有思考时间。真实用户需要时间考虑下一步动作,点击一些链接或按下按钮等,这些会产生新的请求给目标服务器。
新增一个定时器,右击需要模拟思考时间的元件,新增 | 定时器,选择定时器类型。对于这个练习,我们会配置两个定时器,Uniform Random timer 和固定定时器来尽量真实的模拟真实用户的动作。Uniform Random timer在每一个取样器请求时停顿一个随机时间,每一个时间间隔发生的概率都是一样的。总的延迟是随机值和偏移量的总和。与此同时,固定定时器允许线程在每个请求间暂停相同的时间。
我们需要组织测试计划树,把请求取样器的子请求作为取样器的子节点,这样我们可以根据用户的特定动作更好地度量性能。查看所有取样器的结果,我们可以在测试计划节点下新增一个总的监听器,并配置文件名称,这样测试总结数据可以另外保存。
Running the Test Plan
现在我们已经准备好可以跑创建的测试计划。把线程组命名为“10 Users”。灰色小的指示框在控制面板的右上方(不知道是哪个指示框,应该是指下图中的绿色图标吧)。在指示框旁边的数据表明活动线程数 vs 线程组中所有的线程数。
Jmeter需要先保存测试计划再运行。除非特别指明,不然测试计划都会保存在JMeter的安装路径\bin文件夹下。
Interpreting(解释) the Results
当测试完成后,我们可以检索每个控制器保存下来的结果。断言结果监听器保存的数据可以用多种形式查看。
图形结果监听器,数据图表向我们展示了广泛的分散数据,代表大量值标准偏差。结果高度的倾斜或不对称意味着结果不准确的响应时间。在聚合报告和图形结果中的中间值更接近响应时间。
我们怎样度量服务器性能降低点,瓶颈如何出现?这个重要的关键问题可能被解决如果我们跑很多次不同用户数量的线程组,如10,50,100或500或大量的关键任务。然后我们可以判断性能降低点在何时出现。这些用户组可以放在同一个测试计划或不同的测试计划中,但是要保持相同的设置。这些实践可以让我们衡量服务器性能的标准来找到服务器瓶颈,为将来的测试创建一个基准点。
然而我们的测试无法看出性能的降级,因为只是少数的用户在同时跑。如果我们跑50可以得到一个更准确的图表,会有失败的请求,在真实环境会肯定会发生。你可以希望扩展测试计划来包含50,100或甚至500的用户来找出任何性能降级的出现。
平均4.3s,中间值4.5s,响应的速度通常是可以接受的,满足了可接受的web页面响应阈值。
你会发现这个分析是受限的,因为它的结果只是针对一小部分的场景和并发用户。但是不要怕,在之后的测试后你可以做跟多的分析,如果你创建更大的线程组,可以选择压力测试或者监视服务器的性能。
Remote Testing with JMeter
现在用不到
Monitoring the Server's Performance 监视服务器性能
有个特定的监听器允许你可以监视目标服务器的性能当取样器发送请求的时候。然后,监视器结果监视器设计为需要跟Apache Tomcat一起工作,而且需要版本在5以上。
Summary
这个测试帮助找出性能目标或者服务品质在给定的线程和场景下是否达到。
总结:
1、配置浏览器代理服务器;
2、在Jmeter工作台中添加HTTP代理服务器并配置;
3、在HTTP代理服务器下添加简单控制器,如简控A,简控B;
4、若录制的内容要放在 简控A 中,在HTTP代理服务器的目标控制器中选择“工作台>HTTP代理服务器>简控A”;
5、开启HTTP代理服务器;
6、在浏览器中输入网址,开始录制;
7、结果:录制不下来。
第6章 功能测试
Jmeter在功能测试方面是很有用和方便的。尽管Jmeter是用来性能测试的工具,功能测试元素可以集成在测试计划中,原来是设计来只是负载测试。很多其他负载测试工具提供很少或没有这个特点,限制了性能测试的目的。在负载测试测试计划中集成功能测试元素,你可以创建一个测试计划来唯一运行这个功能。
Preparing for Functional Testing
Jmeter没有内嵌的浏览器,它测试在协议层,而不是客户层,不会返回页面的查看。测试应用程序的GUI很很困难的。为了弥补这个不足,Jmeter允许测试者基于断言和客户端接受到的HTML文件创建标记。有一些HTML标记的知识,你可以测试和检查你希望出现在浏览器中的元素。
P92
JMeter主要组件介绍(转载)
来源网址:http://www.spasvo.com/ceshi/open/kyxncsgj/Jmeter/20131127151134.html
http://www.spasvo.com/ceshi/open/kyxncsgj/Jmeter/20131127151134.html
JMeter的组件主要包含:逻辑控制器,配置元件,定时器,前置处理器,Sampler,后置处理器,断言,监听器。刚开始学习,只能对他们有个大概的了解,以后慢慢使用了就会更熟悉些。
1、逻辑控制器(LogicController)
逻辑控制器主要用来控制JMeter发送请求(也就是采样器)的处理顺序,例如,它可以使从属于它一组请求它与Sampler结合使用可以模拟复杂的请求序列。
2、采样器(Sampler)
采样器也就是发送一个具体的请求到指定服务器,等待服务器的请求。一般,采样器会按照其在测试树中的顺序去执行,但是也会根据逻辑控制器来改变运行的次数和顺序。JMeter 采样器包含:
FTP Request
HTTP Request
JDBC Request
Java object request
LDAP Request
SOAP/XML-RPC Request
WebService (SOAP) Request
3、配置元件(Config Element)
配置元件和它的名字一样,只是配置一些默认的属性和信息,它不向服务器发送任何的请求。配置元件仅对其所在的测试树分支有效。例如,HTTP请求默认 值设置了服务器的名称,那么它所在的测试分支内的HTTP请求的服务器名称都是这个服务器,HTTP请求仅设置路径就可以访问网页了。配置元件主要有:
CSV Data Set Config
FTP请求缺省值
HTTPCacheManager
HTTPCookie管理
HTTP信息头管理器
HTTP授权管理器
HTTP 请求默认值
JAVA请求默认值
LDAP请求默认值
TCP请求默认值
登录配置元件
计数器
但是有个例外,配置元件"用户定义的参数"无论它处于测试树的哪个位置,总是在测试的初始阶段执行。所以最好把它放在线程组的开始部分。
4、监听器(Listener)
监听器是把测试结果用数据进行处理并展示出来。 查看结果树,用表格查看结果,图形结果、、聚合报告,都是我们经常用到的元件。
5、断言(Assertions)
用于检查测试中得到的数据和我们预期的结果是否相同。
6、前置处理器(Per Processors)
在发出请求之前对请求进行特殊的处理。例如,HTTP URL重写修复符则可以实现URL重写,当RUL中有sessionID 一类的session信息时,可以通过该处理器填充发出请求的实际的sessionID 。
7、后置处理器(Post Processors)
对采样器 发出请求后得到的服务器响应进行处理。一般用来提取响应中的特定数据。例如,XPath Extractor 可以提取响应数据中通过给定XPath 值获得的数据。
元件的执行顺序
在同一作用域名范围内,测试计划中的元件按照如下顺序执行。
(1)配置元件(config elements )
(2)前置处理程序(Per-processors)
(3)定时器(timers )
(4)取样器(Sampler)
(5)后置处理程序(Post-processors) (除非Sampler 得到的返回结果为空)。
(6)断言(Assertions)(除非Sampler 得到的返回结果为空)。
(7)监听器(Listeners)(除非Sampler 得到的返回结果为空)。
Jmeter常用组件
来源网址:http://www.ltesting.net/ceshi/open/kyxncsgj/jmeter/2012/0801/205347.html
Threads(Users) > 线程组
Setup thread group:执行测试前进行定期线程组
teardown thread group:执行测试结束后执行定期的线程组
我的理解是C语言中构造和析构函数的作用。
线程组:可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户,线程组中包含的线程数量在测试执行过程中是不会发生改变的。
线程数:所有任务都是继承线程组,开通多少个线程就代表有多少个并发用户;
取样器(Sampler):性能测试中向服务器发送请求,记录响应信息,记录响应时间的最小单元,JMeter 原生支持多种不同的sampler,可以认为所有的测试任务都由取样器承担;
Ramp-Up Period:在设定的时间内(单位:s) 创建完所有的线程 ,如开了10个线程,该参数为5s,表示每个线程的间隔时间为0.5s。
循环次数:一个线程的循环次数;
Delay Thread creation until needed:延迟创建线程,知道该线程开始采样,一般需要Ramp-Up Period时间足够长,这样可以支持更多的线程,但不会有太多是同时处于活动状态。
调度器:需要输入启动和结束时间,使用启动延迟和持续时间文本域。注意启动延迟会覆盖启动时间,持续时间会覆盖结束时间。
Threads(Users) > Test Fragment
测试片段(Test Fragment):是控制器上的一个特殊的线程组,它在测试树上与线程组处于一个层级。与线程组的不同是它不被执行,除非它是一个模块控制器或者是被控制器所引用时才会被执行。
线程组 >
逻辑控制器:一类是用于控制test plan中sampler节点发送请求的逻辑顺序的控制器,如if,switch等;另一类是用来组织可控制sampler节点的,如事务、吞吐量控制器等。
取样器(Sampler):是性能测试中向服务器发送请求,记录相应信息,响应时间的最小单位,每一种不同类型的sampler可以根据设置的参数向服务器发出不同类型的请求。
配置元件(Config Element):用于提供对静态数据配置的支持。
定时器(Timer):用于操作之间设置等待时间,等待时间是性能测试中常用的控制客户端QPS的手段。
前置处理器(Per Processors):用于在实际的请求发出之前对即将发出的请求进行特殊处理。
后置处理器(Post Processors):用于对sampler发出请求后得到的服务器响应进行处理。
断言(Assertions):用于检查测试中得到的相应数据等是否符合预期,断言一般用来设置检查点,用以保证性能测试过程中的数据交互是否与预期一致。
监听器(Listener):对测试结果数据进行处理和可视化展示的一系列元件。