JMeter使用了不同技术和协议,是一款可以进行配置和执行负载测试、性能测试和压力测试的工具。

什么是JMeter?

  • JMeter是Apache组织的开放源代码项目,它是功能和性能测试的工具,100%的用java实现。
  • JMeter最初的用途是用来测试web应用的,但是它的功能已得到扩展,如今已经可以针对绝大部分的程序进行测试,例如各种类型的数据库,FTP, HTTP, HTTPS 或者其他的服务端应用。

JMeter特点

  • 多线程框架-支持请求并发操作
  • 用于对服务器、网络或对象模拟巨大的负载
  • 支持数据库、FTP服务器等各类系统性能测试
  • 开源,纯JAVA语言编写,可以进行二次开发

JMeter作用领域

  • JMeter可以用于测试静态或者动态资源的性能(文件、Servlets、Perl脚本、java对象、数据库和查询、ftp服务器或者其他的资源)。
  • JMeter用于模拟在服务器、网络或者其他对象上附加高负载以测试他们提供服务的受压能力,或者分析他们提供的服务在不同负载条件下的总性能情况。
  • 你可以用JMeter提供的图形化界面分析性能指标或者在高负载情况下测试服务器/脚本/对象的行为。

安装与启动

1.首先必须安装java环境,最新版本Apache JMeter 3.0 需要JRE 1.7或者更高版本

2.从http://jmeter.apache.org/download_jmeter.cgi下载最新版本的JMeter,将它解压到例如D:\jmeter下(Windows),文件夹结构应该如下:

D:.
└─jmeter
├─bin
├─docs
├─extras
├─lib
├─licenses
└─printable_docs

bin 目录下存放的是可执行的程序、配置文件和日志文件。

jmeter.bat 是Jmeter的主运行程序,我们通过这个程序来启动JMeter。这个文件可以被编辑,比如修改JVM参数:(注意 HEAP和PermSize之和不要超过物理内存的50%)

set HEAP=-Xms512m -Xmx512m

set PERM=-XX:PermSize=128m -XX:MaxPermSize=128m

jmeter-server.bat 是JMeter联机负载测试的组件,如果需要做联机测试,需要在负载机器上启动该程序。

lib 目录下包含ext、junit目录及各种jar包

docs 目录下存放的是API文档、默认的样式文件及UI图片等。

3.然后你就可以进入到D:\jmeter\bin(对于Windows用户),执行jmeter.bat,可以看到JMeter GUI的启动界面:

使用JMeter测试http接口

测试环境准备

本文使用聚合数据的老黄历接口为例,api接口文档:https://www.juhe.cn/docs/api/id/65

接口地址:http://v.juhe.cn/laohuangli/d
支持格式:json/xml
请求方式:http get/post
请求示例:http://v.juhe.cn/laohuangli/d?date=2014-09-11&key=您申请的KEY

一、建立测试计划(Test Plan)

测试计划描述了执行测试过程中JMeter的执行过程和步骤,一个完整的测试计划包括一个或者多个线程组(Thread Groups)、逻辑控制(Logic Controller)、实例产生控制器(Sample Generating Controllers)、侦听器(Listener)、定时器(Timer)、比较(Assertions)、配置元素(Config Elements)。

打开JMeter时,它已经建立一个默认的测试计划,一个JMeter应用的实例只能建立或者打开一个测试计划。这里,我们假设需要JMeter模拟五个请求者(也就是五个线程),每个请求者连续请求两次

二、增加线程组(Thread Group)

这一步,我们将向测试计划中增加相关负载设置,使Jmeter知道我们需要模拟五个请求者,每个请求者在测试过程中连续请求两次。详细步骤如下:
1. 选中可视化界面中左边树的Test Plan节点,单击右键,选择Add->Threads(Users)->Thread Group,界面右边将会出现他的设置信息框。

2. Thread Group有三个和负载信息相关的参数:
  Number of Threads: 设置发送请求的用户数目
  Ramp-up period: 初始化设置用户数全部启动的时间,单位是秒。比如你的用户数(线程)是5,而这个参数是10,则代表10s内5个用户全部启动,即每2秒新启动一个用户数。 
  Loop Count: 请求发生的重复次数
      根据我们演示例子的设计,我们应该将Number of Threads设置为5,Ramp-up period设置为0(也就是同时并发请求),不选中forever,在Loop Count后面的输入框中输入2

  设置后的屏幕截图如下:

三、增加默认Http属性(增强,可选)

实际的测试工作往往是针对同一个服务器上Web应用展开的,所以Jmeter提供了这样一种设置, 在默认Http属性设置需要被测试服务器的相关属性,以后的http请求设置中就可以忽略这些相同参数的设置,减少设置参数录入的时间。
设置默认http属性步骤:
1. 选中可视化界面中左边树的Test Plan节点,单击右键,选择Add->Config Element->HTTP Request Defaults,界面右边将会出现他的设置信息框。
2.默认http属性的主要参数说明如下:
  protocal:      发送测试请求时使用的协议
  server name or ip:被测试服务器的ip地址或者名字
  path:        默认的起始位置
  port number:    服务器提供服务的端口号
  设置后的屏幕截图如下:

四、增加采样器Sampler(Http请求)

现在我们需要增加http请求了,他也是我们测试的内容主体部分。你可以通过下面的步骤来增加性的http请求:
1. 选中可视化界面中左边树的Thread Group节点,单击右键,选择Add->Sampler->HTTP Request,界面右边将会出现他的设置信息框。
2. 增加的属性中有发送http时方法的选择,你可以选择为get或者post。
  我们现在增加两个http 请求,因为我们设置了默认的http属性,所以和默认http属性中相同的属性不再重复设置。根据接口文档,设置请求参数date和key(自行申请)

 设置后的屏幕截图如下:

五、增加侦听器(Listener)

增加listener是为了记录测试信息并且可以使用Jmeter提供的可视化界面查看测试结果,里面有好几种结果分析方式可供选择,你可以根据自己习惯的分析方式选择不同的结果显示方式,我们这里同时使用表格和树的形式来查看和分析测试结果。你可以通过下面的步骤来增加listener:
1. 选中可视化界面中左边树的Thread Group节点,单击右键,选择Add->Listener->View Results Tree,界面右边将会出现他的设置信息和结果显示框。
2. 选中可视化界面中左边树的Thread Group节点,单击右键,选择Add->Listener->View Results in Table,界面右边将会出现他的设置信息和结果显示框。

六、开始执行测试

方式一:通过单击菜单栏run -> Start开始执行测试计划
方式二:在左边树的Thread Group节点,单击右键,选择Start 开始执行测试线程组

七、查看输出

View Results in Table:

View Results Tree:

八、使用CSV Data Set Config实现参数化(增强)

在使用Jemeter做压力测试的时候,往往需要参数化。这个时候我们就可以使用CSV Data Set Config来实现。
1.首先通过Test Plan或者Thread Group的Add->Config Element->CSV Data Set Config添加,本实例中将date参数化。
2.创建D:\date.txt,如下:

3.CSV Data Set Config各个参数的简要说明:

FileName:        即同目录下csv文件的名称
File Encoding:      默认为ANSI
Varible Names:     定义文本文件中的参数名,参数之间逗号分隔.定义后可在脚本在以Shell变量的同样的方式引用
Allow Quoated data:   双引号相关
Recycle on EOF:       设置为True后,允许循环取值
Stop Thread on EOF:    当Recycle on EOF为false并且Stop Thread on EOF为true,则读完csv文件中的记录后,停止运行
Sharing Mode:             设置是否线程共享

设置CVS参数,设置好屏幕截图如下

重新运行,检查View Results Tree 中的Request,可发现各个请求中的date已实现参数化

使用JMeter测试MySQL数据库

在这一节中,我们创建50个用户,每次执行2条sql语句,重复执行100次。总请求数为 (50 Users)x(2 requests)x(repeat 100 times)=10,000 JDBC requests.

环境准备

1.本实例使用 MySQL 数据库驱动。将数据库驱动(ex.mysql-connector-java-5.1.40-bin.jar)下载存放到 JMeter 安装目录下的./lib 目录中,如本教程安装目录D:\jmeter\lib

数据库驱动下载地址:http://dev.mysql.com/downloads/connector/j/

2.本实例使用MySQL数据库,MySQL数据库安装见教程:《MYSQL 免安装版(windows 7/64)

本实例使用本地数据库test中的test表。

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for test
-- ----------------------------
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
`name` varchar(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`sex` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of test
-- ----------------------------
INSERT INTO `test` VALUES ('Cherish', '29', 'F');
INSERT INTO `test` VALUES ('Cherish', '27', 'F');
INSERT INTO `test` VALUES ('Milton', '28', 'G');
INSERT INTO `test` VALUES ('Milton', '26', 'G');

一、添加用户数

使用JMeter创建任何测试计划,首先第一步是创建线程组。在线程组中可以设定模拟用户数、请求发送频率、总共发送请求数。

选中测试计划->右键->选择Add->Threads(Users)->Thread Group  配置后如下:

二、添加 JDBC 请求

首先,配置JDBC连接信息,选中线程组 JDBC Users,右键,选择 Add → Config Element → JDBC Connection Configuration

主要配置:

Variable Name:myDatabase (这个配置,在后面requests请求中,要使用到,表示调用该份数据库配置)
Database URL:jdbc:mysql://localhost:3306/test
JDBC Driver class: com.mysql.jdbc.Driver
Username: 数据库用户名
Password: 数据库连接密码

其他选项可以默认,配置后如下:

然后配置JDBC请求,选中线程组 JDBC Users,右键,选择Add → Sampler → JDBC Request

在我们的实例中,需要两个JDBC requests,分别如下:

三、添加数据库驱动到JMeter

在测试计划面板中,导入mysql-connector-java-5.1.40-bin.jar 如下

四、添加监听器来查看/保存测试结果

选中线程组 JDBC Users,右键,选择Add → Listener → Summary Report

运行线程组后,测试结果如下:

使用JMeter测试soap接口

本实例中,我们创建5个虚拟用户,每次访问发起一个请求,重复执行两次。总请求数为 (5 Users)x(1 requests)x(repeat 2 times)=10 HTTP requests。

环境准备:

在本实例中,我们使用了之前教程《Python 开发与测试 Webservice(SOAP)》中介绍的方法,创建并启动webservice服务端。

一、添加用户自定义变量配置

选中测试计划,右键,选择 Add-> Config Element -> User Defined Variable ,配置如下:

二、添加HTTP请求全局默认配置

选中测试计划,右键,选择 Add -> Config Element -> HTTP Request Defaults,配置如下

三、创建虚拟用户(线程组)

选中测试计划,右键,选择 Add -> Threads(Users) -> Thread Group,配置如下:

四、添加HTTP请求

选中线程组 Number of Users,右键,选择 Add -> Sampler -> HTTP Request,配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:ns0="spyne.examples.hello.soap" xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<ns1:Body>
<ns0:say_hello>
<ns0:name>Milton</ns0:name>
<ns0:times>1</ns0:times>
</ns0:say_hello>
</ns1:Body>
</SOAP-ENV:Envelope>

五、添加HTTP消息头管理器(可选)

选中HTTP Request,右键,选择 Add -> Config Element -> HTTP Header Manager ,配置如下:

六、添加响应断言(可选)

选中HTTP Request,右键,选择 Add -> Assertions -> Response Assertion,配置如下:

七、添加监听器

选中测试计划,右键,选择 Add → Listener → View Results Tree

选中测试计划,右键,选择 Add → Listener → Aggregate Graph

运行后,结果如:

最权威最详细的教程,请见JMeter官网:http://jmeter.apache.org/

***微信扫一扫,关注“python测试开发圈”,了解更多测试教程!***

JMeter 安装与使用基本教程的更多相关文章

  1. Jmeter安装图文及入门教程

    一.JMeter介绍 JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域.它可以用于测试静态和动态资源,例如 ...

  2. jmeter安装教程与新手入门(附jdk安装教程)

    一.前言 最近要对网站做性能测试,提到了并发数测试,查了下,还是决定使用jmeter来完成这项测试,这里总结了jmeter完整的安装教程,附上新手使用教程. 二.jmeter安装 1.jdk安装(jm ...

  3. JMETER安装教程

    jmeter的安装教程 1:安装jdk并且配置好环境变量,此处就不做赘述(前面的文档中有) 2:下载jmeter文件和jmeter的插件文件 JMeter:http://jmeter.apache.o ...

  4. 【Jmeter】Jmeter安装配置教程

    jmeter安装配置教程 1.安装jdk,配置环境变量 进入官网,https://www.oracle.com/downloads/index.html#java,选择 Java (JDK) for ...

  5. Jmeter安装与环境部署

    Jmeter安装与环境部署 版权声明:本文为博主原创文章,未经博主允许不得转载. 博主:海宁 联系:whnsspu@163.com

  6. win7下IIS的安装和配置 图文教程

    转自   http://www.jb51.net/article/29787.htm 最近工作需要IIS,自己的电脑又是Windows7系统,找了下安装的方法,已经安装成功.在博客里记录一下,给需要的 ...

  7. win8.1系统的安装方法详细图解教程

    win8.1系统的安装方法详细图解教程 关于win8.1系统的安装其实很简单 但是有的童鞋还不回 所以今天就抽空做了个详细的图解教程, 安装win8.1系统最好用U盘安装,这样最方便简单 而且系统安装 ...

  8. Windows OS上安装运行Apache Kafka教程

    Windows OS上安装运行Apache Kafka教程 下面是分步指南,教你如何在Windows OS上安装运行Apache Zookeeper和Apache Kafka. 简介 本文讲述了如何在 ...

  9. Apache JMeter安装

    Apache JMeter安装说明 1.       安装环境要求: Java版本 JMeter要求充分满足JVM1.3或更高. 操作系统 JMeter可以在当前任何一个已经部署了Java的操作系统上 ...

随机推荐

  1. NSMutableURLRequest和NSURLConnection用Post方式上传照

    需求:上传一张照片和内容,内容包括:用户编辑的内容.经纬度.地点等等,就是类似发一个说说.这就是一个很平常的功能,实现的方式想必各位能想到很多. 接下来我想用系统的NSURLConnection来实现 ...

  2. 【POJ 1113】Wall

    http://poj.org/problem?id=1113 夏令营讲课时的求凸包例题,据说是PKUSC2015的一道题 我WA两次错在四舍五入上了(=゚ω゚)ノ #include<cmath& ...

  3. jsrender-for循环中访问父属性

    jsrender中使用for循环数据时有时需要访问父级数据. 而jsrender在循环中的父级数据存放在隐藏属性parent.parent.data中,使用案例如下 {{:#parent.parent ...

  4. BP神经网络推导过程详解

    BP算法是一种最有效的多层神经网络学习方法,其主要特点是信号前向传递,而误差后向传播,通过不断调节网络权重值,使得网络的最终输出与期望输出尽可能接近,以达到训练的目的. 一.多层神经网络结构及其描述 ...

  5. scales小谈grunt

    Grunt是基于Node.js的项目构建工具.它可以自动运行你所设定的任务.Grunt拥有数量庞大的插件,几乎任何你所要做的事情都可以用Grunt实现. 一头野猪映入眼帘,意:咕噜声 中文网站:htt ...

  6. 【BZOJ-3832】Rally 拓扑序 + 线段树 (神思路题!)

    3832: [Poi2014]Rally Time Limit: 20 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 168  Solved:  ...

  7. codeforces 580D:Kefa and Dishes

    Description When Kefa came to the restaurant and sat at a table, the waiter immediately brought him ...

  8. poj3502 恶心题

    巨恶心的一个题::>_<:: 题意:给出航班航线和大陆,找航线上距离大陆最远的某一点距离大陆边缘的距离 标准算法:二分答案,从大陆边界向外扩展,扩展出来的面积会覆盖航线.找出航线上最后被覆 ...

  9. shell命令date

    某个标准时间转换为unix时间戳 date -d '2015-10-20 15:07:02' +%s unix时间戳转换为对应的标准时间 date -d @1445324822 date " ...

  10. 数据结构算法C语言实现(五)---2.3重新定义线性链表及其基本操作

    一.简述 ...由于链表在空间的合理利用上和插入.删除时不需要移动等的优点,因此在很多场合下,它是线性表的首选存储结构.然而,它也存在着实现某些基本操作,如求线性表的长度时不如顺序存储结构的缺点:另一 ...