博客列表
/

JMeter 接口测试快速入门

JMeter 接口测试快速入门

作者:郑膜坊 全部标签: 技术类
2021年06月10号

JMeter简介

JMeter 的特性:

  • 对于多种协议的功能测试和性能测试
    • Web - HTTP, HTTPS (Java, NodeJS, PHP, ASP.NET, …)
    • SOAP / REST Webservices
    • FTP
    • Database via JDBC
    • LDAP
    • Message-oriented middleware (MOM) via JMS
    • Mail - SMTP(S), POP3(S) and IMAP(S)
    • Native commands or shell scripts
    • TCP
    • Java Objects
  • 提供了测试录制
  • 提供 CLI 模式
  • 提供 HTML 报告
  • 完全的可移植性和百分百的纯 Java
  • 提供多线程支持,模拟多用户
  • 高扩展性 >这一节内容译自 JMeter 首页: https://jmeter.apache.org/index.html

    笔者实验环境

JMeter是Java语言的实现,也就是纯Java应用,所以JMeter理论上可以运行于任何对应的Java环境可用的环境上。 |类型|值| |:—-|:—-| |Java版本|java version “1.8.0_181” (要求Java8及以上)| |JMeter版本|5.4.1| |操作系统|Ubuntu 20.04(GNOME 3.36.5)| |内核版本|Linux version 5.8.0-43-generic|

下载

本文主要介绍 JMeter 的快速入门,故其它环境由读者自行准备

  1. 进入官网页面(https://jmeter.apache.org/download_jmeter.cgi)选择合适的镜像源,下载二进制分发文件;
  2. 将压缩文件解压到本地后,JMeter 解压后得到的目录的路径称为 JMETER_HOME; ##JMeter文件简单介绍
文件路径(相对于 JMETER_HOME 目录) 文件描述
bin 文件夹,里面存放可执行文件
docs 帮助文档目录
extras 扩展插件目录,目录下的文件提供了对ant的支持
lib JMeter用到的jar包
bin/jmeter 在linux和unix系统中启动JMeter客户端的可执行文件(本身是shell脚本)
bin/jmeter-server 在linux和unix系统中启动JMeter服务进程的可执行文件(本身是shell脚本)
bin/jmeter.properties JMeter的配置文件
bin/jmeter.bat Windows下启动JMeter客户端的可执行文件
bin/jmeter-server.bat Windows下启动JMeter服务进程的可执行文件

启动JMeter的用户界面

进入 JMETER_HOME 目录下的 bin 目录,执行以下命令启动 JMeter 的 GUI 模式:

./jmeter

几秒后,界面打开如下:

JMeter主要概念简介

概念 简介
测试计划 测试计划描述了JMeter需要执行的一系列步骤
线程组 线程组定义了执行的用户池(以并发方式模拟多个用户)
jmx文件 对应于一个测试计划的以(.jmx)结尾的文件,文件中是以xml格式组织的JMeter程序特定数据结构
采样器(sample) 采样器可以对执行的目标进行采样(HTTP,JDBC等类型)
前置处理器(pre-processor) 对采样器进行前置处理(提供用户参数,等待指定时间等)
后置处理器(post-processor) 对采样器进行后置处理(结果提取器等)
断言(assertions) 对采样器得到的结果进行断言(响应时间断言,响应数据断言,响应的结构断言等)
逻辑控制器(Logic controller) 以逻辑的形式控制测试计划的执行步骤(If, While等)
监听器(listener) 在采样器执行结束后,监听器会被通知,一般监听器用于处理结果数据(展示结果数据,聚合图表等)
配置元素(config element) 能够为测试计划进行一些配置(请求头配置,通用请求配置,认证配置,变量配置等)

JMeter主要功能元素简介(Http测试相关)

JMeter 界面操作大部分是单击鼠标右键会弹出下拉菜单进行元素的添加

线程组

右键测试计划添加

组件截图:

组件参数说明:

参数名称 取值及含义
错误后的动作 继续(继续执行之后的步骤)、启动下一循环、停止线程(仅此线程)、停止测试(等正在执行的采样器执行结束后停止测试)、立即停止测试
线程数 要模拟的用户数量
Ramp-Up时间(秒) 预热时长。用于在执行的时间内将所有配置的数量的线程启动完毕。例如10s,线程数为10,则每隔1s启动一个线程(第一个线程总是立即启动的,如果总线程数为1,则无论预热时长取值多少,都等效于0)
循环次数 永远(循环不停止)、指定数字(指定次数循环之后,停止执行)
每次循环同一用户吗? 是/否

HTTP请求默认值

鼠标右键单击线程组元素,从配置元件(config element)下拉项中添加

这个组件用于为作用范围内的HTTP采样器提供默认值。

组件参数说明:

参数名称 取值及含义
协议 是http协议还是https协议
服务器名称或IP 域名或者IP地址
端口号 服务器的端口号
路径 URL中的path部分
内容编码 HTTP请求所使用的字符集编码
参数 HTTP请求参数
消息体数据 默认的请求体的数据

用户定义的变量

鼠标右键单击线程组元素,从配置元件中选择添加

这个组件用于在线程中定义变量,可以在其它地方使用 ${variableName} 的语法进行引用。

在下列界面点击 添加 按钮添加一行变量名和值即可定义一个变量。

HTTP采样器

鼠标右键单击线程组元素,从采样器条目中选择

HTTP采样器可以使用 HTTP 请求的形式对被测系统进行采样(发起请求)。这个组件中很多数据和上文提到的 HTTP请求默认值 组件中的很多属性相同,如果此采样器在 HTTP请求默认值 组件作用范围内,则采样器中为空的属性会填入默认值,不为空的属性会覆盖 HTTP请求默认值 组件中相同的属性(就近)。

组件参数说明:

参数名称 取值及含义
协议 是http协议还是https协议
服务器名称或IP 域名或者IP地址
端口号 服务器的端口号
路径 URL中的path部分
内容编码 HTTP请求所使用的字符集编码
参数 HTTP请求参数(URL中的查询参数)
消息体数据 请求体的数据
请求方法 GET、POST、PUT、DELETE等HTTP方法
文件上传 用于上传文件
自动重定向 勾选表示自动重定向。表示下游的HTTP协议处理器会自动的重定向,所以重定向中间的过程对JMeter是不可见的。且只能用于GET和HEAD方法。POST和PUT方法会被拒绝。
跟随重定向 勾选后表示跟随重定向(仅当自动重定向未勾选时有效)。如果设置,JMeter的采样器会对响应进行处理,且会追踪过程中的每次重定向,并将最后一个未重定向的请求和响应作为最外层的采样数据,其它的请求的数据作为这个采样数据的附加信息。(最大重定向次数为20)
使用KeepAlive 勾选后,JMeter会设置请求头 Connection: keep-alive 。但是这个选项是否生效还和JMeter的HTTP实现有关

响应断言

鼠标右键单击采样器,点击【添加-断言-响应断言】选项添加

响应断言可以为采样器所得的结果进行断言,以逻辑(等于、包含、正则匹配等)对包括响应头、响应码、响应体等在内的内容进行断言,以校验采样器的输出是否符合测试者的预期。

组件参数说明:

参数名称 取值及含义
Name 断言的名称
Apply to 选定断言的作用范围,一般是用到 Main sample only 选项,Main sample 指的就是这个断言所属的采样器,而 sub samples 指的是由这个采样器产生的子采样器,比如 HTTP 采样器的高级选项 – 获取内置的资源,就会产生子采样器。
Field to Test 指的是需要进行断言的目标。Text Response 指的是从服务器获得的整个响应作为文本(响应体)。Response Code 是响应码 (例如200)。Response Message 是响应消息(例如OK)。Response Headers 是响应头。Request Headers 指的是请求头。Request Data指的是请求的所有数据作为文本(请求体)。URL sampled 是采样的 URL。Document 指的是 View Results Tree 组件的 Document 部分一样的以特定规则提取出的文档。
Ignore status 忽略响应的状态码。一般 4xx 和 5xx 是默认认为是失败的。如果不设置,总的 sample 的结果是由状态码的成功失败和断言的结果的结合。如果设置了,就会设置状态为成功,再进行断言(注意:如果设置了这个参数,要把这个断言放在第一个,否则会清除前面的断言的失败结果)
Pattern Matching Rules 对于给定的模式串,使用怎样的规则。Contains 包含模式串 (模式串被看作正则表达式)。Matches 表示正则匹配的 match (模式串被看作正则表达式)。Equals 表示相等(大小写敏感,模式串被看作纯文本)。Substring 表示被测文本包含给定的模式串 (模式串被看作纯文本)。两种逻辑符号: Not 和 Or 。Not 表示对结果取反。 Or 表示匹配规则对于给定的一系列模式串成立一个那断言就是 OK 的。
Patterns to Test 用来测试的模式串列表。可以点击 Add 按钮添加多个模式串。如果是正则表达式则是 Perl5-style 的正则表达式且没有封闭的括号的形式。

JSON变量提取

右键单击请求,Add – Post Processors – Json Extractor 添加 JSON 提取器元素

JSON 提取器可以用于从响应体中的 JSON 结构中提取指定位置的属性为变量。

组件参数说明:

参数名称 取值及含义
Name 展示用的描述性的名字
Names of created variables 创建的变量的一个或多个名称(多个以逗号分隔),数量要对应 JSON Path 表达式
JSON Path Expressions 一个或多个 JSON path 表达式 (多个以逗号分隔),数量和变量数目要匹配。(表达式的写法参考下文)
Default Values 一个和多个默认值(多个以逗号分隔)。如果某个 JSON path 表达式没有返回值就用对应位置的默认值。数量和变量数一致
Match No. (0 for Random) 如果 JSON path 表达式可以取得多个值,该取哪个。0 表示随机;-1 表示提取所有的结果(会生成多个变量,名为 _N,N从1开始);X表示提取指定位置的结果,从1开始,如果X大于结果的数量,则返回空(会尝试使用默认值)
Compute concatenation var 如果勾选,表示如果有多个结果得到,会将他们逗号分隔,放入名为 _ALL 的变量

JSON path 写法: $ 符号表示根元素,. 表示取属性,[0] 表示取数组对象的第一个元素 ( [1]就是第二个)。

例如:

{
    "user": {
        "names": ["Jack", "Jacky"],
        "age": 10
    }
}

对于以上 JSON ,使用表达式 $.user.names[0] 即可提取出 Jack 这个值。 更详细的信息可以参考: https://jsonpath.com/

查看结果树元素

这个元素是用于使用 JMeter 界面进行请求执行时查看请求的执行情况的,他可以查看到请求的请求报文和响应报文以及断言情况等信息。详情参考下文。

JMeter使用示例

接下来,我们使用上面学到的知识,实现这么一个场景:查询 Gitee 上猪齿鱼仓库下的贡献者, 然后提取出指定的一个贡献者名称,用第二个请求获取贡献者的信息。

使用的 Gitee 的两个接口为

  • GET https://gitee.com/open-hand/choerodon/contributors_count?ref=0.23.0

响应体结构为(我们需要获取的贡献者名称的 JSON path 为 $.contributors[0].username):

{
    "status": 1,
    "contributors_count": "16",
    "contributors": [
        {
            "username": "example1"
        }
    ]
}
  • GET https://gitee.com/{贡献者名称}

创建测试计划

打开 Jmeter 会有个默认的测试计划

创建线程组

右键鼠标单击测试计划,点击 Add > Threads (Users) > Thread Group 添加线程组元素。其中填入以下值:

创建 HTTP 默认值配置元素

鼠标右键单击线程组,Add > Config Element > Http Request Defaults 添加配置元素。填入值如下:

创建 HTTP 采样器获取贡献者列表

右键单击线程组,Add > Sampler > HTTP Request 添加采样器(填入path和添加一个parameter):

添加响应提取器

右键单击请求采样器,Add > Post Processors > JSON extractor 添加元素如下,因为某些用户在 gitee 并不存在,这里我们将提取 JSON path 为 $.contributors[4].username (也就是第五个贡献者)的用户名值放入变量 contributorName

添加查看结果树元素到请求下

右键单击采样器,Add > Listener > View Results Tree 添加查看结果树如下:

添加 HTTP 采样器请求特定的贡献者信息

右键单击线程组,Add > Sampler > HTTP Request 添加采样器(这里在 path 属性填入 ${contributorName} 用于引用上一个请求提取出的变量):

添加查看结果树元素到请求下

右键单击采样器,Add > Listener > View Results Tree 添加查看结果树如下:

点击绿色三角形进行执行

点击执行按钮后,会提示我们先将文件保存后再执行,选择一个合适的目录保存后,点击执行按钮,此时绿色的执行按钮会变成灰色,同时右上角会开始计时,这表明请求正在执行,等按钮再次变成绿色时,说明执行结束了。

查看执行结果

点击第一个请求的 查看结果树 元素可以查看这个请求的执行结果:

可以看到响应体的信息为:

查看第二个请求的请求数据,可以看到请求成功,且可以看到请求路径的 ${contributorName} 已经渲染为第一个请求提取到的值 handchoerodon

总结

JMeter 提供了 HTTP 采样器,各种断言机制,配置机制以及变量提取机制,可以帮助进行我们模块化的接口测试,使得系统更加健壮。

扩展资料

  1. JMeter Get Started
  2. JMeter组件说明

作者:郑膜坊

出处:Choerodon

欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。