压力测试以软件响应速度为测试目标,尤其是在较短时间内大量并发用户的同时访问时,软件的性能和抗压能力。

  JMeter是一款开源的压力测试工具,目前最新Release版本是2.3.4,它不仅可以测试Web服务器,还可以测试数据库、JMS、Web Service、LDAP、JUNIT 等多种对象的测试能力。下载地址:http://jakarta.apache.org/site/downloads/downloads_jmeter.cgi

  下面简单介绍一下JMeter。

  • 测试计划是测试的起点,其他所有组件的容器。
  • 线程组是用来模拟用户并发的组件。JMeter的每个任务都是用线程来处理的。线程组主要有三个属性,线程数、Ramp-up Period和循环次数。线程数就是并发的数量,Ramp-up Period表示在多长时间内创建线程数中定义的所有线程。
  • 逻辑控制器可以组织取样器,做出复杂的测试用的请求。
  • 配置元件中主要配置取样器中所需要的配置。
  • 定时器设置请求间的时间间隔。
  • 前置处理器一般用来修改请求(Request)。
  • Sampler(取样器),主要的执行组件。每一个取样器都可以被监听器监听,并生成测试结果。
  • 后置处理器一般用来出来返回的数据(Response)。
  • 断言,判断取样器是否正常工作
  • 监听器,收集整理测试结果,并可以指定格式生成XML、CSV等形式的文件。

  工作台中可以添加非测试元件,其中一个最重要的就是HTTP代理服务器。

  HTTP代理服务器可以用来录制测试脚本。将浏览器的代理服务器设置为127.0.0.1:8080,然后启动JMeter的HTTP代理服务器,就可以录制在浏览器中进行的操作。HTTP代理服务器可以设置包含模式和排除模式,我一般用排除模式来排除一些CSS、JS、GIF、PNG之类的。

  JMeter的基本元件就是这样,这些元件具体怎么运用请继续看下文。

JMeter的中文资料不是很多,我Google了一下,发现基本上没有介绍如何一步步使用的资料。我这里就先整理一下。

  大概就是以下几个方面:

  1. 录制脚本
  2. 使用用户自定义参数
  3. 使用控制器
  4. 使用定时器
  5. 使用前置后置处理器
  6. 使用监听器

  我也只是入门级别,所以写出来的东西可能比较简单,适合新手参考使用。

  这次就介绍使用HTTP代理服务器进行脚本的录制。

  JMeter可以录制脚本,也可使用别的工具,如Badboy录制适合JMeter使用的脚本,我们默认使用JMeter自带的功能。

  打开JMeter,在工作台节点点击右键,添加 >> 非测试元件 >> HTTP代理服务器,使用默认设置即可。

  然后设置浏览器,把代理服务器设置为127.0.0.1:8080。

 

然后启动HTTP代理服务器,以打开Google为例,它生成的脚本如下:

  它把许多JS、CSS、PNG、GIF的路径都录制了进来,而这些对于测试脚本是没有用处的,我们可以在HTTP代理服务器的排除模式设置,不记录这些。

  设置完排除模式,重新启动HTTP代理服务器,再次打开Google的首页,发现录制完的脚本简洁多了。

  以搜索“JMeter”为例,录制完的脚本是这样的:

  在一些用到JS很多的网页中,JS的动作也会被录制进来,像其中的/complete/search是输入提示框JS的动作,可以删掉的。

  JMeter的脚本录制就是这样,另外还可以利用别的工具,例如Badboy,它的使用更加简单,具体可以参考官方网站http://www.badboy.com.au/.

  最后,在设置HTTP代理服务器的时候,有两个地方需要注意:

  要确认8080端口是否有冲突,被别的程序,例如Web服务器占用。如果有冲突,可以更改为别的没有冲突的端口

  JMeter HTTP代理服务器的端口和浏览器设置的端口要一致。

如何在JMeter中使用外部数据,JMeter也提供了一系列元件,大多包含在配置元件中,例如:CSV Data Set Config,Random Variable,用户定义的变量等,另外,前置处理器 >> 用户参数也可以使用自定义的变量。

  我这里着重介绍用户参数和CSV Data Set Config的使用方法。

  用户参数可以给测试计划或者测试计划中的每个线程设置参数,如果设置的参数比线程数少的话,这些参数就会被重复利用。

  继续以Google为例,如果你想用不同的关键字来搜索,可以在用户参数中作如下设置:

  1. 右键单击[线程组],添加 >> 前置处理器 >> 用户参数,在用户参数元件中添加5个用户。然后再添加一个变量[keyword],5个用户对应的值可以随便填写。

  2. 设置[线程组]的线程数为5

  3. 修改脚本中名称为/search的请求。把名称为[q]的字段的值修改为${keyword}

  用户参数也可以读取CSV文件,上面的例子如果改为读取CSV的话,则需要

  1. 在ApacheJMeter.jar的同级目录下新建一个文件,keyword.txt,其中内容是每一行一个关键字

  2. 设置[线程组]的线程数为5

3. 如下图设置用户和变量,名称为keyword,用户_1是${_StringFromFile(keyword.txt)}

  4. 修改脚本中名称为/search的请求。把名称为[q]的字段的值修改为${keyword}

  做完上述操作后,点击运行 >> 启动,就会看到JMeter右上角的线程数从0升到5,执行完后,又变成0

  注意点:在一般情况下,线程数和用户参数中定义的变量数是相同的,除非你有特殊的需要

  我一般使用用户参数定义一些很重要的常量,像读取大规模数据这样的,我们可以使用CSV Data Set Config。CSV Data Set Config默认是读取指定的CSV文件中的数据,每个线程会按照顺序使用其中一条数据,如果线程数比实际数据多的话,数据则按顺序会被重复利用。

  1. 右键单击[线程组],添加 >> 配置元件 >> CSV Data Set Config,设置Filename为CSV文件的存放路径,Variable Names就是变量名,设置为keyword,Delimiter一般就是逗号了,四个选框一般就是按照下图设置即可

  2. 设置[线程组]的循环次数为永远,线程数为1

  3. 修改脚本中名称为/search的请求。把名称为[q]的字段的值修改为${keyword}

  做完上述操作后,点击运行 >> 启动,就会看到JMeter右上角的线程数从0升到1,执行完后,又变成0

  当然了,我的例子比较简单,有一个稍微复杂一点,而且经常用到的情况就是用户名、密码的组合。在大数据量测试的时候,因为涉及到缓存等的问题,不可能都用同一个用户来执行操作,所以要用很多用户来执行,这个时候CSV Data Set Config就很有用;或者是在进行数据插入的时候,也是很有用的。

  怎样利用外部数据已经晓得了,但是怎样确认每个线程执行的都是我们定义好的关键字呢?

  有多种方法,可以使用监听器,也可以使用断言,这两种元件留到以后再做介绍。

【转】利用JMeter进行压力测试的更多相关文章

  1. 学习使用Jmeter做压力测试(一)--压力测试基本概念

    学习使用Jmeter做压力测试(一)--压力测试基本概念 一.性能测试的概念 性能测试是通过自动化的测试工具模拟多种正常峰值及异常负载条件来对系统的各项性能指标进行测试.负载测试和压力测试都属于性能测 ...

  2. linux上实现jmeter分布式压力测试(转)

    摘要:最近根据公司工作的需求,学习了一些压力测试的知识,目前,公司使用的是jmeter进行压力测试.下面就记录下近期的学习.我想将这次的博文分成三个部分:1.开始测试前的准备(测试环境的搭建)2.在一 ...

  3. 使用JMeter做压力测试

    使用JMeter做压力测试 1.下载Jmeter 地址:http://jmeter.apache.org/download_jmeter.cgi 2.启动jmeter 运行bin/jmeter.bat ...

  4. 【JMeter】如何用JMeter进行压力测试

    [JMeter]如何用JMeter进行压力测试(调试脚本已再猪猪微信的收藏中进行了收藏哦,名字叫exam-wow.jmx) 一.用badboy录制压测过程形成脚本另存为jmeter格式文档. 二.JM ...

  5. 如何使用Jmeter进行压力测试

    Jmeter做压力测试的操作:Jmeter不仅可以做接口测试,还可以做压力测试,下面介绍介绍如何jmeter进行简单地压力测试.具体步骤如下: 第一步:添加请求,这里不介绍具体步骤,详见(https: ...

  6. Jmeter服务器压力测试使用说明

    Jmeter服务器压力测试使用说明 Apache JMeter是Apache组织开发的基于Java的压力测试工具. 官方地址:http://jmeter.apache.org/download_jme ...

  7. linux环境下使用jmeter进行压力测试

    linux环境下使用jmeter进行压力测试 linux环境下使用就meter进行压力测试: linux环境部署: 在Linux服务器先安装jdk: 2.以jdk-8u172-linux-x64.ta ...

  8. 性能测试工具 jmeter 分布式压力测试实操

    性能测试工具 jmeter 分布式压力测试实操 本文在Non-GUI Mode下进行,准备好三台有jdk环境,linux操作系统,同一局域网测试机器,运行两台slave,一台master机器,进行分布 ...

  9. 使用JMeter进行压力测试

    使用JMeter进行压力测试(基础篇) 1.启动Jmeter 双击图中所示文件出现如下图所示即启动成功 2 新建测试计划 File------>new 2.1右键新建线程组 add-----&g ...

随机推荐

  1. 《Effective C++》第3章 资源管理(2)-读书笔记

    章节回顾: <Effective C++>第1章 让自己习惯C++-读书笔记 <Effective C++>第2章 构造/析构/赋值运算(1)-读书笔记 <Effecti ...

  2. 将VS2010环境设置为VC6.0样式(字体、前景色、背景色、Visual Assist X等)

    一.设置字体. 使用字体:Fixedsys Excelsior 3.01. 步骤1:下载字体. 步骤2:安装字体,控制面板->字体,复制下载的字体进去. 步骤3:打开VS2010,选择菜单:To ...

  3. 对于get方法是否需要synchronized修饰

    具体用法没有总结,只是说明一个用法而已,对于以前个人理解出现的偏差 [问题描述] 对于一个计数功能的实现,获取值的方法是否需要加锁? [以前理解] 我只需要在进行累加的方法上进行加锁即可,这样保证其可 ...

  4. 多网卡下,vlc发送IGMP组播报告包

    这两天测试IGMP遇到一个问题,环境描述如下: 我的vlc客户端安装在windows下,该PC有两张网卡,本地连接1接公司网,本地链接2 接路由器.wireshark坚挺本地链接2,以测试路由的IGM ...

  5. React之状态(state)与生命周期

    很多时候,我们的页面数据是动态的.所以,我们需要实时渲染页面: 一.用定时函数setInterval() 组件(输出当前时间): index.js: 这样每隔1秒页面就会重新渲染一次,这样传进去的时间 ...

  6. CUDA Samples: Julia

    以下CUDA sample是分别用C++和CUDA实现的绘制Julia集曲线,并对其中使用到的CUDA函数进行了解说,code参考了<GPU高性能编程CUDA实战>一书的第四章,各个文件内 ...

  7. Java面试题收集以及参考答案(100道)

    不积跬步无以至千里,这里会不断收集和更新Java基础相关的面试题,目前已收集100题. 1.什么是B/S架构?什么是C/S架构 B/S(Browser/Server),浏览器/服务器程序 C/S(Cl ...

  8. 让svn具有分布式的功能。

    最近开发遇到了个难事.公司的svn库不能随便提交,必须要经过验证.但是平时修改太多,如果不提交到svn说不定前面被删掉的代码后面又需要了.svn自带的relocate和switch都不能达到要求.找遍 ...

  9. BZOJ2946 Poi2000 公共串 【后缀自动机】

    Description 给出几个由小写字母构成的单词,求它们最长的公共子串的长度. 任务: l 读入单词 l 计算最长公共子串的长度 l 输出结果 Input 文件的第一行是整数 n,1<=n& ...

  10. SpringBoot在logback.xml中读取application.properties中配置的日志路径

    1.在springboot项目中使用logback记录日志,在logback.xml中配置日志存储位置时读取application.properties中配置的路径,在 logback.xml中配置引 ...