JMeter

本文详细介绍了Apache JMeter性能测试工具的基本概念、组件及其应用场景。包括如何配置测试环境、搭建测试计划、设置线程组、使用定时器控制并发请求、进行结果分析等内容。

性能测试工具通过模拟协议模拟压力

测试计划的元素执行是有序的,通过以下方式执行:

1-配置结点

2-前置处理器

3-定时器

4-取样器

5-后置处理器(只在有结果可用情况下执行)

6-断言(只在有结果可用情况下执行)

7-监听器(只在有结果可用情况下执行)

一、简介

1.1 Jmeter是啥?

Apache JMeter是Apache组织的开放源代码项目,是一个纯Java桌面应用,用于压力测试和性能测试。它最初被设计用于Web应用测试但后来扩展到其他测试领域。

Jmeter不是浏览器,它只负责发出请求和接收请求,不运行JavaScript,不包括渲染。

1.2 Jmeter有啥用?

Apache JMeter可以用于对静态和动态的资源(文件,Servlet,Perl脚本,Java对象,数据库和查询,FTP服务器或是其他资源)的性能进行测试。JMeter可以用于分析不同压力条件下的总体性能情况。
也可以使用JMeter提供的图形化界面,分析性能指标或者在高负载情况下测试你的服务器,脚本,对象。

1.3 配置好JDK

  建议安装JDK环境,虽然JRE也可以,但是压测https需要JDK里面的 keytool工具。压测需要HTTPS

  JDK环境:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

 安装,这里使用的操作系统是Windows,选最后一个下载,下载完直接运行安装。安装完设置一下环境参数。

  • JAVA_HOME:D:\Program Files (x86)\Java\jdk1.8.0_131(jdk安装在哪个盘就写哪个路径)
  • Path:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
  • Classpath:%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar

打开cmd,运行java –version,能得到下面的输出就表示配置正确了。

目前都是自动配置的。

1.4 安装JMeter

 http://jmeter.apache.org/download_jmeter.cgi

下载解压就行。

1.4.1 Bin 目录文件
bin:核心可执行文件,包含配置
            jmeter.bat: windows启动文件:
            jmeter: mac或者linux启动文件:
            jmeter-server:mac或者Liunx分布式压测使用的启动文件
            jmeter-server.bat:mac或者Liunx分布式压测使用的启动文件
            jmeter.properties: 核心配置文件
            
            

extras:插件拓展的包
lib:核心的依赖包
  ext:核心包
  junit:单元测试包

1.5 中英文切换

1.5.1 控制台修改(暂时)

1.5.2 配置文件修改

  D:\apache-jmeter-4.0\bin(此目录为安装目录)下的 jmeter.properties 文件。37行默认为 #language=en  改成language=zh_CN,现在默认中文,要改成英文的话,把#去掉即可

二、Jmeter功能概要

2.1 Jmeter 工具组成部分

2.1.1 资源生成器

  用于生成测试过程中服务器、负载机的资源代码。(LR中的VuGen)

2.1.2 用户运行器

  通常是一个脚本运行引擎,根据脚本要求模拟指定的用户行为。(LR中的Controller)

2.1.3 报表生成器

  根据测试中实时地的数据生成报表,提供可视化的数据显示方式。(LR中的Analysis)

2.1.4 负载发生器

  用于产生负载,通常以多线程或是多进程的方式模拟用户行为。(LR中的Load Generators)

2.1.5 Test Plan(测试计划)

  用来描述一个性能测试,包含与本次性能测试所有相关的功能。也就是说本次性能测试的所有内容是基于一个计划的。

2.2 Threads(Users)线程 用户

2.2.1 setUp thread group

  一种特殊类型的 ThreadGroup,可用于执行 预测试 操作。这些线程的行为完全像一个征程的线程组元件。不同的是,这些类型的线程执行 测试前 进行定期线程组的执行。

2.2.2 teardown thread group

  一种特殊类型的ThreadGroup,可用于执行 测试后 动作。这些线程的行为完全像一个正常的线程组元件。不同的是,这些类型的线程执行 测试结束 后执行定期的线程组。

2.2.3 thread group(线程组)

  这个就是我们通常添加运行的线程。可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户。线程组中包含的线程数量在测试执行过程中是不会发生改变的。

2.3 测试片段(Test Fragment)

  测试片段元素是控制器上的一种特殊的线程组。它在测试树上与线程组处于一个层级。它与线程组不有所不同,因为它 不被执行,除非它是一个模块控制器或者是被控制器所引用时才会被执行。

 

  以下是线程组的 8 类可执行元件

2.4 配置元件(Config Element)

  配置元件(config element)用于提供对 静态数据 配置的支持。如 CSV Data Set config 可以将本地数据文件形成数据池(Data Pool)

2.5 定时器(Timer)

  定时器(Timer)用于操作之间设置等待时间,等待时间是性能测试中常用的控制客户端QPS的手段。JMeter定义了 Bean Shell Timer、Constant Throughput Timer、固定定时器等不同类型的Timer。

2.6 前置处理器(Per Processors)

  用于在实际的请求发出之前对即将 发出的请求 进行特殊处理。例如,HTTP URL 重写修复符则可以实现URl重写,当URL中有sessionID一类的session信息时,可以通过该处理器填充发出请求的实际的sessionID。

2.7 后置处理器(Post Processors)

  用于对Sampler发出请求后得到的 服务器响应 进行处理。一般用来提取响应中的特定数据。

2.8 断言(Assertions)

  断言用于检查测试中得到的相应数据等是否符合预期,断言一般用来设置检查点,用以保证性能测试过程中的数据交互是否与预期一致。

2.9 监听器(Listener)

  是用来对 测试结果数据 进行处理和可视化展示的一系列元件。图形结果、查看结果树、聚合报告。都是我们经常用到的元件。注意:这个监听器可不是用来监听系统资源的元件。

  JMeter有两种类型的控制器:取样器(sample)和 逻辑控制器(Logic Controller),用这些原件来驱动处理一个测试。

2.10 取样器(sample)

  取样器(Sample)是性能测试中向服务器发送请求,记录响应信息,记录响应时间的最小单元,JMeter原生支持多种不同的sampler,如HTTP Request Sampler、FTP Request Sample、TCP Request Sample、JDBCRequest Sampler等,每一种不同类型的 sampler 可以根据设置的参数向服务器发出不同类型的请求。

2.11 逻辑控制器

  逻辑控制器,包括两类元件,一类是用于控制test plan 中 sampler 节点发送请求的逻辑顺序的控制器,常用的有 如果(if)控制器、switch Controller 、Runtime Controller、循环控制器等。另一类是用来组织可控制 sampler 来节点的,如 事务控制器、吞吐量控制器。

三、badboy

3.1 脚本录制

下载:http://www.badboy.com.au

  badboy是一个强大的工具,旨在帮组测试和开发复杂的动态应用。Badboy包括一个简单而全面的捕获/回放界面,强大的负载测试的支持,详细的报告图表等等,从而使Web测试和开发变得更加容易。

弹窗问题

  访问者所使用的浏览器不能完全支持页面里的脚本,形成“脚本错误”。遇到“脚本错误”时一般会弹出一个非常难看的脚本运行错误警告窗口,而事实上,脚本错误并不会影响网站浏览,因此这一警告可谓多此一举。要关闭警告则可以在浏览器的工具菜单选择Internet选项,然后单击高级属性页。进入到浏览标签,并选中“禁止脚本调试”复选框,以后你就不会再收到这些警告了。

3.2 badboy检查点与参数化

  检查点设置:选择要检查的文字,然后在Tools>step1里添加断言,再回放。

四、Jmeter元件作用于和执行顺序

4.1 元件作用域

  8类可被执行的元件(测试计划与线程组不属于 可执行元件),这些元件中,取样器(samlper)是典型的不与其他元件发生交互作用的元件,逻辑控制器只对其子节点的取样器有效,而其他元件(配置元件、定时器、断言、监听器)需要与取样器(sampler)等元件交互。

  在jmeter中,元件的作用域是靠测试计划的树型结构中元件的 父子关系 来确定的,作用域的原则是:

  取样器(sampler)元件不和其他元件相互作用,因此不存在作用于的问题。

  逻辑控制器(Logic Controller)元件只对 其子节点 中的 取样器和逻辑控制器 作用。

  除取样器和逻辑控制器元件外,其他6类元件,如果是某个取样器的子节点,则该元件对其父子节点起作用。如果其父节点不是取样器,则其作用于是该元件父节点下的其他所有后代节点(包括子节点、子节点的子节点等)。

4.2 元件执行顺序

  1. 配置元件
  2. 前置处理程序
  3. 定时器
  4. 取样器
  5. 后置处理程序
  6. 断言
  7. 监听器

  前置处理器、后置处理器和断言等元件功能对 取样器 作用,因此,如果在它们的作用域内没有任何取样器,则不会被执行。

  如果在同一作用域范围内有多个同一类型的元件,则这些元件按照它们在测试计划中的上下顺序依次执行。

五、Jmeter 性能测试基础实战

  测试需求:测试 20个用户访问 http:http://www.qiakr.com/t 在载达到30 QPS时的平均响应时间。

QPS:Query Per Second 每秒查询率。是一台查询服务器每秒能够处理的查询次数。在因特网上,作为域名系统服务器的性能经常用每秒查询率来衡量。

5.1 测试步骤

5.1.1 第一步:添加线程组

  线程组主要包含三个参数:线程数、准备时长(Ramp-Up Period(in seconds))、循环次数。

  线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。

  准备时长(单位为s):设置的虚拟用户数需要多长时间全部启动。如果线程数为20,准备时长为10,那么需要10秒钟启动20个线程,也就是每秒钟启动2个线程。

  循环次数:每个线程发送请求的次数。如果线程数为20,循环次数为5,那么每个线程发送5次请求。总请求数为20*5=100.如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。

5.1.2 增添HTTP请求

  一个HTTP请求有着许多的配置参数,下面将详细介绍:

  1. 名称:本属性用于表示一个取样器,建议使用一个有意义的名称
  2. 注释:对于测试没有任何作用,仅用户记录用户可读的注释信息。
  3. 服务器名称或IP:HTTP请求发送的目标服务器名称或IP地址。
  4. 端口号:目标服务器的端口号,默认值为80.
  5. Timeouts(milliseconds):设置请求和响应的超时时间。
  6. 方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。
  7. Content encoding:内容的编码方式,默认值为iso8859.
  8. 路径:目标URL路径(不包括服务器地址和端口)
  9. 自动重定向:如果选中该选项,当发送HTTP请求后得到的响应是302/301时,JMeter自动重定向到新的页面。
  10. Use keep Alive:当该选项被选中时,jmeter和目标服务器之间使用keep-Alive方式(又称持久连接、连接重用)进行HTTP通信,默认选中。
  11. Use multipart/from-data for HTTP POST:当发送HTTP POSt请求时,使用Use multipart/from-data 方法发送,默认不选中
  12. 同请求一起发送参数:在请求中发送URL参数,对于带参数的URL,jmeter提供了一个简单的对参数化的方法。用户可以将URL中所有参数设置在本表中,表中的每一行是一个参数值对(对应URL中的 名称1 = 值1)。
  13. 同请求一起发送文件:在请求中发送文件,通常HTTP文件上传行为可以通过这种方式模拟。

  从HTML文件获取所有有内容的资源:当该选项被选中时,jmeter在发出HTTP请求并获得响应的HTML文件内容后,还对该HTML进行分析并获取HTML中包含的所有资源(图片、flash等),默认不选中,如果用户只希望获取页面中的特定资源,可以在下方的Embedded URLs must match文本框中填入需要下载的特定资源表达式,这样,只有能匹配指定正则表达式的URL指向资源会被下载。

  用作监视器:此取样器被当成监视器,在Monitor Results Listener 中可以直接看到基于该取样器的图形化统计信息。默认不选中。

  Save response as MD5 hash?:选中该项,在执行时仅记录服务端响应数据的MD5值,而不记录完整的响应数据。在需要进行数据量非常大的测试时,建议选中该项以减少取样器记录响应数据的开销。

5.1.3 第三步:设置QPS限制

  Jmeter提供了一个非常有用的定时器,称为Constant Throughput Timer(常数吞吐量定时器),该定时器可以方便地控制给定的取样器发送请求的吞吐量。

 

Constant Throughput Timer 的主要属性介绍:

  Target throughput(in samplers per minute):目标吞吐量。注意这里是每分钟发送的请求数,实际填的数值为:60*QPS。

  其次,Calculate Throughput based on 有5个选项,分别是:

  1. This thread only:控制每个线程的吞吐量,选择这种模式时,总的吞吐量为设置的 target Throughput 乘以该线程的数量。
  2. All active threads:设置的 target Throughput 将分配在每个活跃线程上,每个活跃线程在上一次运行结束后等待合理的时间后再次运行。活跃线程指同一时刻同时运行的线程。
  3. All active threads(shared):与All active threads的选项基本相同,唯一的区别是,每个活跃线程都会在 所有活跃线程 上一次运行结束后等待合理的时间后再次运行。
  4. All active threads in current thread group:设置的target Throughput将分配在当前线程组的每一个活跃线程上,当测试计划中只有一个线程组时,该选项和All active threads选项的效果完全相同。
  5. All active threads in current thread group(shared):与All active threads in current thread group基本相同,唯一的区别是,每个活跃线程都会在 所有活跃线程 的上一次运行结束后等待合理的时间后再次运行。
5.1.4 添加监视器

  脚本的主要部分设置完成后,需要通过某种方式获得性能测试中的测试结果,在本例中,我们关系的是请求的响应时间。

  Jmeter中使用监听器元件收集取样器记录的数据并以可视化的方式来呈现。Jmeter有各种不同的监听器类型,因为上HTTP请求,我们可在添加聚合报告,更为直观的查看测试结果。

  添加聚合报告,右键点击线程组,在弹的菜单(添加--->监听器-->聚合报告)中选择聚合报告。

5.1.5 运行脚本

  如果出现403,网址有做一个保护,即对网站请求源做了保护,如果是来源不明的请求就会拒绝访问(防止爬虫什么的),所以需要在jmeter中添加模拟浏览器的信息。

  模拟浏览器的信息是存在了User-Agent中,这个参数在百科中的解释:User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。

  一些网站常常通过判断 UA 来给不同的操作系统、不同的浏览器发送不同的页面,因此可能造成某些页面无法在某个浏览器中正常显示,但通过伪装 UA 可以绕过检测。

5.1.6 聚合报告分析

 

TermDefinition
Label每个JMeter的element(例如 HTTP Request)都有一个Name属性,这里显示的就是Name属性的值
#Samples表示你这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100
Average平均响应时间--默认情况下是单个Request的平均响应时间,当使用了Transaction Controller时,也可以以Transaction为单位显示平均响应时间
Median中位数,也就是50%用户的响应时间
90%Line90%用户的响应时间
Min最小响应时间
Max最大响应时间
Error%本次测试中出现错误的请求的数量/请求的总数
Throughput吞吐量---默认情况下表示每秒完成的请求数(Request per Second)。
KB/sec每秒从服务器端接收到的数据量。

六、断言

断言是在请求的返回层面增加一层判断机制。因为请求成功了,并不代表结果一定正确,因此需要检测机制提高测试准确性。下面介绍常用的jmeter三种断言。

6.1 响应断言

模式匹配规则:

包括:返回结果包括你指定的内容

匹配:根据指定内容进行匹配

Equals:返回结果与你指定结果一致

Substring:返回结果是指定结果的字串

否:不进行匹配

6.2 Size Assertion(Size断言)

 

6.3 Duration Assertion(持续时间断言)

 

如果响应时间大于设置的响应时间,则断言失败,否则成功!(见代码Assertion.jmx)

七、Jmeter参数化

7.1 用户参数

7.2 CSV 数据配置

Filename:参数项文件

File Encoding:文件的编译方法,一般为空

Vaiable Names:文件中各列所表示的参数项;各参数项之间利用逗号分隔;参数项的名称应该与HTTP Requset中的参数项一致。

Delimiter:如文件中使用的是逗号分隔符,则填写逗号;如使用的是TAB,则填写 \t 。

Recycle on EOF?:True=当读取文件到结尾时,再重头读取文件,False=当读取文件到结尾时,停止读取文件。

Stop thread on EOF?:当Recycle on EOF?一项为False时起效;True=当读取文件到结尾时,停止进程。

 

现有如下 csv 格式的文件,放在桌面。C:\Users\Administrator\Desktop\工作表.csv

把CSV数据文件设置 设置成如下

由于有四组内容,线程组循环4次

运行,结果如下:

7.3 随机参数化

生成函数后

下一次发送的passwd就是1-100随机数

八、Jmeter集合点

操作步骤:step1---->定时器---->Synchronizing Timer

表示要先生成10个用户在进行访问,没有全部生成完不访问。后面的时候表示访问延时。

九、Jmeter关联

 9.1 正则表达式提取器

 正则表达式部分配置说明

引用名称:下一个请求要引用的参数名称,如填写 activityID,则可用 $(activityID)引用它。

正则表达式:省略。

模板:用$$引用起来,如果在正则表达式中有多个正则表达式,则可以是 $2$3$等等,表示解析到的第几个值给 title。如:$1$表示解析到的第一个值。

匹配数字:0代表随机取值,1代表全部取值。

缺省值:如果参数没有取得到值,那默认给一个值让它取。

 

十、Jmeter图形监控扩展

1.创建一个线程组

2.线程组-添加-配置元件-FTP请求缺省值

说明:

IP:为你FTP服务的IP

Remote file:为你FTP服务器上的一个文件

local file:为本地你存放到本机上的路径

选择get(RETR)为下载方式。

登录配置:填写你的FTP服务器的用户名密码。

 

按照第三步再添加一个FTP请求,选择put为上传方式。

添加一个监控器:线程组-》添加-》监控器-》Spline Visualizer

 

转载于:https://www.cnblogs.com/dongye95/p/9337998.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值