Apache JMeter 是Apache组织的开放源代码项目,是一个纯Java桌面应用,用于压力测试和性能测量。它最初被设计用于Web应用测试但后来扩展到其它测试领域。javascript
操做页面以下:html
Apache JMeter能够用于对静态的和动态的资源(文件,Servlet,Perl脚本,Java对象,数据库和查询,FTP服务器或是其它资源)的性能进行测试。JMeter能够用于分析不一样压力条件下的整体性能状况。也可使用JMeter提供的图形化界面,分析性能指标或者在高负载状况下测试你的服务器,脚本,对象。html5
1.1.1安装java
步骤一:要安装一个构建版本,简单解压zip/tar文件到你想安装JMeter的目录。保证一个JRE/JDK正确的安装而且设置环境变量JAVA_HOME。mysql
步骤二:运行JMeter, 运行 jmeter.bat web
用来描述一个性能测试,包含与本次性能测试全部相关的功能。也就说本的性能测试的全部内容是于基于一个计划的。ajax
线程组元件是任何一个测试计划的开始点,在一个测试计划中的全部元件都必须在某个线程组下。用于控制Jmeter执行测试计划时使用的线程数量。正则表达式
设置线程数算法
设置ramp-up periodsql
设置测试要执行的次数
每一个线程将会独立运行测试计划,互不干扰。多个线程用于模仿对服务器的并发访问。ramp-up period指jmeter用于达到所有选择的线程的时间,单位是s,30个线程时间设置120秒,那么线程相继间隔为4秒。
循环次数,若是次数设置为1,那么jmeter在中止前只执行测试计划一次。
启动时间:测试计划何时启动,启动延迟会覆盖它。当启动时间已过,手动运行脚本时也当前时间也会覆盖它(但启动时间页面显示不会变)。
结束时间:测试计划何时结束,持续时间会覆盖它。
持续时间(秒):测试计划持续多长时间,会覆盖结束时间。
启动延迟(秒):测试计划延迟多长时间启动,会覆盖启动时间。
Jmeter有两种类型的控制器:取样器和逻辑控制器
取样器指jmeter向一个服务器发送请求。目前有以下取样器:
FTP请求、HTTP请求、JDBC请求、JAVA请求、LDAP请求、SOAP/XML-RPC请求、WEB服务请求。每一个取样器有几个能够设置的属性。能够向取样器添加一个或多个配置元件来进一步的控制取样器。Jmeter以你向树中添加取样器的顺序发送请求。
逻辑控制器容许你定制jmeter什么时候发送请求。逻辑控制器包括取样器,配置元件,其余逻辑控制等。逻辑控制器可以更改他的子元件中的请求的顺序。
做用:临界区控制器确保其子节点下的取样器或控制器将被执行(只有一个线程做为一个锁)
Lock name:锁名称,这里能够填入其子节点下执行的线程的名称,这个线程做为一个全局锁存在
做用:用来遍历当前元素的全部可执行场景;在用户自定义变量中读取一系列相关的变量,该控制器下的采样器或控制器都会被执行一次或屡次,每次读取不一样的变量值;
输入变量前缀:在其中输入须要遍历的用户参数(User Parameter)
Start index for loop(exclusive):循环指数开始(惟一)→ 遍历查询的变量范围,开始的值(这里若是不填写,默认从1开始,若是没有1开始的变量,执行时会报错)
End index for loop(inclusive):循环指数结束(包含)→ 遍历查询的变量范围,结束的值
输出变量名称:将遍历查询到的符合条件的用户参数赋值给输入变量(Vname),而后就能够在控制器下的取样器使用,格式为${输出变量名}
Add”_”before number:输入变量名称中是否使用“_”进行间隔
PS:这个控制器通常配合配置元件→ 正则表达式提取器来一块儿使用,可对页面上的某些元素进行重复处理。
做用:用于引用外部的Jmx文件;从而控制多个测试计划组合
include Test Plan:包含测试计划的文件名,能够点击浏览,从文件夹保存的JMX文件夹目录下选择对应的JMX文件
使用方法:建立一个测试计划,下面可添加取样器/控制器等,而后保存测试计划,为了方便起见, 线程组也能够添加外部JMX文件中用于调试;
若是测试使用Cookie或用户定义的变量,这些应放置在顶层(包括文件),不然没法正常工做;此元素不支持变量/函数在文件名字段中;可是,若是属于包含控制器定义的内容,则使用前缀路径名。
当使用包含控制器中包含相同的JMX文件,则要确保文件名不一样,以免没法读取;若是文件不能被发现,那么控制器会尝试打开文件名相对于JMX启动目录。
做用:用于控制该控制器下的取样器/控制器的运行时间
Runtime(seconds):运行时间,单位为:秒
做用:经过给该控制器中的value赋值,来指定运行哪一个取样器(也能够理解为开关控制器)
Switch value:控制器具体赋值的value值字段
有两种赋值方式:
①.第一种是数值,Switch控制器下的子节点从0开始计数,经过指定子节点所在的数值来肯定执行哪一个元素。
②.第二种是直接指定子元素的名称,好比采样器的Name来进行匹配。当指定的名称不存在时,不执行任何元素。
当Value为空时,默认执行第1个子节点元素。
做用:运行其子节点下的取样器/控制器,直到条件为“假”
Condition(function or variable):条件(函数或变量):里面可填入判断依据的条件,参照使用方法:可能的条件值有:
①.空白:最后一个示例循环失败时退出循环
②.最后一个值:最后一个示例循环失败时退出循环。 若是以前的最后一个示例只是循环失败,不进入循环。
③.不然:退出时(或不输入)循环条件等于字符串“ 假 ”
条件能够是任何变量或函数,最终等于字符串” 假 ”。须要注意的是:条件是评估两次,一次取样前,一次随机取样
做用:生成一个额外的采样器来测量其下测试元素的整体时间;值得注意的是,这个时间包含该控制器范围内的全部处理时间,而不只仅是采样器的
Generate parent sample:生成父样本(不一样的模式选择)
include duration of timer and pre-post processors in generated sample:包含时间的计时器和先后处理器生成的示例(不一样的模式选择)
对于Jmeter2.3以上的版本,有两种模式的操做
①.事务采样器是添加到其下采样器后面的
②.事务采样器是做为其下采样器的父采样器
生成的事务采样器的测量的时间包括其下采样器以及其余的一切时间。因为时钟频率问题,这个时间可能略大于单个采样器的时间之和;
时钟开始时间介于控制器记录开始时间与第一个采样器开始之间,时钟结束时间亦然。
事务采样器只有在其子采样器都成功的状况下才显示成功。
在父模式下,事务控制器下的各个采样器只有在结果树里才能看到;同时,子采样器的数据也不会在CSV文件中显示,可是在XML文件中能够看到。
做用:交替控制,使得该控制器包含的取样器步骤交错执行在每一个循环中
忽略子控制器模块(Ignore sub-contorller blocks):若是勾选此项,交错控制器将sub-controllers像单一请求元素同样,一次只容许一个请求/控制器
使用方法:假使该控制器下有2个取样器A和B,交替执行A和B2个请求,即每次传递一个子请求到这个测试,按子元件的排列顺序
做用:在多线程循环的时候,将使其子节点下的取样器请求只运行一次
做用:jmeter自带的翻译这里是错误的,由于它并不能控制吞吐量(吞吐量的概念请自行百度);其实质做用是容许用户控制执行的频率
总共有两种执行模式:百分比执行和总执行
总执行(Total Executions):使控制器中止执行必定数量的测试计划
百分比执行(Percent Executions):使控制器按必定比例执行迭代的测试计划
流量(Throughput):对应上面的执行数量或者比例
每一个用户(Per User):每一个用户,若是勾选此项,将致使控制器计算是否应该执行在每一个用户(每一个线程)的基础上;若是不加以控制,那么将计算全球全部用户。
做用:容许用户控制该控制器下面的取样器/控制器是否执行该节点下的子节点;
条件(默认JavaScript)(Condition(default javascript)):使用JavaScript的函数或变量进行评估判断条件为真或假
条件解释为变量表达式(interpret condition as variable expression):若是勾选该项,那么变量表达式会进行求值,并与“ture”或“false”进行比较,而无需使用JavaScript
对全部子条件执行(evaluate for all children):若是勾选该项,则该controller在没一个子节点执行时执行一次;
默认状况下,该控制器能够对包含在其下面的全部可运行的元素进行执行,但只在入口执行一次
做用:相似代理服务器的做用,在测试执行期间记录测试样本
清除全部记录的样本(Clear all the recorded samples):点击能够清除全部已经记录的测试样本
通常状况下,在测试执行时候,它没有效果,可是在执行HTTPS测试脚本时,会记录下全部测试样本
做用:该控制器下的取样器请求能够循环运行
循环次数(Loop Count):在输入框中输入须要循环的次数,控制器下的请求便可循环运行
永远(forever):若是勾选该项,那么控制器下的请求可一直运行
做用:测试控制器子节点下的某一个模块,而不是整个测试计划
寻找目标元素(Find target element):寻找测试计划中须要特定测试的元素,模块;也可理解为该控制器能够控制已经封装好的模块元素
做用:用来组合取样器和其余逻辑控制器
简单控制器是最基本的控制器,对jmeter测试运行没有任何影响,可用来命名某些操做
做用:相似交替控制器,但该控制器随机选取某一个取样器请求并执行
忽略子控制器模块(Ignore sub-controller blocks):若是勾选此项,交错控制器将sub-controllers像单一请求元素同样,一次只容许一个请求/控制器
做用:相似于简单控制器,将执行每一个子节点下的取样器请求一次,可是执行是随机的
JMeter配置元件能够用来初始化默认值和变量,以便后续采样器使用。将在其做用域的初始化阶段处理。
注意:CSV Dataset变量在每次测试循环的初始阶段定义,因为定义发生在配置处理完成以后,因此他们不能用于一些配置元件(如JDBC Config),以便在配置时处理他们的内容。可在HTTP Auth Manager中正常使用。
默认,jmete0072编程发送出的每一个请求是不间断的。咱们经过添加一个定时器到线程组来指定延迟时间。若是不添加延时,jmeter可能在较短的时间内发送大量的请求导致服务器瘫痪。
一、定时器是在每一个sampler(采样器)以前执行的,而不是以后(不管定时器位置在sampler以前仍是下面);
二、当执行一个sampler以前时,全部当前做用域内的定时器都会被执行;
三、若是但愿定时器仅应用于其中一个sampler,则把定时器做为子节点加入;
四、若是但愿在sampler执行完以后再等待,则可使用Test Action;
若是你须要让每一个线程在请求以前按相同的指定时间停顿,那么可使用这个定时器;须要注意的是,固定定时器的延时不会计入单个sampler的响应时间,但会计入事务控制器的时间。
对于“java请求”这个sampler来讲,定时器至关于loadrunner中的pacing(两次迭代之间的间隔时间);
对于“事务控制器”来讲,定时器至关于loadrunner中的think time(思考时间:实际操做中,模拟真实用户在操做过程当中的等待时间)。
咱们一般说的响应时间,应该大部分状况下是针对某一个具体的sampler(http请求),而不是针对一组sampler组合的事务 。
如须要每一个线程在请求前按随机时间停顿,那么使用这个定时器,上图表示暂停时间会分布在100到400之间,计算公式参考:Math.abs((this.random.nextGaussian() * 300) + 100)
和高斯随机定时器的做用差别不大,区别在于延时时间在指定范围内且每一个时间的取值几率相同,每一个时间间隔都有相同的几率发生,总的延迟时间就是随机值和偏移值之和。
下面表示的是随机延迟时间的最大值是100毫秒:
(1)Random Delay Maximum(in milliseconds):随机延迟时间的最大毫秒数
(2)Constant Delay Offset(in milliseconds):暂停的毫秒数减去随机延迟的毫秒数
可让JMeter以指定数字的吞吐量(即指定TPS,只是这里要求指定每分钟的执行数,而不是每秒)执行。
吞吐量计算的范围能够为指定为当前线程、当前线程组、全部线程组等范围,而且计算吞吐量的依据能够是最近一次线程的执行时延。这种定时器在特定的场景下,仍是颇有用的。
这个定时器和loadrunner当中的集合点(rendezvous point)做用类似,其做用是:阻塞线程,直到指定的线程数量到达后,再一块儿释放,能够瞬间产生很大的压力.
(1)Number of Simulated Users to Group by:模拟用户的数量,即指定同时释放的线程数数量
(2)Timeout in milliseconds:超时时间,即超时多少毫秒后同时释放指定的线程数。
这个定时器,通常状况下用不到,但它能够说是最强大的,由于能够本身变成实现想要作的任何事情,例如:但愿在每一个线程执行完等待一下,或者但愿在某个变量达到指定值的时候等待一下。
这个定时器在每一个线程请求以前按随机的时间停顿,大部分的时间间隔出如今一个特定的值,总的延迟就是泊松分布值和偏移值之和。
上面表示暂停时间会分布在100到400毫秒之间:
(1)Lambda(in milliseconds):兰布达值
(2)Constant Delay Offset(in milliseconds):暂停的毫秒数减去随机延迟的毫秒数
在jemter最新的版本中,新增了这个定时器,能够这么理解,这个定时器至关于BeanShell定时器的“父集”,它可使用java、JavaScript、beanshell等多种语言去实现你但愿完成的事情;
6.10 BSF定时器(BSF Timer)
BSF Timer,也是jmeter新的版本中新增的定时器,其使用方法和JSR223 Timer很类似,只须要在jmeter的lib文件夹导入其jar包,就能够支持脚本语言直接访问Java对象和方法的必定时器。有了它 , 你就能在java application中使用javascript, Python, XSLT, Perl, tcl, ……等一大堆scripting language. 反过来也能够;就是在这些scripting language中调用任何已经注册过了的JavaBean,java object。它提供了完整的API实现经过Java访问脚本语言的引擎。
设置预期结果,查看返回的实际结果与预期结果是否一致。
BeanShell以前关于定时器的随笔中有介绍过,是一种松散类型的脚本语言(这点和JS相似),一种彻底符合java语法的java脚本语言,而且又拥有本身的一些语法和方法;
做用对象:针对sampler中的Bean Shell sampler而使用的断言
Name:断言的名字(能够用一个比较容易理解和分辨的名称)
Comments:注释(对这个断言进行一个解释,备注)
Reset bsh.interpreter before each call:在每次调用Bean Shell以前重置bsh.interpreter类(bsh.interpreter是Bean Shell脚本语言的一种类,也能够理解为一种解析器)
Parameters(String Parameters and String []bsh.args):String参数(String []bsh.args是主类main函数的形式参数,是一个String 对象数组,能够用来获取命令行用户输入进去的参数)
Script file:脚本文件(能够填入脚本文件路径)
Script(see below for variables that are defined):参照下文定义的变量(使脚本文件参照定义的变量来运行)
BSF(Bean Scripting Framework)以前也介绍过,是一个支持在Java应用程序内调用脚本语言 (Script),而且支持脚本语言直接访问Java对象和方法的一个开源项目;
做用对象:针对sampler中的BSF sampler而使用的断言
Script language(e.g.beanshell,javascirpt,jexl):脚本语言(能够从下面的下拉框中选择对应的脚本语言JavaScript、beanshell等)
parameters to be passed to script(=> String Parameters and String []args):(传递给脚本的参数→能够理解为使用BSF断言脚本时候一块儿引用的参数 )
Script file(overrides script):重写脚本(能够经过选择脚本文件的状态,是浏览调用已有的脚本仍是在在下方的输入框内写入脚本;)
Script:下面的输入框表示能够输入变量类型,运用的脚本(取样结果、断言结果、取样日志文件等参数)
这是一种比较特殊的断言元件,针对断言进行字符串替换时使用;
做用对象:须要替换的字符串
Select Comparison Operators:选择比较运算符
Compare Content:能够选择比较的内容类型(true/false或者自定义,编辑)
Compare Time:比较时间(能够设定比较的时间,单位为秒,默认为-1)
Comparison Fitters:比较修改工具
regular expression substitutions:替换正则表达式
Regex String:要替换的字符串(可从断言结果中选择)
substitutions:替换的字符串(替换结果)
对响应类为XML类型的文件进行断言;
做用对象:针对sampler中的SOAP/XML-RPC Request而使用的断言
Tidy Settings:Tidy 环境(Tidy是一个HTML语法检查器和打印工具,能够将HTML转换为XML类型的文件)
Doctype:文档类型(可经过下拉框选择不一样文档类型→ omit疏忽遗漏的/auto动态的/strict严格的/loose宽泛的。。。。。。我也不太懂这里什么意思GG)
Format:文件格式(可选择HTML/XHTML/XML三种不一样类型的文件格式来检查返回内容)
Errors only:偏差校订(能接受的最大值)
Error threshold:偏差/错误范围(可选择偏差/错误数量的范围,最大值)
Warning threshold:警告范围(可选择偏差警告的数量范围,最大值)
若是勾选“Error only”这里忽略Warning,只对偏差做统计检查;若是对返回内容的检查结果不超过指定结果,则断言经过,不然失败。
Write JTidy report to file:写入JTidy报告的文件(JTidy是Tidy的一个java移植,能够将它当成一个处理HTML文件的DOM解析器)
JSR223即Java 规范请求,是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求;
做用对象:针对sampler中的JSR223 sampler而使用的断言
Script language(e.g.beanshell,javascirpt,jexl):脚本语言(能够从下面的下拉框中选择对应的脚本语言JavaScript、beanshell等)
parameters to be passed to script(=> String Parameters and String []args):(传递给脚本的参数→能够理解为使用JSR223断言脚本时候一块儿引用的参数 )
Script file(overrides script):重写脚本(能够经过选择脚本文件的状态,是浏览调用已有的脚本仍是在在下方的输入框内写入脚本;)
Script:下面的输入框表示能够输入变量类型,运用的脚本(取样结果、断言结果、取样日志文件等参数)
MD5是一种消息摘要算法,用以提供消息的完整性保护(具体关于MD5的知识请自行查询);
做用对象:针对参数类型为MD5Hex加密的参数的断言
MD5Hex:将已被MD5加密的参数写入其中,添加取样器等其余元件
用于判断返回内容的大小;
做用对象:返回信息,响应报文
APPly to:应用范围(返回内容的断言范围)
Main sample and sub-samples:做用于父节点取样器及对应子节点取样器
Main sample only:仅做用于父节点取样器
Sub-samples only:仅做用于子节点取样器
JMeter Variable:做用于jmeter变量(输入框内可输入jmeter的变量名称)
Response Size Field to Test:响应字节的测试范围(能够选择用于判断的响应范围)
Full Response:所有响应
Response Headers:响应头部
Response Body:响应主体
响应代码:响应报文相关的代码
响应信息:响应报文的信息
Size to Assert:断言字节范围
字节大小单位为:字节;比较顺序是①返回内容的大小②比较类型③指定字节大小
SMIME是一种多用途网际邮件扩充协议,相比于以前的SMAP邮件传输协议,增长了安全性,对邮件主题进行保护;
做用对象:针对采用了该种邮件传输协议的信息
signature:签名(可选择对协议的签名验证状态)
Verify signature:验证签名
Message not signed:没有签名消息
Signer certificate:签名证书(由于SMIME协议增长了安全传输,须要证书验证)
No check:不检查
Check values:检查
Signer distinguished name:签名证书者名称(证书注册者的名称)
Sigmer email address:签名者的邮件地址(注册的邮件地址)
Issuer distinguished name:发行者名称(由谁发行的证书)
Serial Number:证书序号
Certificate file:选择证书文件
Execute assertion message at position:执行断言消息的位置(在返回消息的具体哪一个位置执行断言)
亦能够称为XML模型断言/XML数据类型断言;XML Schema 定义了两种主要的数据类型:①xml document schema 文档架构 ;② 文档架构xml-schema xml模式
做用对象:返回结果为XML概要断言的2中数据类型的消息
XML Schema:XML概要模型
File Name:文件名(写入须要断言的文件名称)
XML(可扩展标记语言) 提供一种描述结构化数据的方法。与主要用于控制数据的显示和外观的 HTML 标记不一样,XML 标记用于定义数据自己的结构和数据类型;
做用对象:判断返回结果是否和xml的格式即<></>成对出现
XPath即为XML路径语言,它是一种用来肯定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。
做用对象:针对返回信息为XPAth的数据类型进行断言
Apply to:适用范围
Main sample and sub-samples:主要样本和次级样本
Main sample only:仅主要样本
Sub-samples only:仅次级样本
JMeter Variable:jmeter变量(输入框内可输入jmeter的变量名称)
XML Parsing Options:XML解析选项
Use Tidy(tolerant parser):使用Tidy(容错解析器),默认选择quiet(不显示)
Quiet:不显示
Report errors:错误报告
Show warnings:显示错误
Use Namespaces:使用名称空间
Validate XML:验证XML(文件包/数据)
Ignore Whitespace:忽略空格(这容许你指定语法分析器能够忽略哪一个空格,而哪一个空格是重要的)
Fetch external DTDs:获取外部DTDs(一些XML元素具备属性,属性包含应用程序使用的信息,属性仅在程序对元素进行读、写操做时,提供元素的额外信息,这时候须要在DTDs中声明)
XPath Assertion:输入框中写入xpath断言,点击Validate验证其正确性
True if nothing matches:确认都不匹配
判断返回内容中的内容
做用对象:响应报文中的全部对象
APPly to:适用范围
Main sample and sub-samples:做用于父节点取样器及对应子节点取样器
Main sample only:仅做用于父节点取样器
Sub-samples only:仅做用于子节点取样器
JMeter Variable:做用于jmeter变量(输入框内可输入jmeter的变量名称)
要测试的响应字段:要检查的项
响应报文
Documeng(text):测试文件
URL样本
响应代码
响应信息
Response Headers:响应头部
Ignore status:忽略返回的响应报文状态码
模式匹配规则:
包括:返回结果包括你指定的内容
匹配:(好像跟Equals查很少,弄不明白有什么区别)
Equals:返回结果与你指定结果一致
Substring:返回结果是指定结果的字串
否:不进行匹配
要测试的模式:即填写你指定的结果(可填写多个),按钮【添加】、【删除】是进行指定内容的管理
用于判断服务器的响应时间
做用对象:服务器
APPly to:适用范围
Main sample and sub-samples:做用于父节点取样器及对应子节点取样器
Main sample only:仅做用于父节点取样器
Sub-samples only:仅做用于子节点取样器
Duration to assert:持续断言
Duration in milliseconds:响应时间设置(单位:毫秒),若是响应时间大于设置的响应时间,则断言失败,不然成功。
前置处理器在取样器请求前执行一些操做。若是前置处理器附有取样器元件,那么它将先于这个取样器元件执行。
后置处理器在取样器请求后执行一些操做。若是后置处理器附有取样器元件,它将在取样器元件运行以后运行。
在jmeter中,经过监听器组件来提供查看、保存、和读取已保存的测试结果功能。
默认状况下,测试结果将被存储为xml格式的文件。另一种存储格式为CSV文件,该格式的好处就是效率更高,但存储的信息不如xml格式详细。
一般状况下,监听器有如下四种类型:
树(tree)表(table)图形日志文件
查看请求结果,经过的测试一般为绿色。红色则表明失败。查看对应Sampler的测试结果的请求、响应数据。
样本数目:是总共发送到服务器的请求数。
最新样本:是表明时间的数字,是服务器响应最后一个请求的时间。
吞吐量:是服务器每分钟处理的请求数。
平均值:是总运行时间除以发送到服务器的请求数。
中间值:是表明时间的数字,有一半的服务器响应时间低于该值而另外一半高于该值。
偏离:表示服务器响应时间变化、离散程度测量值的大小,或者,换句话说,就是数据的分布。
#Samples:表示你此次测试中一共发出了多少个请求,若是模拟10个用户,每一个用户迭代10次,那么这里显示100
Average:平均响应时间——默认状况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也能够以Transaction 为单位显示平均响应时间
Median:中位数,也就是 50% 用户的响应时间
90% Line:90% 用户的响应时间
Note:关于 50% 和 90% 并发用户数的含义,
Min:最小响应时间
Max:最大响应时间
Error%:本次测试中出现错误的请求的数量/请求的总数
Throughput:吞吐量——默认状况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也能够表示相似 LoadRunner 的 Transaction per Second 数
KB/Sec:每秒从服务器端接收到的数据量,至关于LoadRunner中的Throughput/Sec
Http请求+查看结果树
代理服务器操做步骤
建立一个线程组(右键点击“测试计划”--->“添加”---->“线程组”)
建立一个http代理服务器(右键点击“工做台”--->“添加”--->“非测试元件”--->“http代理服务器”)
Tip HTTP服务器代理设置——分组详解
l 不对样本分组:全部请求所有罗列
l 在组间添加分隔:加入一个虚拟的以分割线命名的动做。
l 每一个组放入一个新的控制器:执行时按控制器给输出结果
l 只存储每一个组的第一个样本:保存对于一次url请求。
设置完后要启动代理服务器,录制完成后记得关闭,
IE--->“internet属性”--->“链接”--->“局域网设置”
在浏览器里对指定的页面进行访问。录制完成后,把浏览器的代理服务器勾去掉。
Badboy是一个强大的工具,旨在帮助测试和开发复杂的动态应用。Badboy包括一个简单而全面的捕获/回放界面,强大的负载测试的支持,详细的报告图表等等,从而使Web测试和开发变得更加容易. 脚本录制完成后,导出为 Export to Jmeter。
1.测试需求:测试20个用户访问连接在负载达到30 QPS时的平均响应时间。
2.测试步骤:
线程组主要包含三个参数:线程数、准备时长(Ramp-Up Period(in seconds))、循环次数。
线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。
准备时长(单位为s):设置的虚拟用户数须要多长时间所有启动。若是线程数为20 ,准备时长为10 ,那么须要10秒钟启动20个线程。也就是每秒钟启动2个线程。
循环次数:每一个线程发送请求的次数。若是线程数为20 ,循环次数为5,那么每一个线程发送5次请求。总请求数为20*5=100 。若是勾选“永远”,那么全部线程会一直发送请求,一到选择中止运行脚本。
第二步:增添HTTP请求
Jmeter提供了一个很是有用的定时器,称为Constant Throughput Timer (常数吞吐量定时器),该定时器能够方便地控制给定的取样器发送请求的吞吐量。
Constant Throughput Timer 的主要属性介绍:
Target throughput(in samples per minute):目标吞吐量。注意这里是每分钟发送的请求数,所以,对应测试需求中所要求的20 QPS ,这里的值应该是1200 。
This thread only :控制每一个线程的吞吐量,选择这种模式时,总的吞吐量为设的 target Throughput 乘以线程的数量。
All active threads : 设置的target 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 基本相同,惟一的区别是,每一个活跃线程都会在全部活跃线程的上 一次运行结束后等待合理的时间后再次运行。
脚本的主要部分设置完成后,须要经过某种方式得到性能测试中的测试结果,在本例中,咱们关心的是请求的响应时间。
Jmeter 中使用监听器元件收集取样器记录的数据并以可视化的方式来呈现。Jmeter有各类不一样的监听器类型,由于上HTTP请求,咱们可在添加聚合报告,更为直观的查看测试结果。
添加聚合报告,右键点击线程组,在弹的菜单(添加--->监听器--->聚合报告)中选择聚合报告。
添加查看结果树 (添加--->监听器--->查看结果树)
第五步:运行脚本
将上面设置好的线程保存到桌面,点击执行
第六步:聚合报告分析
#Samples:表示你此次测试中一共发出了多少个请求,若是模拟10个用户,每一个用户迭代10次,那么这里显示100
Average:平均响应时间——默认状况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也能够以Transaction 为单位显示平均响应时间
Median:中位数,也就是 50% 用户的响应时间
90% Line:90% 用户的响应时间
Note:关于 50% 和 90% 并发用户数的含义,
Min:最小响应时间
Max:最大响应时间
Error%:本次测试中出现错误的请求的数量/请求的总数
Throughput:吞吐量——默认状况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也能够表示相似 LoadRunner 的 Transaction per Second 数
KB/Sec:每秒从服务器端接收到的数据量,至关于LoadRunner中的Throughput/Sec
响应时间单位:毫秒
4、其余:
他们是http协议的2种不一样实现方式。Get是指server从Request URL取得所需参数。从result中的request中能够看到,get能够看到参数,可是post是主动向server发送参数,因此通常看不到这些参数的。
__Random,__threadNum,__CSVRead,__StringFromFile,具体调用方法以下:
${__Random(,,)},$,${__CSVRead(,)},${__StringFromFile(,,,)}。
参看Jmeter函数的使用,经过菜单“选项”->“函数助手对话框”,便可在“函数助手”弹出框上找到Jmeter的函数。
其中${__Random(,,)}方法的第一个参数为随机数的下限,第二个参数为随机数的上限,第三个参数为储存随机数的变量名;${__CSVRead(,)}方法中第一个参数是文件名,第二个参数是文件中的列(列数从0开始);${__StringFromFile(,,,)}方法中第一个参数是文件名,${__StringFromFile(,,,)}方法中没有指定读取文件中的哪一列的参数,因此${__StringFromFile(,,,)}只能读取包含一列的文件。
添加“配置元件”->“用户定义的变量”。“名称”中输入变量名称,此处以登陆为例,定义两个变量username和password。“值”中能够直接输入值,也能够经过Jmeter的函数__CSVRead,__StringFromFile从csv或dat文件中读取,还能够经过前缀加随机数的方法设置参数。
当参数值是某个前缀加一个数字时,能够用前缀名加${__Random(,,)}或$的方法设置参数值。如进行登陆测试以前,先准备了用户名为perf_0到perf_1000的用户,那么用户名就能够设为perf_{__Random(0,1000,)}。
当参数值没有规律的且量不太大时,能够经过${__CSVRead(,)},${__StringFromFile(,,,)}从文件中读取,如将用户名和密码保存在user.csv文件中,user.csv的内容以下:
oriana,123456
admin,admin
dandan,123456
由于user.csv文件中有两列数据,因此只能用${__CSVRead(,)}函数,username参数后的值设为${__CSVRead(user.csv,0)},password参数后的值设为${__CSVRead(user.csv,1)}。
当参数的值没有规律且量不太大时,能够用这种方法。
3.1 建立一个csv文件,内容为参数的值集,每个参数占一列,第一行就开始写参数值,不要写参数名
3.2在测试计划或线程组中添加一个“配置元件”->“CSV Data Set Config”
3.3 Filename中填写步骤2.1中csv文件的完整路径(当csv文件在bin目录下时,只需给出文件名便可)
3.4 Virable Names中填写变量名,若是csv文件中有多个变量,则用逗号隔开
当参数的值没有规律且量比较大时,能够选用这种方法。
4.1 添加“配置元件”->“JDBC Connection Configuration”,设置下列参数:
Database URL:jdbc:mysql://host:port/db(如jdbc:mysql://localhost:3306/testlink
JDBC Driver class:com.mysql.jdbc.Driver
username:链接数据库的用户名(如root)
password:链接数据库的密码
4.2 添加“Sampler”->“JDBC Request”,在SQL Query中输入查询语句,以下:
SELECT CONCAT (“[",
GROUP_CONCAT(
CONCAT("{username:'",login,"'"),
CONCAT("{password:'",password),"'}"),"]“) AS json FROM users
4.3 在JDBC请求中添加“后置处理器”->“正则表达式提取器”,以提取3.4中的用户名和密码为例设置正则表达式提取器的参数:
引用名称:user
正则表达式:username:’(.+?)’\{password:’(.+?)’
模板:$1$$2$
使用时,user_g1即为用户名,user_g2即为对应用户名的密码;更多正则表达式提取方法参见Jmeter正则表达式提取器
其余:
一、参数设置的三种方式:
paramenters:
body data:
files upload:
指定参数的格式,须要在HTTP信息头管理器中添加参数类型
http头部content-type与数据格式:
text/plain:ajax默认方式,将文件设置为纯文本的形式,浏览器在获取到这种文件时并不会对其进行处理(最原始的流)
application/x-www-form-urlencoded : form表单默认的方式,在$.ajax中若是未设置contentType默认也会以这种方式, 在servlet中的把对应的key、value进行相应的处理添加到Map中,全部才能经过request.getParameter()获取,在servlet中的request.getParameter()只能取到 在url 后面的参数与 这种方式提交的数据
multipart/form-data :多用于文件上传,html5伴随出现的formdata 也正用于此(支持普通表单、文件上传,如果传文件则服务器采用特有formdata的解析方式),传递的时候经过流的形式,数据包的格式也有所不一样
application/json :这是如今比较经常使用的方式,在发送数据以前需格式化数据JSON.stringify(),确保格式的正确性,服务器解析方式和上面第二种同样,先获取json字符串在转为JSON对象;