JMeter - 如何测试REST API / 微服务

news2024/11/24 2:24:03

概述:

有许多方法和工具可用于测试REST API。
当我需要测试REST API时,在查看了各种工具和选项之后,由于以下原因,我选择了JMeter。

  • JMeter是免费和开源的。

  • JMeter可以从CSV文件中直接读取您的测试数据。参数化非常简单。

    • 可以轻松地使用多组数据测试API。

  • JMeter有一个功能强大的“ 响应提取器” -可用于从API响应中提取信息(JSON / XML /正则表达式),并在测试的后续请求中使用它。

  • JMeter有大量的“ 断言 ” - 来验证API响应是否符合预期。

  • 我们为功能测试创建的JMeter测试也可用于性能测试。

  • ANT / Maven / Gradle插件作为构建的一部分执行测试。

  • 与Jenkins轻松集成以定期运行测试,Jenkins有一个JMeter插件来解析结果文件并显示漂亮的图表。


安装JMeter:

启动JMeter后,您将看到Test Plan  元素,它是JMeter测试的根节点,我们将在其中为测试添加各种JMeter元素。

创建一个简单的API JMeter测试:

现在让我们为测试添加所需的元素。

  • 在测试计划下添加一个线程组。(右键单击测试计划 - >添加 - >线程(用户) - >线程组)

    • 我们更新了线程组中的用户数,迭代次数等。

    • 现在让他们成为1。

  • 线程组下添加HTTP请求采样器。(右键 单击线程组 - >添加 - >采样器 - > HTTP请求)

    • Sampler是一种JMeter请求。

    • REST是一种方法,它使用HTTP协议。所以我们添加HTTP Request采样器。

    • 将服务器IP /主机名更新为  myapiservername.com [对于此API网址:http:  //myapiservername.com/rest/api/path ]

    • 更新API路径  / rest / api / path

图片

  • 使用请求发送文件   - 应该具有请求JSON文件的路径,或者在HTTP请求正文数据部分 中包含请求JSON 

  • 添加  HTTP标头管理器   (右键单击测试计划 - >添加 - >配置元素 - > HTTP标头管理器

    • 名称= apigeekey

    • 值=测试@ 123

    • 名称=的Content-Type

    • 值=应用/ JSON

    • 在HTTP Header Manner配置页面中,单击“添加”。

    • 包括此名称 - 值对。

    • 如果您的API需要APIGEE密钥,请将其包含在此处或忽略。

图片

  • 添加  HTTP授权管理器 -在任何身份验证的情况下都是必需的。 (右键单击测试计划 - >添加 - >配置元素 - > HTTP授权管理器

    • 将基本URL更新为  http://myapiservername.com

    • 更新用户名

    • 更新密码

  • 在“测试计划”下,添加一个侦听器 - “  查看结果树”

您的JMeter测试将如下所示(我没有包括监听器)。

图片

现在如果你运行它,你应该能够发送请求并成功获得响应。

注意:如果由于某种原因它不起作用,请尝试将HTTP请求实现更改为Java /其他值并尝试一下。

图片

无论我们到目前为止做了什么,都是一个非常简单的测试 - 就像POC一样。现在让我们看看如何进一步改进它。

参数化测试数据:

在上面的示例中,我们发送硬编码请求JSON来测试API。我们可能必须针对不同的数据集测试API。

让我们举一个非常简单的例子,我有一个API,它给出了我发送的图书ID请求的图书名称和价格详细信息。

CSV中的测试数据:

图片

请求JSON:

让我们假设我们的API请求采用以下格式。

{
    "bookid": 1
}

复制

响应JSON:

让我们假设我们的API响应如下所示。

{
    "bookname": "Awesome Jmeter"
    "bookprice": 23.5
}

图片

在测试计划下添加CSV数据集配置并更新上面给出的详细信息。

  • 变量名称:可以为空。JMeter将CSV列名称作为变量名称。

  • 回收EOF?:应该是假的。我们只测试每一行一次。

  • 在EOF上停止线程?:应该是TRUE。一旦我们测试了所有行,它将自动停止JMeter测试。

  • 在“线程组”中,选中“循环计数”中的“For Ever”复选框。

参数:

我们不是发送硬编码的书籍ID,而是使用CSV文件的“id”列中的值对其进行参数化。

图片

而已。如果您现在运行测试,它应该为CSV文件中的每一行逐个发送6个请求。

我们可以做得比这更好 - 如果有不同类型的请求 - GET / POST / DELETE / PUT / PATCH等等。使用JMeter非常容易。我完全通过电子表格驱动我的测试,如下所示。请在此处查看JMeter - REST API - 数据驱动测试的高级用法

图片

断言:

如果我们可以发送请求并获得响应,那么我们完成了吗?不!!但是,我们几乎就在那里!

我们需要验证我们是否得到了预期的响应。因此,最后一步是添加断言。

我在上面的示例中显示的CSV文件中有预期的书名和价格详细信息。让我们使用这些细节来检查我们的API是否按预期工作。

在HTTP Request下添加Response Assertion ,如下所示。我们需要验证响应中是否有预期的图书名称和价格。按下面的说明添加它们。

图片

此断言将验证响应并相应地通过/失败测试。(确保模式匹配规则是'包含',因为我们只检查书名和价格。我们没有验证整个响应。)

持续时间断言:

JMeter不仅验证文本,还验证请求的“ 时间 ”。如果我们添加“持续时间断言”并设置可接受的时间限制,JMeter可以确认是否在时间限制内收到了响应。

图片

从JSON响应中提取数据:

有时,您可能希望从JSON响应中提取特定数据,并将此数据传递给JMeter中的后续请求。JMeter提供了一个JSON Extractor来从JSON响应中提取特定值。

让我们假设,我的样本响应看起来像这样。

{
   "title":"In Search of Lost Time",
   "author":"Marcel Proust",
   "id":1
}

复制

我可以添加一个JSON Extractor,如下所示,将作者的值提取到变量authorValue中。

图片

  • $指的是JSON Path表达式中的根元素

  • 'author'是根元素的直接子元素。所以可以使用$ .author访问它

  • 匹配编号给出第N个匹配。如果您想要数组中的所有匹配值,则匹配数字应为-1

  • 默认值 - 在没有匹配时使用

让我们考虑下面的JSON响应

{
   "store":{
      "book":[
         {
            "category":"reference",
            "author":"Nigel Rees",
            "title":"Sayings of the Century",
            "price":8.95
         },
         {
            "category":"fiction",
            "author":"Evelyn Waugh",
            "title":"Sword of Honour",
            "price":12.99
         }
      ],
      "bicycle":{
         "color":"red",
         "price":19.95
      }
   }
}

复制

  • 要获得第一本书的价格 -  $ .store.book [1] .price

  • 从类别获得所有价格 - $ ..价格

有关这方面的更多信息,请点击此处。

REST API的性能测试:

您可能已经验证了API功能!

但是,我们如何知道有关API的以下信息?

  • 响应时间

  • 它可以支持的并发用户

  • 用户负载中断

  • CPU /内存使用情况

  • 内存泄漏

通过使用我们刚刚创建的相同测试,JMeter也可以在这里提供帮助!

  • 更新线程组中的线程数。如果输入10作为用户数并运行,JMeter将模拟10个并发用户。

  • 更新加速期(以秒为单位)。例如:如果您有10个用户和50秒作为加速期,JMeter将每5秒开始创建1个虚拟用户。

  • 循环计数:选择“永远”。

  • 在Scheduler下,输入Duration(秒)。[输入600将对10个虚拟用户进行10分钟的性能测试。]

  • 更新CSV数据集配置:'回收EOF?' - 将其设置为TRUE - [FALSE仅读取一次CSV数据。我们需要足够的数据让VUsers运行10分钟。因此,将其设置为TRUE将在读取后提供相同的测试数据集]

  • 在测试计划下添加“聚合报告”监听器。

立即运行您的仪表测试。“聚合报告”将基本了解您的REST API性能指标,例如在给定持续时间内发出的请求数,平均响应时间,吞吐量,“90%行”等。[注意:运行JMeter性能不是一个好习惯我们刚刚在GUI模式下测试,因为它消耗更多内存。请查看此提示和技巧 ,了解要遵循的最佳做法。]

摘要:

我们刚刚创建了一个简单的数据驱动框架,用于在不使用任何编程语言的情况下使用JMeter测试REST API的功能行为。 我们还看到了如何通过重用为功能测试创建的相同脚本,使用JMeter对我们的API进行性能测试。

您可能希望继续阅读有关JMeter - REST API - 数据驱动测试的高级用法的更多信息

你是JMeter的新手吗?- 然后你应该完全检查这篇文章,它提供了有关JMeter最佳实践和初学者常见错误的更多信息。

Response Assertion can also compare the response code.
But, We will have more control over Beanshell Assertion.

To check the HTTP response code (assuming you have stored the expected response code in CSV in ‘resCode’ column),

图片

if (ResponseCode.equals(vars.get("resCode")) == true && ResponseData.contains(vars.get("expectedMessage")) == true ) {
SampleResult.setResponseOK();
}else{
Failure=true;
FailureMessage="Response code/data not as expected";
}

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1647906.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SWIFT框架的Phi-3推理、微调实战教程

近期, Microsoft 推出 Phi-3,这是 Microsoft 开发的一系列开放式 AI 模型。Phi-3 模型是一个功能强大、成本效益高的小语言模型 (SLM),在各种语言、推理、编码和数学基准测试中,在同级别参数模型中性能表现优秀。为开发者构建生成…

零基础自学网络安全/Web安全(超详细入门到进阶)学完即可就业(含学习笔记)

一、为什么选择网络安全? 这几年随着我国《国家网络空间安全战略》《网络安全法》《网络安全等级保护2.0》等一系列政策/法规/标准的持续落地,网络安全行业地位、薪资随之水涨船高。 未来3-5年,是安全行业的黄金发展期,提前踏入…

ICode国际青少年编程竞赛- Python-1级训练场-变量练习

ICode国际青少年编程竞赛- Python-1级训练场-变量练习 1、 a 8 for i in range(8):Dev.step(a)Dev.turnRight()a - 12、 a 3 for i in range(4):Dev.step(a)Dev.turnRight()a a 1 Dev.step(5)3、 a 4 for i in range(4):Dev.step(2)Dev.step(-5)Dev.step(3)Spaceship.…

一次性邮箱API发送邮件的方法?如何配置?

一次性邮箱API发送邮件有哪些注意事项?怎么安全发信? 随着网络安全问题的日益凸显,如何安全、高效地发送邮件成为了一个亟待解决的问题。一次性邮箱API的出现,为我们提供了一种新的解决方案。那么,如何使用一次性邮箱…

在uni-app开发的小程序中引入阿里的多色图标

uniapp不支持阿里多色图标,需要使用工具iconfont-tools进行处理 1.首先 在阿里图标库将 需要的图标添加到项目中 并下载压缩包,取出iconfont.js文件 2.安装iconfont-tools,安装完成会显示出安装到了电脑的那个目录 3,进入目录就会看到下面的…

【Unity动画系统】动画层级(Animation Layer)讲解与使用

如何使用Unity的Animation Layer和Avater Mask把多个动画组合使用 想让玩家持枪行走,但是手里只有行走和持枪站立的动作。 Unity中最方便的解决办法就是使用动画层级animation layer以及替身蒙版avatar mask。 创建一个动画层级 Weight表示权重,0的话则…

MFC扩展库BCGControlBar Pro v34.1 - 可视化设计器、主题新升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。 BCGControlBar专业版 v34.1已正式发布了,这个版本包含了对Windows 10/11字体图标的支持、功能区和…

国内小白用什么方法充值使用ChatGPT4.0?

首先说一下IOS礼品卡订阅,目前最经济实惠的订阅方式,具体操作步骤 使用IOS设备充值,用 App Stroe 兑换券 1、支付宝地址切换旧金山,在里面买app store 的兑换卷 2、美区Apple ID登陆app store ,充值兑换券 3、IOS设…

AI 数据观 | TapData Cloud + MongoDB Atlas:大模型与 RAG 技术有机结合,落地实时工单处理智能化解决方案

本篇为「AI 数据观」系列文章第二弹,在这里,我们将进一步探讨 AI 行业的数据价值。以 RAG 的智能工单应用场景为例,共同探索如何使用 Tapdata Cloud MongoDB Atlas 实现具备实时更新能力的向量数据库,为企业工单处理的智能化和自…

7款AI绘画软件推荐,必备工具,一键生成绘画

随着人工智能技术的不断发展,AI绘画软件在艺术创作中扮演着越来越重要的角色。这些软件利机器学习和深度学习算法,可以模仿艺术家的风格,并生成逼真的绘画作品。一起来见证下吧,先给大家展示下AI绘画生成的效果图: 一、…

边界框(bounding box) 目标物体的位置和大小 交并比(Intersection over Union,IoU) 锚框(Anchor box)

边界框(bounding box) 在检测任务中,我们需要同时预测物体的类别和位置,因此需要引入一些跟位置相关的概念。通常使用边界框(bounding box,bbox)来表示物体的位置,边界框是正好能包含物体的矩形框。 在目标检测任务中,边界框(bounding box,bbox)是一个非常重要的…

RS232/RS485转12路模拟信号隔离D/A转换器4-20mA0-20mA0-25mA0-5V0-10V0-75mV

特点: ● RS-485/232接口,隔离转换成12路标准模拟信号输出 ● 可选型输出4-20mA或0-10V控制其他设备 ● 模拟信号输出精度优于 0.2% ● 可以程控校准模块输出精度 ● 信号输出 / 通讯接口之间隔离耐压3000VDC ● 宽电源供电范围:10 ~ …

git与gitlab

目录 gitlab 下载与安装 重置管理员密码 gitlab命令 git远程gitlab相关命令 认证 补充 git git 分布式版本控制 安装 git的四个区域与文件的四个状态 使用git 常用命令 git 分布式管理系统 gitlab 企业私有库 github 公网共享库,全球…

2024五一赛数学建模ABC题成品论文word+完整代码数据汇总

2024五一赛A题参考论文42页1-3问可执行代码[py Mtlab双版本]各类可视化图表https://www.jdmm.cc/file/27105852024五一赛B题保姆级建模思路32页可执行代码[py mtlab]后续成品论文处理可视化图表https://www.jdmm.cc/file/27105862024五一赛C题成品论文23页word页1-3问可执行代码…

亚马逊自养号测评环境搭建需要准备哪些?

在当下电商领域竞争白热化的背景下,亚马逊平台的卖家们对流量之于店铺转化率的重要性有着深刻的认识。随着对平台内部流量的依赖逐渐减弱,他们纷纷寻求更多元化的途径来提升销售业绩和品牌的市场影响力。在此过程中,自养号测评成为了一种备受…

alphassl ocsp泛域名证书

泛域名SSL证书又可以称之为通配符SSL证书,这款SSL数字证书可以同时保护主域名以及主域名下的所有子域名,被广泛应用于各种类型的网站,为多个网站提供安全服务。AlphaSSL是比较知名的SSL证书品牌之一,旗下的OCSP泛域名SSL证书比较受…

linux——主从同步

1. 保证主节点开始二进制日志,从节点配置中继日志 2. 从节点的开启一个 I/O 线程读取主节点二进制日志的内容 3. 从节点读取主节点的二进制日志之后,会将去读的内容写入从节点的中继日志 4. 从节点开启 SQL 线程,读取中继日志的内容&a…

计算机视觉中的计算几何

计算几何领域出现于 20 世纪 70 年代,研究解决几何问题的数据结构和算法。这尤其包括确定图像内的拓扑结构,或者实际上是更高维的表示,例如点邻域,这可以帮助从数字图像数据等中导出几何意义[1]。 计算机视觉主要涉及静态或动态图…

利用傅里叶变换公式理解camera raw中的纹理和清晰度的概念(可惜的是camera raw的计算公式应该不会是这个傅里叶变换,只能说类似于这里的效果)

知乎说:在Adobe官方的解释中,就像图片可以分解成彩色通道(如:红绿蓝通道),同样的,图片也可以分解成不同的频率,一张图片可以是由高频,中频和低频组成,例如&am…

500 Internal Server Error问题

总结 mysql语句有问题 #前端报错#后端报错 SQL错误,sql的where条件不全 delete from dish.flavor where dish.id#修改一番 #将in加上即可