02-性能测试之Jmeter简介

导读

本节内容包括:

  1. Jmeter工具简介
  2. Jmeter安装
  3. Jmeter目录结构
  4. 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通过线程组来驱动多个线程(可以将线程理解为虚拟用户)运行测试脚本对被测服务发起负载,每一个负载机上都可以运行多个线程组。
02-性能测试之Jmeter简介_第1张图片

  1. 控制机:当我们需要多台服务器来进行压测时,那个被选中作为管理机的服务器就是控制机。他负责管理、指挥其它负载机运行任务,并且收集负载机的测试结果,当然它本身也可以参与脚本运行;
  2. 负载机:想被测服务器发起负载的服务器。负载机受控制机管理首先要启动一个客户端程序(Agent:jmeter-server.bat),这样控制机才可以接管负载机。控制机会把运行的脚本隐蔽的发送到远程负载机,但是如果运行的测试脚本有参数文件及依赖的jar包时,控制机并不能把它们发送到远程负载机,这种情况我们后面详细介绍;
  3. 远程运行逻辑:
    3.1 远程负载机首先启动Agent程序,待控制机连接;
    3.2 控制机连接远程负载机;
    3.3 控制机发送指令(脚本及启动命令)启动线程;
    3.4 负载机运行脚本,回传状态(包括测试结果);
    3.5 控制机收集结果并显示

2、JMeter安装

JMeter官网下载地址:http://jmeter.apache.org/download_jmeter.cgi
02-性能测试之Jmeter简介_第2张图片
前提条件:安装jdk(注意版本)
在写本博客的时候,JMeter版本为4.0,需要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工作目录

02-性能测试之Jmeter简介_第3张图片
(1)bin目录:包含示例脚本(examples)、报告模板(report-template)、启动文件(windows使用.bat,Mac和linux使用.sh启动文件)还有一些配置文件(日志设置、JVM设置等)
02-性能测试之Jmeter简介_第4张图片

(2)docs:docs文件夹下的api文件夹包含了JMeter API离线帮助文档
02-性能测试之Jmeter简介_第5张图片

(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请求
  • 备份脚本(这里的脚本是不会运行的)

好,本节内容就这么多吧。欢迎加QQ群:460430320,讨论测试相关知识,共同进步。

你可能感兴趣的:(性能测试,性能测试)