Jmeter初步


前言

闲言碎语

2022.06.18 开启Jmeter学习之旅。跟XXX学习软件测试,到Jmeter这个模块时,一上来就说“我们用Jmeter做一个接口测试”,这简直是一件极其糟糕的事情,更糟糕的是,其PPT课件极其简略和丑陋,不由心生怒气,特在此记录自己的Jmeter学习过程。

参考说明

本学习过程参阅了如下作者的文章,并无直接拷贝,加入了个人理解和其他知识。若有侵犯之处,请联系我删除。

  • 作者:阳光温暖了心情;文章:JMeter学习(一)工具简单介绍
  • 作者:老_张;文章:《jmeter:菜鸟入门到进阶》系列

Jmeter简介

Jmeter是什么

下面这段话是来自官网 https://jmeter.apache.org/ 的简介:

“The Apache JMeter? application is open source software, a 100% pure Java application designed to load test functional behavior and measure performance. It was originally designed for testing Web Applications but has since expanded to other test functions.”

“Apache JMeter?应用程序是开源软件,是一个100%的纯Java应用程序,旨在负载测试功能行为测试性能。它最初是为测试Web应用程序而设计的,但后来扩展到其他测试功能。”

所以,Jmeter的核心功能是功能测试和性能测试。什么是功能测试?什么是性能测试?

  • 功能测试
    功能性测试,也叫行为测试(Functional Behavior Testing),即测试人员不知道程序内部是如何运行的,主要关注的是软件能做什么,检查软件功能是否满足产品需求文档的要求。举例如下:

    例1)淘宝是否能添加商品到购物车,是否能正确下单,是否能支付成功......

    所以说,功能测试是面向用户最重要的一个质量保障维度,需要考虑到每个功能细节,是测试工作中耗费时间最多的一项测试活动。

  • 性能测试
    模拟多个用户同时使用应用程序,测试接口的处理的能力。举例如下:

    例1)模拟双十一购物节淘宝的服务器在使用量大时是否会崩溃。
    例2)模拟12306火车购票网在春运期间是否会崩溃。

安装运行Jmeter

(1)JMeter安装

  1. http://jmeter.apache.org/ 下载最新版本的JMeter
  2. 安装JDK,配置环境变量JAVA_HOME.
  3. 系统要求:JMeter2.11 需要JDK1.6以上的版本支持运行
  4. JMeter可以运行在如下操作系统上:Unix,Windows和Open VMS.
  5. 避免在一个有空格的路径安装JMeter,这将导致远程测试出现问题。

(2)JMeter插件安装

  1. 插件下载地址: http://jmeter-plugins.org/downloads/all/
  2. 插件下载后解压:找到JMeterPlugins-Extras.jar,把JMeterPlugins-Extras.jar放到apache-jmeter-2.12\lib\ext目录。

(3)JMeter 运行

  1. 进入bin目录运行jmeter.bat启动jmeter
    注意:打开的时候会有两个窗口,JMeter的命令窗口和JMeter的图形操作界面,不可以关闭命令窗口。
  2. JMeter的classpath:
    如果你想添加其他JAR文件到JMeter的classpath中,你必须复制他们到lib目录中;
    如果你开发了一个JMeter特定组件或有效的jar文件,复制到lib目录下的ext目录中。

Jmeter界面

由于这是一个开源的软件,所以具有开源软件的通病——界面简洁而丑陋!
此部分学习参考:JMeter学习(一)工具简单介绍

JMeter界面具有正常图形界面软件所具有的菜单栏和工具栏,但是要理解其工作原理,需要从测试计划工作台两部分出发。

测试计划 Test Plan

(1)测试计划 Test Plan

测试计划用来描述一个性能测试,包含与本次性能测试所有相关的功能。也就说本性能测试的所有内容是于基于一个计划的。

  • 注意:“函数测试模式”复选框,如果被选择,它会使Jmeter记录来自服务器返回的每个取样的数据。如果你在测试监听器中选择一个文件,这个数据将被写入文件。如果你尝试一个较小的测试来保证Jmeter配置正确并且你的服务器正在返回期望的结果,这是很有用的。这样做的后果就是这个文件会快速增大,并且会影响Jmeter的效率。

(2)Threads(Users) 多用户线程

这里有三个添加线程组的选项,名字不一样,创建之后的界面是一样的。

  • 1)setUp Thread Group
    一种特殊的线程组,可用于执行预测试操作

  • 2)tearDown Thread Group
    一种特殊的线程组,可用于执行测试后操作

  • 3)Thread Group(线程组)

    我们通常添加运行的线程。通俗的讲,一个线程组,可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户。线程组中包含的线程数量(用户数量)在测试执行过程中是不会发生改变的。

    <名称> 比如“线程组_618购物节淘宝性能测试”
    <线程数> 50000000,模拟5千万用户
    默认是1秒。它指定了启动两个线程的时间间隔。如果你需要Jmeter立即启动所有线程,将此设定为0即可
    <循环次数> 表示每个线程执行多少次请求

(3)Test Fragment 测试片段

测试片段是控制器上一种特殊的线程组,它在测试树上与线程组处于一个层级。它与线程组有所不同,除非它是一个模块控制器或者是被控制器所引用,否则它不会被执行。

JMeter有两种类型的控制器:取样器(Sampler)和逻辑控制器(Logic Controller),可以用这些原件来驱动处理一个测试。

(4)Sampler 取样器

测试计划 → 线程组 →添加→取样器

取样器是性能测试中向服务器发送请求,记录响应信息,响应时间的最小单元。JMeter 原生支持多种不同的取样器, 如 HTTP Request Sampler 、 FTP Request Sampler 、TCP Request Sampler 、 JDBC Request Sampler 等,每一种不同类型的取样器可以根据设置的参数向服务器发出不同类型的请求。

在Jmeter所有的取样器中,Java Request Sampler与BeanShell Requst Sampler是两种特殊的可定制取样器。

(5)Logic Controller 逻辑控制器

逻辑控制器包括两类无件,一类是用于控制取样器节点发送请求的逻辑顺序的,常用的有如果(If)控制器 、Switch Controller 、Runtime Controller、循环控制器。另一类是用于组织可控制取样器节点的,如事务控制器、吞吐量控制器。

(6)Config Element 配置元件

(7)Timer 定时器

定时器用于操作之间设置等待时间,设置等待时间是性能测试中控制客户端QPS(Query Per Second)的手段。

(8)Pre-Processor 前置处理器

前置处理器用于在实际请求发出之前对即将发出的请求进行特殊处理。

(9)Post-Processor 后置处理器

后置处理器用于对Sampler发出请求后得到的服务器响应进行处理。一般用来提取响应中的特定数据。例如,XPath Extractor 可以用于提取响应数据中通过给定XPath值获得的数据;正则表达式提取器,则可以提取响应数据中通过正则表达式获得的数据。

(10)Assertion 断言(判定)

Assertion理解为判定比较好。断言用于检查测试中得到的响应数据等是否符合预期,一般用来设置检查点。

(11)Listener 监听器

监听器是用来对测试结果的数据进行处理和可视化展示的一系列元件。 图形结果、查看结果树、聚合报告、用表格察看结果都是我们经常用到的元件。

工作台 WorkBench

最新版的JMeter取消之前的工作台。
改用:测试计划→添加→非测试元件→HTTP代理服务器(HTTP(S) Test Script Recorder)

JMeter应用

以下内容标题旁边括号内的注释对应于Apache JMeter官网中用户手册(JMeter User's Maual)的一级目录。

Web测试(建立一个Web测试计划)

帮助文档

参考官网帮助文档: https://jmeter.apache.org/usermanual/