jmeter基础篇--基本介绍及示例

一、jmeter介绍

        Apache JMeterApache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。

        Apache jmeter 可以用于对静态的和动态的资源(文件,ServletPerl脚本,java 对象,数据库和查询,FTP服务器等等)的性能进行测试。它可以用于对服务器、网络或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。你可以使用它做性能的图形分析或在大并发负载测试你的服务器/脚本/对象。

        由于Jmeter100% java,具有完全的可移植性,所以只要在有JRE环境的系统中都能直接运行,不需要进行安装。

二、简单性能测试示例

1、测试前需要明确点

1)性能测试的目的

2)性能测试的环境

3)性能测试的场景

2、简单示例

1)添加线程组(用户)
 
    在“测试计划”上右键,选择“添加”---“Thread Users”---“线程组”,如下图所示:

jmeter基础篇--基本介绍及示例

        其中,对我们有影响的参数是线程数(设置发送请求的用户数目),Ramp-up period: 每个请求发生的总时间间隔,单位是秒,循环次数(请求发生的重复次数)。如果我们需要JMeter模拟五个请求者(也就是五个线程),每个请求者连续请求两次,则如下图设置:

jmeter基础篇--基本介绍及示例

 

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

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

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

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

2)添加请求:
  我们要访问一个网页,比如是百度首页,则是http请求,则添加http请求,在线程组上右键---“添加”---“Sampler”---“HTTP请求”:

jmeter基础篇--基本介绍及示例

  http请求的属性值中“Web服务器名称或IP”填写www.baidu.com就可以了:如下图所示:

jmeter基础篇--基本介绍及示例

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

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

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

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

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

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

方法:发送HTTP请求的方法,可用方法包括GETPOSTHEADPUTOPTIONSTRACEDELETE

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值,而不记录完整的响应数据。在需要进行数据量非常大的测试时,建议选中该项以减少取样器记录响应数据的开销。

一般来说,都会添加一个聚合报告,可以查看常见的性能指标:

jmeter基础篇--基本介绍及示例

3)尝试运行Jmeter,运行过程中或者运行完成后均可以查看执行情况

jmeter基础篇--基本介绍及示例

4)聚合报告

Samples: 表示这次测试中一共发出了多少个请求

Average: 访问页面的平均响应时间

Min: 访问页面的最小响应时间

Max: 访问页面的最大响应时间

Error%: 错误的请求的数量/请求的总数

Throughput:每秒完成的请求数

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

jmeter基础篇--基本介绍及示例

5)jmeter参数化

参数化:简单的来理解一下,我们录制了一个脚本,这个脚本中有登录操作,需要输入用户名和密码,假如系统不允许相同的用户名和密码同时登录,或者想更好的模拟多个用户来登录系统。这个时候就需要对用户名和密码进行参数化,使每个虚拟用户都使用不同的用户名和密码进行访问。

我们需要“参数化”的数据,这里我用记事本写了三个用户名和密码,保存为.dat格式的文件。

jmeter基础篇--基本介绍及示例

我将这个文件放在了我的( /Users/leiyuxing/jmter/up.dat  )路径下。关于如何得到成百上千的用户名和密码,首先要在数据库中创建这些数据,将数据导出,整理保存,这里就不深究。

好,我们要编写函数来调用这个test.dat文件,怎么弄,点击菜单栏“选项”---->函数助手对话框,看下图。

jmeter基础篇--基本介绍及示例

我们需要“参数化”的数据,这里我用记事本写了三个用户名和密码,保存为.dat格式的文件。

jmeter基础篇--基本介绍及示例

5) 集合点:简单来理解一下,虽然我们的“性能测试”理解为“多用户并发测试”,但真正的并发是不存在的,为了更真实的实现并发这感念,我们可以在需要压力的地方设置集合点,

还拿那个用户和密码的地方,每到输入用户名和密码登录的地方,所有的虚拟用户都相互之间等一等,然后,一起访问。

jmeter基础篇--基本介绍及示例

这样子就添加了一个“集合点”,意思为“凑齐10个用户一起行动

jmeter基础篇--基本介绍及示例