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. ansible解密

    ansible是个什么东西呢?官方的title是“Ansible is Simple IT Automation”——简单的自动化IT工具.这个工具的目标有这么几项:让我们自动化部署APP:自动化管理 ...

  2. Boundary Representations

    用所有属于boundary的点来表示boundary, 有两个主要的缺点, 一是数据量大, 二是对噪声敏感. 用boundary的一些representation而非精确的boundary本身来表示b ...

  3. Mybatis + SpringMVC + Maven实现分页查询

    使用Mybatis + Maven + SpringMVC 运行时,突然被需要分页查询的功能给难住了 这里推荐采用的插件是PageHelper这个插件,使用起来十分方便.该插件支持以下数据库: Ora ...

  4. java.sql.SQLException: 无效的列索引

    java.sql.SQLException: 无效的列索引 "无效的列索引"其实是个低级的错误,原因无非几个: 1.sql串的?号数目和提供的变量数目不一致: 例如:jdbcTem ...

  5. python模块介绍二。

    全局变量 全局变量 python在一个.py文件内部自动添加了一些全局变量 print(vars()) #查看当前的全局变量 执行结果: {'__package__': None, '__loader ...

  6. 【学习笔记&训练记录】数位DP

    数位DP,即对数位进行拆分,利用数位来转移的一种DP,一般采用记忆化搜索,或者是先预处理再进行转移 一个比较大略的思想就是可以对于给定的大数,进行按数位进行固定来转移记录答案 区间类型的,可以考虑前缀 ...

  7. HA模式强制手动切换:IPC's epoch [X] is less than the last promised epoch [X+1]

    -- ::, WARN org.apache.hadoop.hdfs.qjournal.client.QuorumJournalManager: Remote journal failed to wr ...

  8. oracle mini project

    oracle pl/sql mini project 1.解一元二次方程 (x2+4x+3=0) set serveroutput on declare a number ; b number; c ...

  9. 【poj1987】 Distance Statistics

    http://poj.org/problem?id=1987 (题目链接) 题意 给出一棵树,求树上距离不超过K的点对个数. Solution 点分治,同poj1741. 代码 // poj1987 ...

  10. CSS 命名管理 之 BEM

    好吧,将 BEM 简单的解释为 “Block-Element-Modifier“, 其实是个不负责任的做法.鬼知道 Block 是什么啊?所以,看了一些似懂非懂的中文解释之后,自己还是得去找些英文来读 ...