Jmeter快速上手之接口测试

2023-11-10

目录

1、前言

2、简介

3、安装

4、环境变量 

4.1、Windows环境 

4.2、Mac环境 

5、启动程序 

6、目录说明 

7、操作示例 

7.1、Get请求 

7.2、Post请求 

7.3、依赖请求 


1、前言

压测工具 Jmeter 除了可以做性能测试,还可以做接口测试。当接口测试趋向于自动化方向时,就可以使用很典型的接口自动化测试框架 Jmeter + Ant + Jenkins。

本篇将讲解如何快速使用Jmeter来进行接口测试。

2、简介

Jmeter 是 Apache 组织开发的基于 Java 的压力测试工具。用于对软件做压力测试,它最初被设计用于 Web 应用测试,但后来扩展到其他测试领域。

它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器等等。

Jmeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,Jmeter 能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,Jmeter 允许使用正则表达式创建断言。

官网地址:

https://jmeter.apache.org/

3、安装

官网下载地址:

https://jmeter.apache.org/download_jmeter.cgi

下载解压包版本即可。

注意:需要Java 8+ (JDK 1.8+)以上的支持。

关于 JDK 的安装与配置,可点击 Java-安装 文章进行查阅。

例如本次讲解系统所带的JDK版本为1.8.0_261。

例如下载apache-jmeter-5.4.1.zip

下载完成后,解压到自己指定的路径里即可。

例如:

Windows系统,解压到C盘根目录下。

路径为C:\apache-jmeter-5.4.1

Mac系统,解压到/Users/wangmeng目录下。

路径为/Users/wangmeng/apache-jmeter-5.4.1

4、环境变量 

4.1、Windows环境 

【我的电脑】右键 ---> 属性 ---> 高级系统设置 ---> 环境变量 ---> 系统变量

新建 JMETER_HOME 值为 C:\apache-jmeter-5.4.1

编辑 CLASSPATH 的变量(如果没有则新建),值为

%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar

编辑 PATH 新增值为 %JMETER_HOME%\bin

保存后,以管理员身份打开命令行,输入jmeter -v

环境变量配置成功

4.2、Mac环境 

打开终端,编辑 .bash_profile 文件。

vim .bash_profile

添加以下配置:

export JMETER_HOME=/Users/wangmeng/apache-jmeter-5.4.1
export PATH=${PATH}:$JMETER_HOME/bin
export CLASSPATH=:$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar

保存退出,使 .bash_profile 文件内容生效。

source ~/.bash_profile

重新打开终端,输入jmeter -v

环境变量配置成功

5、启动程序 

1、打开命令行或终端输入jmeter,即可启动程序(前提已配置成功环境变量)。

2、或者打开Jmeter\bin目录下的应用程序来进行启动。

Windows系统,双击jmeter.bat即可。

Mac系统,双击jmeter即可。

6、目录说明 

  • backups:备份目录,是将自己的 jmx 脚本进行备份,每次保存都会将该脚本保存到该目录下,保存多次便会保存多个同样的文件,文件名进行默认递增更改。

  • bin:包含启动、配置等相关命令。

  • bin\jmeter.properties:核心配置文件,各种配置基本在这完成。

  • docs:官方接口文档。

  • extras:辅助库。

  • lib:存放各种 Jmeter 核心库的源码 jar 包,存放自己二次开发的 jar 包。

  • lib\ext:官方提供的第三方插件。

  • LICENSE:许可说明。

  • licenses:许可证等。

  • NOTICE:简单信息说明。

  • printable_docs:离线的帮助文档,可以查看函数等内容。

  • README.md:官方基本介绍。

7、操作示例 

本篇模拟接口请求链接使用 moco 生成。

关于 moco 的部署与使用等,可点击 moco 系列章节进行查阅。

1、添加线程组

【测试计划】右键 ---> Add ---> Threads(Users) ---> Thread Group

2、设置线程数(并发用户数)与循环次数

本篇为接口测试讲解,模拟一个用户进行一次接口请求,所以用户数和循环次数均为1即可。

7.1、Get请求 

接口请求地址:http://localhost:8083/getdemo

如图所示:先使用Postman,访问此接口。

GET请求,2个参数username、password

返回数据为“操作成功”

1、添加HTTP请求

【线程组】右键 ---> Add ---> Sampler ---> HTTP Request

填写相关配置信息。

方式一:

  • 接口名称:demo01

  • 协议:http

  • 服务器名称或IP:localhost

  • 端口号:8083

  • 方法:GET

  • 路径:/getdemo

  • 内容编码:utf-8

  • Parameters:填写对应的参数名与参数值

方式二:

  • 接口名称:demo01

  • 协议:http

  • 服务器名称或IP:localhost

  • 端口号:8083

  • 方法:GET

  • 路径:/getdemo?username=admin&password=123456

  • 内容编码:utf-8

2、添加响应断言

【demo01】右键 ---> Add ---> Assertions ---> Response Assertion

输入断言匹配的内容。

根据示例接口,返回的文本内容若等于“操作成功”,则就算是Pass

3、添加断言结果

【demo01】右键 ---> Add ---> Listener ---> Assertion Results

4、添加查看结果树

【demo01】右键 ---> Add ---> Listener ---> View Results Tree

5、运行脚本

运行方式一:【线程组】右键 ---> Start

运行方式二:点击运行按钮即可。

6、运行结果

查看断言结果,验证通过,Pass

查看结果树,可查看请求与响应数据,验证通过,Pass

7.2、Post请求 

接口请求地址:http://localhost:8083/postdemo

如图所示:先使用Postman,访问此接口。

POST请求,2个参数username、password

返回数据为“操作成功”

1、添加HTTP请求

【线程组】右键 ---> Add ---> Sampler ---> HTTP Request

填写相关配置信息。

  • 接口名称:demo02

  • 协议:http

  • 服务器名称或IP:localhost

  • 端口号:8083

  • 方法:POST

  • 路径:/postdemo

  • 内容编码:utf-8

  • Parameters:填写对应的参数名与参数值

2、添加响应断言

【demo02】右键 ---> Add ---> Assertions ---> Response Assertion

输入断言匹配的内容。

根据示例接口,返回的文本内容若等于“操作成功”,则就算是Pass

3、添加断言结果

【demo02】右键 ---> Add ---> Listener ---> Assertion Results

4、添加查看结果树

【demo02】右键 ---> Add ---> Listener ---> View Results Tree

5、运行脚本

运行方式一:【线程组】右键 ---> Start

运行方式二:点击运行按钮即可。 

6、运行结果

查看断言结果,验证通过,Pass

查看结果树,可查看请求与响应数据,验证通过,Pass 

7.3、依赖请求 

有两个接口,接口1执行后返回的数据里有接口2需要用到的请求参数,则执行接口2时,要先执行接口1获取返回的指定数据。

接口1请求地址:http://localhost:8083/demo?aaa=123&bbb=456&ccc=789

如图所示:先使用Postman,访问此接口。

GET请求,3个参数aaa、bbb、ccc

返回json数据为:

{

    "mystatus": "操作成功",

    "mytoken": "eyJhbGciOiJIUzI1NiJ9"

}

接口2请求地址:http://localhost:8083/demo2

如图所示:先使用Postman,访问此接口。

POST请求,请求头有2个参数Content-Type、mytoken

返回json数据为:

{

    "mystatus": "操作成功",

    "mystatusid": "1"

}

发送的json串。

1、添加用户参数

接口1和接口2都有参数ccc,且值都是789,可以设置为公共用户变量,方便统一提取。

【线程组】右键 ---> Add ---> Pre Processors ---> User Parameters

填写参数ccc与参数值789 

2、添加HTTP请求(接口1)

【线程组】右键 ---> Add ---> Sampler ---> HTTP Request

填写相关配置信息。

  • 接口名称:demo03-1

  • 协议:http

  • 服务器名称或IP:localhost

  • 端口号:8083

  • 方法:GET

  • 路径:/demo

  • 内容编码:utf-8

  • Parameters:填写对应的参数名与参数值,${ccc}为引用用户参数ccc的值。

(1)添加响应断言

【demo03-1】右键 ---> Add ---> Assertions ---> Response Assertion

输入断言匹配的内容。

根据示例接口1,返回的文本内容若包括所指定的“操作成功”,则就算是Pass

(2)添加断言结果

【demo03-1】右键 ---> Add ---> Listener ---> Assertion Results

(3)添加查看结果树

【demo03-1】右键 ---> Add ---> Listener ---> View Results Tree

(4)添加正则表达式提取器

用于提取接口1返回的指定数据,接口2会调用此数据。

【demo03-1】右键 ---> Add ---> Post Processors ---> Regular Expression Extractor

填写相关正则表达式信息。

  • 引用名称:其他地方引用时的变量名称,这里定义为 my_token,引用方法:${引用名称}

  • 正则表达式:数据提取器,()括号里为要获取的值。"mytoken":"( 相当于LR的左边界, )" 相当于LR的右边界。而括号里 .*? 为正则表达式,"mytoken":"(.*?)" 匹配最短的,以 "mytoken":" 开始,以 " 结束的字符串。

  • 模板:用于从找到的匹配项创建字符串的模板。这是一个带有特殊元素的任意字符串,用于引用正则表达式中的组。引用组的语法是:11引用组1,22引用组2,等等。00引用整个表达式匹配的内容。

  • 匹配数字:正则表达式匹配数据的所有结果可以看做一个数组,匹配数字即可看做是数组的第几个元素。-1表示全部,0随机,1第一个,2第二个,以此类推。若只要获取到匹配的第一个值,则填写1

  • 缺省值:匹配失败时的默认值。

(5)添加调试后处理器

方便在调试脚本时实时查看是否正确的提取到了所要的信息。

【demo03-1】右键 ---> Add ---> Post Processors ---> Debug PostProcessor

3、添加HTTP头管理器(接口2)

接口2有请求头信息要进行设置,所以要添加HTTP头管理器。

【线程组】右键 ---> Add ---> Config Element ---> HTTP Header Manager

填写相关配置信息。

${my_token}为引用正则表达式my_token提取接口1返回的指定值。

4、添加HTTP请求(接口2)

【线程组】右键 ---> Add ---> Sampler ---> HTTP Request

填写相关配置信息。

  • 接口名称:demo03-2

  • 协议:http

  • 服务器名称或IP:localhost

  • 端口号:8083

  • 方法:POST

  • 路径:/demo2

  • 内容编码:utf-8

  • Body Data:填写对应的键值,${ccc}为引用用户参数ccc的值。

        {

            "id":"1",

            "username":"test",

            "password":"123456",

            "ccc":"${ccc}"

        }

(1)添加响应断言

【demo03-2】右键 ---> Add ---> Assertions ---> Response Assertion

输入断言匹配的内容。

根据示例接口2,返回的文本内容若包括所指定的“操作成功”,则就算是Pass

(2)添加断言结果

【demo03-2】右键 ---> Add ---> Listener ---> Assertion Results

(3)添加查看结果树

【demo03-2】右键 ---> Add ---> Listener ---> View Results Tree

5、运行脚本

运行方式一:【线程组】右键 ---> Start

运行方式二:点击运行按钮即可。 

6、运行结果

接口1,查看断言结果,验证通过,Pass

接口1,查看结果树,可查看请求与响应数据,验证通过,Pass 

接口1,查看结果树,正则表达式所提取接口1的返回数据 

接口2,查看断言结果,验证通过,Pass 

接口2,查看结果树,可查看请求与响应数据,验证通过,Pass 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jmeter快速上手之接口测试 的相关文章

  • JMeter(活动?)FTP 到 VLTrader

    情况 我正在使用 JMeter 来加载测试我的通信应用程序 Cleo VLTrader 我是 JMeter 的新手 并且能够使 HTTP 通信工作 但不能使 FTP 工作 当我尝试使用 JMeter FTP 请求采样器时 我可以在服务器端看
  • 使用extentreports获取jmeter测试结果

    对于任何使用 jmeter 进行 api 功能测试的人来说 报告并不是那么好 有没有人用过类似的东西http extentreports com http extentreports com 显示他们的测试结果 关于更好地显示测试结果的其他
  • Jmeter:jmeter中jmeter.sh和jmeter无扩展文件的区别

    我需要澄清 jmeter sh 和 jmeter 文件 不带 ext 它们位于 bin 文件夹中 举例来说 1 如果我在jmeter和jmeter sh文件中设置不同的HEAP大小 将考虑哪一个 2 以上是否取决于我如何运行测试 例如 jm
  • Jmeter - 如何向计数器添加前缀。类似于随机变量

    目前 在随机变量中 我可以在变量的输出格式中添加前缀或后缀 然而 这个很好的功能不适用于简单的计数器控制器 每次使用变量时连接 string counter 对我来说并不是一个好的选择 因为我经常这样做 有没有办法以随机变量的方式实现前缀
  • Apache JMeter 的 Cookie 管理器未将 cookie 添加到 POST 请求

    我制定了非常简单的测试计划 登录 POST 返回会话cookie 获取状态 GET 返回用户状态 创建资源 POST 为资源提供 JSON 正文 所以我的 测试计划 如下所示 Test Plan Thread Group HTTP 请求默认
  • 如何让Jmeter使用CSV数据作为GET参数?

    我想在 JMETER 中实现以下目标 Jmeter加载带有id号的CSV文件 Jmeter 中的每个用户 线程都会选择一个 id 号并将其添加到其 HTTP 请求中 例如http www testsite com test php id x
  • Jmeter中的“延迟时间”与“连接时间”有什么区别?

    我是jmeter 3 1用户 我不清楚 延迟时间 与 连接时间 的区别 事实上 在jmeter官方文档中 是这样说的 新的连接时间指标 connectTime 表示建立连接的时间 默认情况下 它不会保存到 CSV 或 XML 要保存它 请添
  • 使用参数作为用户定义变量?

    我们在非 GUI 模式下运行测试 并传入各种参数 如服务器 端口 线程等 我们还希望在 GUI 模式下运行测试 并能够在 GUI 中更改这些参数 我想做的是使用 2 个用户定义的变量对象 其中一个包含我们可以编辑的静态数据 另一个包含参数
  • Rest 服务器(Play Framework)在负载测试期间出现“Read Timed out”异常

    我们正在使用 Play Framework 在 REST 服务器上运行重负载测试 jmeter 350 个线程 35M 总请求 并在大约 2 小时后遇到以下错误 我们删除了其他组件 以便 request 只是接受请求而不执行任何操作 任何人
  • 如何设置http请求的源IP?

    在发送 http 请求之前 我需要设置源 IP 地址 用于 IP 欺骗等 用于建立http连接的类是HTTPURLConnection 我在 stackoverflow 上找到了下面的链接 这非常有用 注册和使用自定义 java net U
  • Jmeter 下降的最佳方法?

    我们都知道 Jmeter 并不是最擅长在运行期间更改活动线程的数量 除非您喜欢并创建以不同时间间隔触发的单独线程组 有没有人想出一个好的解决方案来在测试结束时降低速度 例如 我从 50 个线程开始 在 30 分钟内我想要 0 个活动线程 查
  • 使 .jmx 文件在 Windows 10 上使用 jmeter GUI 默认打开(双击文件)

    当我双击它时 我试图让我的 Windows 10 使用 jmeter GUI 打开 jmx 文件 我使用 apache jmeter 3 2 目前 为了打开 jmx 文件 我打开 jmeter jar apache jmeter 3 2 b
  • 如何让Jmeter识别“localhost”URL?

    如何对只能由我的计算机访问的 localhost url 进行性能测试 我可以使用 jmeter 对 google 等实时网站进行性能测试 但 jmeter 无法检测本地 url 应用程序的 URL 192 168 121 20 80012
  • 分布式模式下的 JMeter 摘要报告

    我正在分布式模式 2个从站 主站 下运行Jmeter性能测试 在我的测试脚本中我配置了摘要 报告应将一些数据保存到 csv 文件 此文件位置配置有固定名称 reports summary csv 值 当我从主站成功连接到两个从站时 测试在从
  • 在 JMeter 中,“将响应保存到文件”中,如何在将自定义后缀附加到文件名末尾的同时增加文件名

    在 JMeter 中 当使用 将响应保存到文件 来存储 http 响应时 如何在将自定义后缀附加到文件名末尾的同时增加文件名 这是我的场景 使用记录控制器和 HTTP S 测试脚本记录器记录文件转换和从网站下载的 http 流量 然后 我将
  • 使用 SOAP 调用 WCF 服务

    我正在尝试在不创建 WCF 客户端的情况下测试 WCF 服务 我有类似的代码 问题here https stackoverflow com a 1643025 1397017 我希望完全控制 SOAP 负载 因此我希望能够发出我自己的 We
  • JMeter 负载服务器会影响我的结果吗?

    我正在使用亚马逊 EC2 实例 大型 作为使用 1 000 个线程的负载服务器来运行 JMeter 测试 负载服务器CPU利用率稳定在90 左右 内存利用率稳定在70 是否存在关于负载服务器在什么时候没有足够资源 内存或 CPU 而导致负载
  • JMeter 中的 JSON 路径提取器

    我是 jmeter 的新手 任何人都可以帮助我使用一个请求的响应对象作为下一个 HTTP 请求的请求标头传递吗 让我解释 我正在获取访问令牌以及应用程序中登录的响应 responseCode 18 message 登录成功 response
  • Jmeter 线程真的接近用户吗?

    我正在尝试使用记录控制器设置 JMeter 负载测试 这会导致 Web 浏览器进行的所有调用重复 包括 css 文件 js 文件和图像 假定 Web 浏览器会同时获取这些内容 同时执行大约 10 个 Web 请求 jmeter 文档倾向于将
  • 如何在 Windows 中增加 JVM 运行时内存

    我正在尝试通过命令行运行脚本 因为我正在使用以下命令 C apache jmeter 4 0 apache jmeter 4 0 bin gt jmeter f n t C apache jmeter 4 0 apache jmeter 4

随机推荐

  • 异步调用的四种方法

    异步调用的四种方法 我们都知道普通方法运行是单线程的 如果中途有大型操作都会导致方法阻塞 表现在界面上就是 程序卡或者死掉 界面元素不动了 不响应了 C 异步调用是很好的解决方法 异步执行某个方法 程序立即开辟一个新线程去运行你的方法 主线
  • 【ES6】var、let、const三者的区别

    首先 一个常见的问题是 ECMAScript 和 JavaScript 到底是什么关系 ECMAScript是一个国际通过的标准化脚本语言 JavaScript由ECMAScript和DOM BOM三者组成 可以简单理解为 ECMAScri
  • Java反射机制及Method.invoke详解

    这篇文章主要介绍了Java反射机制及Method invoke详解 本文讲解了JAVA反射机制 得到某个对象的属性 得到某个类的静态属性 执行某对象的方法 执行某个类的静态方法等内容 需要的朋友可以参考下 JAVA反射机制 JAVA反射机制
  • hackthebox的网站使用教程

    Google浏览器下载 下载url https www google cn chrome hackthebox网站 网站url https www hackthebox com home 获取验证码注册教程 网站url https blog
  • 运用打分和Boost优化Elasticsearch搜索结果

    来自Optimizing Search Results in Elasticsearch with Scoring and Boosting 作者 Neil Alex 2015 03 18 虽然es提供了高效的打分函数 但是在电商环境下还是
  • python趣味编程-扫雷游戏

    在上一期我们用Python实现了一个弹跳球的游戏 这一期我们继续使用Python实现一个简单的弹跳球游戏 让我们开始今天的旅程吧 Python中的扫雷游戏GUI免费源代码 这 Python中的扫雷游戏GUI免费源代码 是一个以 python
  • UE4 List View 在蓝图中的使用

    在使用中遇到的问题 蓝图中调用userListEntry 接口的IsListItemSelected IsListItemExpanded GetOwningListView 函数 均会崩溃 一 创建用作item显示的 控件蓝图 命名为 l
  • redis-cli 利用管道批量导入MySQL数据到Redis

    前言 因为公司业务的需要 需要快速的将mysql的中的数据查询导入到redis中 程序遍历MySQL然后插入Redis 效率极低 利用redis cli命令行工具有一个批量插入模式 是专门为批量执行命令设计的 可以把Mysql查询的内容格式
  • JS操作字符串方法学习系列(1)-每天学习10个方法

    目录 字符串连接 Concatenation 字符串长度 Length 字符串查找 Search 字符串替换 Replace 字符串分割 Split 字符串大小写转换 Case Conversion 字符串切片 Slice 字符串删除空白
  • 校园二手市场交易平台(JAVA,SSM,BOOTSTRAP,JSP,AJAX,MYSQL)

    今天 我们发布一套 校园二手市场交易 系统使用技术包含JAVA SSM BOOTSTRAP JSP AJAX MYSQL 这套系统后台框架使用SSM 前台框架为BOOTSTRAP 数据库使用MySql 这套系统包含完整的源代码和数据库脚本
  • 如何通过使用 SQL Server 中的 Detach 和 Attach 函数将 SQL Server 数据库移到新位置(转载)

    载自http support microsoft com kb 224071 zh cn 如何通过使用 SQL Server 中的 Detach 和 Attach 函数将 SQL Server 数据库移到新位置 参考概要本文描述如何更改任何
  • Element的message消息提示每次只出现一个

    使用element的message消息提示框有时出现这种重复弹出情况 解决办法 if document getElementsByClassName el message length 0 也就是当前没有提示弹窗 that message
  • 汽车变排量空调压缩机的工作原理

    不同于定排量压缩机 fixed displacement compressor FDC 变排量压缩机 variable displacement compressor VDC 可自动改变其泵送能力以满足空调的需求 当车厢温度高时 它会提高其
  • 《Perl语言入门》读书笔记(四)子程序

    1 子程序 1 1 定义子程序 使用关键字sub开头 在写上子程序名 字母 数字和下划线组成 不能以数字开头 大括号框柱子程序主体 子程序可以定义在文件的任意位置 为了方便代码阅读 一般建议放在开头或结尾处 sub marine n 1 全
  • WebSocket的使用指南---前端

    1 WebSocket概述 WebSocket 是 HTML5 开始提供的一种浏览器与服务器间进行全双工通讯的网络技术 WebSocket 通信协议于2011年被IETF定为标准RFC 6455 WebSocketAPI 被 W3C 定为标
  • String

    String是一个对象 不是基本数据类型 String的特点 字符串对象一旦初始化 便不能被修改 改变的只是引用型变量的指向 例如 String str abc String str ert abc 依然存在 只是str的指向变了 Stri
  • Mysql系列 - 第4天:DDL常见操作汇总

    这是Mysql系列第4篇 环境 mysql5 7 25 cmd命令中进行演示 DDL Data Define Language数据定义语言 主要用来对数据库 表进行一些管理操作 如 建库 删库 建表 修改表 删除表 对列的增删改等等 文中涉
  • 机器学习中的特征变量及处理总结

    文章目录 1 定性特征变量 1 1 定类变量处理 1 2 定序变量处理 2 定量特征变量 3 总结 牢记一句话 数据和特征决定了机器学习的上限 而模型和算法只是逼近这个上限而已 机器学习的根本目标 就是用数据的特征变量去对目标变量进行预测
  • Github 榜首!B 站疯传!程序员思维导图 48 张!!!

    介绍在下面 整个内容包括 程序员史上最强编程思维导图 48 张 800 份求职简历模板 我写的 图解算法小册 解析 150 道高频算法面试题目 25k star Github 榜首项目 资料获取地址 无套路 直接可以下载 Github 榜首
  • Jmeter快速上手之接口测试

    目录 1 前言 2 简介 3 安装 4 环境变量 4 1 Windows环境 4 2 Mac环境 5 启动程序 6 目录说明 7 操作示例 7 1 Get请求 7 2 Post请求 7 3 依赖请求 1 前言 压测工具 Jmeter 除了可