JMeter使用笔记

最近公司有一款Android应用的一个模块出现的问题,网络请求服务端对应的接口在高并发的情况下出现数据库插入成功后并且数据库已经连续插入1000+数据,但是使用hibernate仍然读取不到数据的情况,上面Boss交代下来要我一个Android前端去对服务端的接口进行压力测试。在网上查了一下,发现JMeter这款测试工具还不错,由于从来没用过,或许以后还会用到所以将使用该工具的方法记录在这里,方便以后查看。
准备工作:
  1. 配置好java环境的电脑一台
  2. 从Apache官网上下载JMeter解压包到本地电脑
添加组件:
  1. 找到解压包bin目录下的jmeter.bat文件,双击打开,正常情况下我们接下来可以看到左面会弹出如下图所示的界面。修改右侧名称项可以重置计划名称。       
  2. 选中测试计划,右键→添加→Threads(users)→线程组, THreads组件主要用来控制Jmeter并发时产生线程的数量,在它的下一级菜单下只有一个组件(线程组),可以这么理解每个线程就是一个虚拟的用户。备注:所有的其他类型组件必须是(线程组)节点的子节点。        
  3. 添加了线程组后,就可以在线程组下面添加子节点了,这里我们先添加一个Http request(Http请求)。选中线程组,右键→添加→Sampler→Http请求。Sampler表示客户端发送某种格式或者规范的请求到服务端,所以大家看到了各种各样的Sampler,有的版本有两个Http 相关的。据说用HttpClient功能和效率将更强。但是本例下载的是最新的JMeter版本。估计是Apache对JMeter的Http的请求进行优化。                                 
  4. 添加完Http请求节点后继续添加聚合报告节点,这样就可以查看输出的报告了,选中线程组,右键→添加→监听器→聚合报告

开始配置:
  1. 添加完这几个组件后下一步就要对添加的组件进行配置了
首先是 线程组:顾名思义此处就是对线程进行配置的地方。

线程数:最大测试时使用的线程数。

Ramp-Up Period : Jmeter达到指定最大线程数的时间。

循环次数 : 如果是Forever,线程组中的线程将不间断的连续测试系统,当然也可以设置每个线程测试的次数,当完成了规定次数后,该线程将自动退出线程组。

调度器 : 主要用来指定该测试的一些时间信息,比如从几点到几点运行测试,如果到了指定时间测试没有进行完成,测试也会被停止。




下一个就是对 Http请求进行配置了简单配置方法见下图:
Http请求的这些配置项就很明白了,做过开发的应该都懂。就不做过多解释了。

启动测试:
聚合报告这个组件就没什么好配置的了,做完这些工作后点击下图中红色框框中的启动按钮就可以对已经制定的接口进行测试了。


正常启动后进入聚合报告组件就可以查看JMeter输出的测试报告了。报告内容在下图红色框框内。

Label:每个 JMeter 的 element (例如 HTTP Request )都有一个 Name 属性,这里显示的就是 Name 属性的值

#Samples:表示你这次测试中一共发出了多少个请求,如果测试计划模拟10个用户,每个用户迭代10次,这里就会显示100

Average:平均响应时间 — 默认情况下是单个 Request 的平均响应时间,当使用了事务控制器时,也可以以事务为单位显示平均响应时间

Median:中位数,也就是 50 %用户的响应时间

90% Line: 90 %用户的响应时间

Min:最小响应时间

Max:最大响应时间

Error%:错误率,本次测试中出现错误的请求的数量 / 请求的总数

Throughput:吞吐量 —— 默认情况下表示每秒完成的请求数( Request per Second )

KB/Sec:每秒从服务器端接收到的数据量


JMeter各组件的释义:

JMeter主要组件介绍-线程组

名称:为线程组起名字。

  线程属性-线程数:设置发送请求的用户数目 ,即并发数。

  线程属性-Ramp-Up Period(in second):线程间的时间间隔,单位是秒。即所有线程在多少时间内启动。

  线程属性-循环次数:请求的重复次数,如果选择后面的forever(默认),那么 请求将一直继续,如果不选择forever,而在输入框中输入数字,那么请求将重复指定的次数,如果输入1,那么请求将执行一次,如果是0,会出现问题。

  调度器配置-启动时间:测试计划什么时候启动,启动延迟会覆盖它。

  调度器配置-结束时间:测试计划什么时候结束,持续时间会覆盖它。

  调度器配置-持续时间:测试计划持续多长时间,会覆盖结束时间。

  调度器配置-启动延迟:测试计划延迟多长时间启动,会覆盖启动时间。

  JMeter主要组件介绍-取样器(HTTP请求)

  名称:HTTP请求的名字。

  Web服务器-服务器名称或IP、端口号,脚本录制时自动添加,也可以使用“用户自定义变量”。

  HTTP请求:用默认值即可。

  同请求一起发送参数:请求中的参数、值可以在此设置,需要用到参数化及动态数据关联,我们在后面专门介绍。

  同请求一起发送文件:我可以制定同请求一起发送哪个文件。

  其他任务包括:从HTML文件中获取所有内含的资源、用作监视器、Embedded URLs must match

  监听器(Listener)负责收集测试结果,同时也被告知了结果显示的方式。我们常用的包括:聚合报告、查看结果树、用表格查看结果,都支持将结果数据写入文件。其他的添加上去看看就行。聚合报告前面我们介绍过,后面是查看结果树和用表格查看结果的截图。

  JMeter主要组件介绍-监听器(用表格查看结果)

  JMeter主要组件介绍-逻辑控制器

  逻辑控制器(Logic Controller)可以自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。

  循环控制器可以设置请求的循环次数或永远循环(如果选中永远的话)。

  事务控制器可以将多个请求放在同一个事务中。如果选中Gegerate parent sample,则聚合报告中只显示事务控制器的数据,而不会显示其中的各个请求的数据,反之则全部显示。

  JMeter主要组件介绍-断言

  断言(Assertions)可以用来判断请求响应的结果是否如用户所期望的。它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。这个限制对于有效的测试是非常有用的。

  JMeter主要组件介绍-配置元件

  配置元件(Config Element)维护Sampler需要的配置信息,并根据实际的需要会修改请求的内容。我们主要在参数化中用到CSV Data Set Config

  JMeter主要组件介绍-前置处理器和后置处理器

  前置处理器(Pre Processors)和后置处理器(Post Processors)负责在生成请求之前和之后完成工作。前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据。我们主要在动态关联中用到后置处理器的正则表达式提取器。

  JMeter主要组件介绍-定时器

  定时器(Timer)负责定义请求之间的延迟间隔。

  参数化设置

  在我们的测试计划中我们使用的都是HTTP请求,在HTTP请求中常常会提交一些参数,我们为了不想在每一次请求中都使用相同的参数值,就要想办法让每一次请求的参数的值都是不一样的,我们就需要进行参数化设置,这里我们介绍两种参数化设置的方法。

  一种是利用函数助手中的_Random函数进行参数化设置;

  一种是利用配置元件中的CSV Data Set Config进行参数化设置。

  参数化设置-函数助手(1)

  JMeter中有一个函数助手的功能,里面内置了多个函数,我们可以利用其中的_Random函数来进行请求中的参数化设置

在JMeter中选择选项-函数助手对话框打开函数助手对话框。 选择一个功能_Random。 设定最小值为1。 设定最大值为100。 函数名称设为func1。 点击生成将生成

  在JMeter中选择“选项-函数助手对话框”打开函数助手对话框。

  选择一个功能_Random。

  设定最小值为1。

  设定最大值为100。

  函数名称设为func1。

  点击生成将生成一个引用字符串${_Random(1,100,func1},在需要的请求参数中拷贝该字符串即可。

  其中函数名称用来在引用中作区别,即我们可以设定不同的名称在不同的地方引用同一个函数的功能

  例如:我们生成了两个串${_Random(1,100,func1)}、 ${_Random(1,100,func2)},在添加图书的请求中,我们在bookName的参数值中引 用${_Random(1,100,func1)},在bookConcern的参数值中应用${_Random(1,100,func2)},见截图, 这样测试运行时不同的线程将产生不同的bookName和bookConcern。

  参数化设置-CSV Data Set Config(1)

  在线程组上点击右键选择添加-配置元件-CSV Data Set Config,打开CSV Data Set Config。

  Filename文件名:即参数化要引用的文件名。这里是d:\number.txt

  File encoding文件编码:可以不填。

  Variable Names(comma-delimited)变量名(用逗号分割):多个变量可以引用同一个文件,用逗号分割。这里是num1,num2

  Delimiter(use ‘\t’ for tab):参数文件中多个变量值的分隔符,\t表示用tab键分割,默认是逗号。

  Recycle on EOF?:结束后是否循环?默认是True.

  Number.txt文件内容见截图。

  参数化设置-CSV Data Set Config(2)

  在添加图书的请求中,我们在bookName的参数值中引用${num1},在bookConcern的参数值中应用${num2},见截图,这样测试运行时不同的线程将产生不同的bookName和bookConcern。

  动态数据关联

  在HTTP请求的参数中经常会遇到一些参数的值是从服务器相应的动态数据,这些数据需要进行关联才能使得每一次请求都能成功得被服务器接受,在JMeter中采用正则表达式提取器来获取这些动态的数据。

  正则表达式允许用户从服务器响应中获取数据,作为一个后置处理器,正则表达式提取器会在每一个请求执行后再执行,正则表达式提取请求的参数值,产生模板字符串,并将结果保存到给出的变量中。

  动态数据关联(1)-正则表达式提取器

  在HTTP请求的参数中经常会遇到一些参数的值是从服务器相应的动态数据,这些数据需要进行关联才能 使得每一次请求都能成功得被服务器接受,在JMeter中采用正则表达式提取器来获取这些动态的数据。比如我们想要获得从服务器相应的TOKEN,就可以 使用下面的正则表达式提取器。

  使用时就可以使用${token_g1}来表示获取到的TOKEN值。如下图:

  使用命令行运行JMeter脚本

  JMeter -n -t my_test.jmx -l log.jtl

  -n告知JMeter采用非图形化运行JMeter脚本

  -t指定要运行的脚本文件

  -l指定保存执行结果的文件名

  执行命令前要检查当前目录是否是%JMeter_Home%\bin 目录;

  如果 JMeter 脚本不在当前目录,需要指定完整的路径;如果要把执行的结果保存在其他地方也要指定完整的路径。

  利用XSLT分析JMeter结果文件(1)

  将结果文件的扩展名改为xml,例:将log.jtl改为log.xml。

  在log.xml的文件头

  中添加

  使之变成

  其中href指定xsl文件的路径,如果与xml文件在同一目录,则只写文件名即可,否则要写明详细路径。

  利用XSLT分析JMeter结果文件(2)

  将修改后的xml文件用浏览器打开即可得到统计结果

  JMeter中进行分布式测试

  作为一个纯 JAVA 的GUI应用,JMeter对于CPU和内存的消耗还是很惊人的,所以当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心, 甚至还会引起JAVA内存溢出的错误。不过,JMeter也可以像 LoadRunner 一样通过使用多台机器运行所谓的代理来分担负载产生器自身的压力,并借此来获取更大的并发用户数,我们只需手动配置一下即可。

  1、在所有期望运行 JMeter作为 负载产生器的机器上安装JMeter,并确定其中一台机器作为 控制器,其他的机器作为 代理。然后运行所有 代理 机器上的JMeter-server.bat文件—假定我们使用两台机器172.20.80.47和172.20.80.68作为 代理;

  2、在Controller 机器的JMeter安装目录下找到 bin 目录,再找到 jmeter.properties 这个文件,使用记事本或者其他文字编辑工具打开它;

  3、 在打开的文件中查找“remote_hosts=”这个字符串,你可以找到这样一行“remote_hosts=127.0.0.1”。其中的 127.0..0.1 表示运行JMeter代理的机器,这里需要修改为“remote_hosts=172.20.80.47,172.20.80.68”;

  4、保存文件,并重新启动控制器机器上的JMeter,并进入启动 ->远程启动菜单项。就会看到我们刚才添加的两个代理的地址,选中即可运行,如果想同时启动所有代理,选择远程全部启动即可。

  要进行分布式测试代理机器上需要添加环境变量,即添加用户变量JMETER_HOME=d:\jmeter,系统变量中的path中添加d:\jmeter\bin(假设jmeter放在d盘根目录下)。


参考文章:http://www.ltesting.net/ceshi/open/kyxncsgj/jmeter/2013/0517/206265.html


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值