JMeter学习

 

Jmeter的组织方式相对比较扁平,它首先没有WorkSpace的概念,直接是TestPlan,等价于SoapUI中的Project,TestPlan下创建的Threads Group就相当于TestCase,并没有TestSuite的层级。从功能上Jmeter最为强大,可以测试各种类型的接口,不支持的也可以通过网上或自己编写的插件进行扩展。SoapUI专门针对HTTP类型的两种接口,其初衷更是专门测试Soap类型接口,对于其他协议的接口不支持。Postman更是轻量级,定位也不同,可用来测试Rest接口。
SoapUI:本身一个project是一个xml文件,但是可以通过配置变成一系列文件夹,每个Case、每个Suite均是独立的文件,这样可通过svn/git进行团队协作。支持性较好。
Jmeter:一个TestPlan也是一个jmx(xml)文件,无法分割,但Jmeter有一个合并的功能,允许将多个文件合并在一起。只能每个团队成员自己建立一个TestPlan,分功能块进行测试。最后整理合并。 

jmeter测试计划是一系列配置器、线程组、控制器、sampler、断言、监听器、定时器、组成的集合。jmeter的各种部件以树形目录结构在工程中被组织起来,根节点下属期间类型一般是:配置器、线程组、监听器。jmeter运行时会首先运行配置器,然后启动线程组,全部线程组中simpler的执行结果会在配置的监听器中出现。虽然从界面上可以在测试计划节点上添加监听器、断言,但是绝大多数情况下,不需要在根节点配置这两类器件。

jmeter测试以测试计划为单位执行,测试计划一般至少应该包含一个线程组,一个采样器、一个监听器。


线程组
线程组是一组器件是一系列配置器、控制器、定时器、simpler、断言、监听器的集合。线程组的线程数量、执行次数、启动时间都是可以配置的,线程启动会顺序执行下属的配置器、控制器、定时器、simpler、断言、监听器,实现一系列保护测试逻辑的操作。

simpler中文翻译为采样器,可以理解为对被测试目标的一次请求或调用。jmeter原生提供了和多常用的采样器,http、bsf、jsr223、jdbc等,一般情况下,进行web后端测试使用http、bsf、jsr223这三个类型的采样器加上对应的控制器已可以满足需要了。
jmeter中配置器主要用于管理采样器的参数或变量。

控制器
logic contoller中文名叫逻辑控制器,这一类器件用于控制线程组内部的采样器的执行逻辑,以http采样器为例,可以通过loop控制器定义某个或某几个采样器的执行次数,可以通过if控制器定义某个采样器执行后接下来执行那个采样器。逻辑控制器的作用和各种语言中的逻辑控制语句非常相似,所以使用过任何计算机语言的应该都和容易理解。

控制器用于在线程组内通过采样器实现各种测试逻辑,可以定义采样器执行的条件可以让采样器循环执行等。


定时器
timer中文名是定时器,定时器一般只在线程组中使用,作用实际上是让线程等待一段时间,jmeter提供了多种定时器。

断言
断言是一种条件判断器件,断言为真时,jmeter认为采样器的执行结果为成功,反之亦然,断言一般情况添加在采样器上,采样器执行完毕jmeter会调用采样器上的断言,根据断言中的配置或代码判断执行结果是成功还是失败,


监听器
监听器用于收集jmeter的运行结果并展示给用户,jmeter提供的大部分监听器为统计报告。能够提供采样器执行结果展示的只有view result tree。最常用的监听器是aggregate和view result tree

 

 

 

JMeter生成HTML性能报告

一、准备工作

1:jmeter3.0版本之后开始支持动态生成测试报表

2:jdk版本1.7以上

3:需要jmx脚本文件

 

二、基本操作步骤

首先执行cmd命令:进入jmeter的安装目录bin目录里面

输入命令:jmeter -n -t 目录 test.jmx -l result.jtl -e -o 目录/tmp/ResultReport

举个栗子:jmeter -n -t D:\apache-jmeter-3.2\bin\yqjr.jmx -l result.jtl -e -o D:\apache-jmeter-3.2\bin\HttpReport

参数说明:

● -n: 非GUI模式执行JMeter
● -t: 执行测试文件所在的位置
● -l: 指定生成测试结果的保存文件,jtl文件格式
● -e: 测试结束后,生成测试报告
● -o: 指定测试报告的存放位置

 

说明:

这段命令中,第一处标粗的是我的接口脚本跟路径,第二处标粗的是自动生成的jtl文件,第三处标粗的是报告文件夹路径,

这一段命令在cmd下执行命令即可(注意,必须在脚本文件路径下执行cmd,否则需要cmd下执行切换路径)

 结尾的 ResultReport 是自己手动创建的报告文件夹。每次启动命令之前,文件夹内容必须和 jtl 文件一起清空

 

三、执行结果成功图

 

四、查看报告

在生成的目录里面查找以.HTNL   打开

生生的报告如下:

五、彩蛋

之前考虑过每次执行命令都要先去目录下清空报告文件夹和jtl,还要敲命令,很烦,后来想了一个方法,那就是写一个bat,每次执行bat都自动去清空之前的报告,然后执行命令

 命令如下:

del  /s /Q D:\apache-jmeter-3.2\bin\result.jtl          删除result.jtl文件

rd /s /Q D:\apache-jmeter-3.2\bin\HttpReport          删除HttpReport文件夹

md D:\apache-jmeter-3.2\bin\HttpReport              重建HttpReport文件夹

 

 

 

使用JMeter创建数据库(Mysql)测试

我的环境:

MySQL:mysql-essential-5.1.51-win32

jdbc驱动:我已经上传到csdn上一个:http://download.csdn.net/source/3451945

JMeter:jmeter-2.4  任意版本都行。

1.首先我们要有一个可以做测试的数据库,当然,里面要有数据。

 

2.打开JMeter,点击测试计划,

 

点击“浏览...”按钮,将你的JDBC驱动添加进来。

 

3.添加一个线程组,

右键点击“线程组”,在下面添加一个“JDBC Connection Configuration”

 

 

来配置一下JDBC Connection Configuration页面。

 

4.右键点击“线程组”,在下面添加一个“JDBC request”

 

5.添加断言。

右键点击线程组---->添加--->断言---->响应断言。

 

6.我们来添加一些监听器来行查看

添加一个断言结果:

右键点击线程组---->添加--->监听器---->结果断言。

添加一个图形结果:

右键点击线程组---->添加--->监听器---->图形结果。

添加一个查看结果树:

右键点击线程组---->添加--->监听器---->查看结果树。

下面是添加所有东东的列表:

 

7.在线程组页面设置用户数、启动时间、循环次数

点击菜单栏“运行”----“启动”

下面是结果:

 

 

 

 

一种简单的数据库性能测试方法

    这两天接到一个任务,要测试一个服务器的性能,客户要求向数据库内 1000/s(每插入一千条数据)  的处理能力,当时脑子赌赛了,想的是用LR来进行,由于LR接触不深,只知道LR实现参数化的时候可以调用数据库里面的数据,往里面大批量的插入数据,以前没试过。

    翻阅了一下资料,找一到了一篇《一种特殊的数据库性能测试》,大概思路是:通过编写一java程序来循环插入数据,编写一个批处理文件来调用java程序。再通过LR的system()函数来调用批处理文件来进行压力测试。但是对于我这种菜鸟来说,好多细节不懂。比如那个批处理就让我很为难。呵呵。

  其实,通过jmeter很简单就可以完成,可以参考我以前的一篇文章《jmeter创建数据库(MySql)测试》。

  前提条件:一个数据库:test   数据库下面有一张表:user   表中有两个字段:username、passworld 。

  要求:往数据库内大批量插入数据,1000/s  

其实和之前的方法一样,为了简单,我还是把截图贴出来吧。

1.创建一个测试计划,将我们所使用的数据库驱动包导入。

 

2.添加一个线程组,并设置我们的虚拟用户数、启动时间、和循环次数

 

 

3.创建一个线程,并在线程下面,创建一个JDBC Connection Configuration ,设置相关信息。

 

4.创建一个JDBC Request.我们需要对数据库做插入操作。(详细设置,看截图上的说明)

 

5.添加监听器,我们这里选择添加“图形结果”和“查看结果树”,点击菜单栏上的“启动”--->运行。

查看我们的运行结果。

在测试的过程中,通过数据库命令,可以查看当前数据库插入了多少数据

 

 

 

 

一个简单的性能测试

 

我们创建一个简单的测试计划来使用这些元件。该计划对应的测试需求。

1)测试目标网站是fnng.cnblogs.com  和 tt-topia.rhcloud.com

2)测试目的是该网站在负载达到20 QPS 时的响应时间。

 

QPS 解释

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

  为了达成预期的测目的,需要需要在jmeter中建立一个测试计划。因为本次测试仅要求完成对fnng.cnblogs.com  和 tt-topia.rhcloud.com 两个博客首页请求,因此只需要使用HTTP Request Sampler 即可。

建立测试计划

   启动jmeter后,jmeter会自动生成一个空的测试计划,用户可以基于该测试计划建立自己的测试计划。

 

添加线程组

    一个性能测试请求负载是基于一个线程组完成的。一个测试计划必须有一个线程组。测试计划添加线程组非常简单。在测试计划右键弹出下拉菜单(添加-->Threads(Users)--->线程组)中选择线程组即可。

   jmeter中 每个测试计划至少需要包含一个线程组,当然也可以在一个计划中创建多个线程组,那么多个线程组之间又会怎样的顺序执行(串行还是并行)?在测试计划下面多个线程是并行执行的,也就是说这些线程组是同时被初始化并同时执行线程组下的Sampler的。

 

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

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

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

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

  设置合理的线程数对于能否达到测试目标有决定性的影响。在本例中,要求得到网站首页在20 QPS 负载情况下的响应时间,如果如果线程数量设置的过小,则很可能无法达到设定的QPS要求。另外,设置合理的循环次数也很重要,除了上面介绍的固定循环次数与永远外;也可以灵活的选择设定测试运行时间。勾选“调度器”,进行调度器配置。

 

添加HTTP请求

  添加完成线程组后,在线程组上右键菜单(添加--->Sampler--->HTTP请求)选择HTTP请求。对于jmeter来说,取样器(Sampler)是与服务器进行交互的单元。一个取样器通常进行三部分的工作:

向服务器发送请求

记录服务器的响应数据

记录相应时间信息

 

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

名称:本属性用于标识一个取样器,建议使用一个有意义的名称。

注释:对于测试没有任何作用,仅用户记录用户可读的注释信息。

服务器名称或IP HTTP请求发送的目标服务器名称或IP地址。

端口号:目标服务器的端口号,默认值为80 。

协议:向目标服务器发送HTTP请求时的协议,可以是http或者是https ,默认值为http 。

方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。

Content encoding 内容的编码方式,默认值为iso8859

路径:目标URL路径(不包括服务器地址和端口)

自动重定向:如果选中该选项,当发送HTTP请求后得到的响应是302/301时,JMeter 自动重定向到新的页面。

Use keep Alive  当该选项被选中时,jmeter 和目标服务器之间使用 Keep-Alive方式进行HTTP通信,默认选中。

Use multipart/from-data for HTTP POST 当发送HTTP POST 请求时,使用Use multipart/from-data方法发送,默认不选中。

同请求一起发送参数  在请求中发送URL参数,对于带参数的URL ,jmeter提供了一个简单的对参数化的方法。用户可以将URL中所有参数设置在本表中,表中的每一行是一个参数值对(对应RUL中的 名称1=值1)。

同请求一起发送文件:在请求中发送文件,通常,HTTP文件上传行为可以通过这种方式模拟。

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

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

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

 

在这里我们添加两个HTTP请求,分别用于对fnng.cnblogs.com  和 tt-topia.rhcloud.com发送请求。

 

设置QPS限制

  本次性能测试的需求中提到测试的目的是“了解博客的首页在负载达到20 QPS时的响应时间”,因此需要控制向博客首页发送请求的负载为20QPS。

  一种可行的方法是逐步调整测试计划中的线程计算的数量以及为取样器(Sampler)添加定时器(Timer),以使HTTP取样器发出的请求的QPS保持在20个左右。但这种方法耗时耗力,需要经过多次尝试才能达到;另一方法,完全通过设置定时器来控制QPS,一旦取样器的响应时间发生改变(网络环境发生改变),就需要重新调整定时器的等待时间。

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

  右键点击fnng.cnblogs.com ,弹出菜单(添加--->定时器--->Constant Throughput Timer)选择Constant Throughput Timer

 

Constant Throughput Timer 的主要属性介绍:

名称 :定时器的名称

Target throughput(in samples per minute):目标吞吐量。注意这里是每分钟发送的请求数,因此,对应测试需求中所要求的20 QPS ,这里的值应该是1200 。

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

  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 基本相同,唯一的区别是,每个活跃线程都会在所有活跃线程的上一次运行结束后等待合理的时间后再次运行。

 

  如上图,该元件仅作用于fnng.cnblogs.com ,设置定时器的Target throughput为1200/分钟(20 QPS),设置Calculate Throughput based on 的值为All active threads 。

  当然,Constant Throughput Timer只有在线程组中的线程产生足够多的request 的情况下才有意义,因此,即使设置了Constant Throughput Timer的值,也可能由于线程组中的线程数量不够,或是定时器设置不合理等原因导致总体的QPS不能达到预期目标。

 

 

添加监听器(Listener

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

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

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

 

 

运行脚本

  添加完成聚合报告后,我们来运行脚本,稍后介绍聚合报告的参数。

  在运脚本之前,我们来查看一下,各个元件的参数设置:

--------------------------------------------------------------- 

线程组:

线程数:20

准备时长: 10

循环次数:10

---------------------------------------------------------------  

HTTP请求:

名称:fnng.cnblogs.com。

服务器名称或IP :fnng.cnblogs.com

端口号:80 

Implementation : java 

协议: http

方法: GET

路径:/

---------------------------------------------------------------  

常数吞吐量定时器:

Target throughput(in samples per minute):1200.0

Calculate Throughput based on :All active threads

---------------------------------------------------------------  

点击工具栏上的运行按钮,或者点击菜单栏“ 运行--->启动 ” 或者使用快捷键ctrl+r 来运行程序。

 

 

聚合报告分析

查看聚合报告的运行结果:

 

转载于:https://www.cnblogs.com/tester-l/p/6017586.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值