Jmeter简介

1、Jmeter简介

(1)概念 

Apache JMeter应用程序是开源软件,100%纯Java应用程序,用来进行负载测试、度量系统性能。它最初是为测试Web应用程序而设计的,但后来扩展到其他测试函数。 

(2)使用Jmeter我们能做什么? 

Apache JMeter可以用于测试静态和动态资源、Web动态应用程序的性能。 

它可以用来模拟大量负载对单个服务器或一组服务器、网络或对象进行压测,以测试其强度,或分析不同负载类型下的总体性能。 

(3)Apache JMeter的特性包括:

 

支持测试许多种类的应用程序/服务器/协议类型:

 

Web - HTTP, HTTPS (Java, NodeJS, PHP, ASP.NET 等)

SOAP / REST Webservice

FTP

通过JDBC连接数据库

LDAP

面向消息的中间件(MOM)通过JMS。

Mail邮件- SMTP(S)、POP3(S)和IMAP(S)

本地命令或shell脚本。

TCP

Java对象

全功能测试IDE,允许快速测试计划记录(来自浏览器或本机应用程序),构建和调试。

 

命令行模式(非GUI /无头模式)负载测试支持任何Java兼容的操作系统(Linux、Windows、Mac OSX…)

一个完整的并准备好呈现动态HTML报告。

通过从最流行的响应格式、HTML、JSON、XML或任何文本格式提取数据的能力,可以轻松地相互关联。

完全可移植性和100% 纯Java。

完整的多线程框架允许多个线程同时进行采样,同时通过单独的线程组对不同的函数进行同步采样。

缓存和离线分析/重新播放测试结果。

高度可扩展的核心: 

可插入的采样器允许无限的测试能力。

可脚本的Samplers(类似Groovy和BeanShell的jsr23兼容语言)

可以使用可插入计时器选择若干负载统计信息。

数据分析和可视化插件允许极大的扩展性和个性化。

函数可用于为测试提供动态输入或提供数据操作。

通过第三方开放源码库轻松地持续集成Maven、Graddle和Jenkins。

(4)Jmeter工作原理 

通过多线程模拟服务器压力(Loadrunner可以选择以进程方式还是以线程方式来运行)。JMeter通过线程组来驱动多个线程(可以将线程理解为虚拟用户)运行测试脚本对被测服务发起负载,每一个负载机上都可以运行多个线程组。 

控制机:当我们需要多台服务器来进行压测时,那个被选中作为管理机的服务器就是控制机。他负责管理、指挥其它负载机运行任务,并且收集负载机的测试结果,当然它本身也可以参与脚本运行;

负载机:想被测服务器发起负载的服务器。负载机受控制机管理首先要启动一个客户端程序(Agent:jmeter-server.bat),这样控制机才可以接管负载机。控制机会把运行的脚本隐蔽的发送到远程负载机,但是如果运行的测试脚本有参数文件及依赖的jar包时,控制机并不能把它们发送到远程负载机,这种情况我们后面详细介绍;

远程运行逻辑: 

3.1 远程负载机首先启动Agent程序,待控制机连接; 

3.2 控制机连接远程负载机; 

3.3 控制机发送指令(脚本及启动命令)启动线程; 

3.4 负载机运行脚本,回传状态(包括测试结果); 

3.5 控制机收集结果并显示

2、JMeter安装

JMeter官网下载地址:http://jmeter.apache.org/download_jmeter.cgi

 

前提条件:安装jdk(注意版本) 

在写本博客的时候,JMeter版本为5.1,需要JAVA 8 或JAVA 9版本

 

(1)Windows安装

 

直接下载二进制文件包中的zip文件,下载后解压

进入到安装目录,bin目录下,双击jmeter.bat文件即可打开jmeter

(2)Mac安装

 

直接下载二进制文件包中的zip文件,下载后解压

打开terminal,cd到安装目录,bin目录下,sh jmeter.sh

(3)Linux安装

 

直接下载二进制文件包中的zip文件,下载后解压

命令行,cd到安装目录,bin目录下,./ jmeter.sh

无论是使用二进制包还是通过源文件安装Jmeter都非常简单,需要大家注意的是,下载合适的JDK并配置好环境变量。

 

3、JMeter工作目录

 

(1)bin目录:包含示例脚本(examples)、报告模板(report-template)、启动文件(windows使用.bat,Mac和linux使用.sh启动文件)还有一些配置文件(日志设置、JVM设置等) 

(2)docs:docs文件夹下的api文件夹包含了JMeter API离线帮助文档 

(3)extras:JMeter的辅助功能,与Jenkins等集成会用到 

(4)lib:JMeter组件以jar包的形式存放在lib/ext目录下,给JMeter安装的扩展插件,都存放在该目录; 

(5)license:包含一些软件许可证,不必深究 

(6)printable_docs:离线帮助文档,权威文档 

(7)LICENSE:License说明文件 

(8)NOTICE:版权声明 

(9)README.md:JMeter简明介绍,后缀md是Markdown格式文件

4、JMeter常用组件

(1)测试计划 

可以将其看作一个测试场景或测试用例,用来描述一个性能测试,包含测试用例相关的所有功能(比如测试用例的前置条件,预期结果等)

 

(2)线程组 

性能测试需要模拟大量用户负载,线程组就是用来完成这个工作的。在这里我们可以设置线程数(一线程代表一用户),设置运行时间等。分为三类: 

setup thread group 

执行预测试操作的线程组,类似LR中的init()

teardown thread group 

执行测试后操作的线程组

thread group 

这个是我们常用的添加运行线程的设置项。

访问路径是:【测试计划】——>【Threads(Users)】

 

(3)取样器sampler 

就是通过像服务器发送请求来模拟用户操作,同时也接收服务器响应。取样器有很多种(Jmeter 4.0 默认20种),常用的有HTTP请求,FTP请求等。取样器的访问路径是:【测试计划】——>【线程组】——>【Sampler】

 

(4)断言 

断言就是用来验证响应结果是否正确的,类似LR中的检查点。断言的访问路径是:【测试计划】——>【断言】

 

(5)监听器 

Jmeter的测试结果需要添加监听器来收集,监听器有两个任务:

 

监听结果,并且保存测试结果到文件,这些结果数据可以供再次分析使用

展示结果,Jmeter可以以表格或图形的方式展现结果,方便测试人员分析

访问路径是【测试计划】——>【监听器】 

取样器、断言、监听器组合在一起就可以帮助我们完成发送请求、验证结果、记录结果三项重要的工作。

 

(6)前置处理器 

用于在实际的请求发出之前对即将发出的请求进行特殊处理。在请求发送前,可以需要准备环境或参数,那我们就可以在前置处理器中完成这些工作。比较典型的应用有:

 

对数据库进行操作前需要先建立一个数据库连接,可以用前置处理器完成;

当发出的请求需要包含session信息时,可以用前置处理器填充;

访问路径:【测试计划】——>【前置处理器】

 

(7)后置处理器 

后置处理器一般放在取样器之后,用来处理服务器的返回结果,比如一个Web应用程序,我们登录后会返回一个SessionID,这个SessionID在登录之后的业务操作过程中会作为验证条件,验证用户是否合法登录了。我们利用取样器模拟这个请求时就需要带上这个属性,那么如何获取呢?这时候就用到了后置处理器,等同于LR中的关联。

 

访问路径:【测试计划】——>【后置处理器】

 

(8)配置元件 

性能测试中为了模拟大量用户操作,我们往往需要做参数化,JMeter的参数化就是通过配置元件来完成的。比如通过CSV Data Set Config,可以帮助我们从文件中读取数据。具体用法我们后续介绍。

 

前置处理器、后置处理器、配置元件都是为取样器提供数据支持的,取样器关注的是业务逻辑。

 

(9)定时器 

定时器用于操作之间设置等待时间,有点类似LoadRunner中的think time 

对于类似“秒杀”这种活动,使用定时器再适合不过了。为了足够真实的模拟用户负载,我们有时会需要模拟这些请求在同一时刻发送,就好像把大家集合到一条起跑线上,然后一声令下,同时起跑。Jmeter提供了多种定时器以满足各种场景。 

访问路径:【测试计划】——>【线程组】——>【定时器】

 

(10)控制器: 

逻辑控制器包含两类,一类用于控制测试计划中取样器节点发送请求的逻辑顺序的控制器,如if控制器,循环控制器;一类是用来组织可控制取样器节点的,如事务控制器、吞吐量控制器

 

(11)Test Fragment 

是一个辅助组件,在此节点下几乎可以放置任何Jmeter测试元件,但一般不会运行,他有什么作用呢?

 

在脚本开发过程中用来备份元件

Test Fragment下的元件可以被模块控制器调用,我们可以利用它来模块化请求,然后供模块控制器调用

(12)工作台 

工作台的主要功能在于:

启动HTTP代理,从而可以录制HTTP请求

备份脚本(这里的脚本是不会运行的)

posted @ 2019-10-07 17:00  BF!  阅读(358)  评论(0编辑  收藏  举报