我确定你在这里是因为你需要加载测试 JSON REST API. 这并不奇怪, 因为 REST API 现在越来越受欢迎.
这本指南的目的: 帮助您进行负载测试一个 JSON 的 https://www.json.org/json-en.html REST API 通过一个具体的例子, OctoPerf 的 JSON 的 REST API https://api.octoperf.com/swagger-ui.html .
本指南将完全为您提供以下知识:
使用 Http POST 请求 https://en.wikipedia.org/wiki/POST_(HTTP) 处理
REST API API 登录,
从 JSON Response 中提取变量, 稍后在脚本中重用它,
并使用 JMeter JSON Assertion(在 JMeter 4 中 https://jmeter.apache.org/
引入) 验证 JSON 响应.
这里没有理论, 只有实践: 一切都基于一个现实的 REST API(不是一个虚拟的例子). 您可以在学习本教程的同时下载示例 JMX.
准备好学习? 我们走吧!
休息 API 登录
OctoPerf https://app.octoperf.com/ 平台基于 JSON REST API. 我们将看看如何使用 JMeter 模拟我们的 API 登录.
但是身份验证如何运作? 我们如何使用 JMeter 模拟登录? 大多数 REST API 使用以下登录工作流程:
登录使用 HTTP POST 请求通过提供 username 和 password,
接收临时身份验证令牌, 以便以后请求标识自己,
发送身份验证令牌的后续请求中, 典型地经由 HTTP 标头一样
- Authorization: Bearer AUTH_TOKEN
- .
OctoPerf API 也是如此. 这与 OAuth 身份验证 https://tools.ietf.org/html/rfc6750 非常接近.
登录 API 规范
首先, 让我们看看如何登录 OctoPerf Application https://app.octoperf.com/ . 值得庆幸的是, 我们的 API 有一个 Swagger 规范 https://api.octoperf.com/swagger-ui.html :Swagger https://swagger.io/ 是一个提供 REST API 文档的工具.
Doc 指定如何通过 OctoPerf 的 API 登录
好! 现在让我们来看看使用 JMeter 进行伪造所需的请求:
Http 方法: 必须是 POST 请求, 带有一些 post 参数,(参见 GET vs POST https://www.w3schools.com/tags/ref_httpmethods.asp )
Http Scheme:https 由于我们的 REST API 受 SSL 保护 https://www.digicert.com/ssl/ ,
主机名: API.octoperf.com,
路径 :( /public/users/login 登录端点路径),
发布参数:
用户名: 帐户用户名, 如果你没有, 你可以在这里 https://app.octoperf.com/#/access/signup
轻松注册 https://app.octoperf.com/#/access/signup ,
密码: 关联的密码.
然后我们应该从服务器接收一个 JSON Response, 它看起来像:
- {
- "token": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
- }
在这里看到令牌? 这是我们稍后将用于在 REST API 上识别自己的东西. 但是, 首先让我们来看看 JMeter HTTP 请求.
执行登录
通过 REST API 登录 OctoPerf
在这里, 我们已准备好将 Login Http Request 发送到我们的服务器. 我刚刚隐藏了敏感信息, 但这基本上就是您的帐户信息. 为了调试登录, 我们将使用 View Results Tree Listener.
登录请求发送到服务器
我们可以看到, 发送的请求是一个 POST 表单 - urlencoded https://en.wikipedia.org/wiki/POST_(HTTP) , 其中包含我们的登录名和密码. 这里没什么难的! 现在, 我们对服务器发送的 JSON 响应感兴趣.
从服务器收到响应
精细! 现在我们已经收到了身份验证令牌, 我们可以提取它以在后续请求中重用它.
提取身份验证令牌
基于令牌的身份验证是一种简单的机制, 其中令牌唯一地标识用户会话. 我们需要处理这个问题 dynamic parameter 以正确模拟与 JSON API 交互的用户.
使用 JSON Extractor
要从服务器响应中提取身份验证令牌, 我们将使用 JMeter JsonPath Extractor. 从响应中提取变量的过程如下:
服务器发回对我们的登录请求的响应,
甲后处理器, 像 JsonPath 提取是继执行
提取器提取服务器响应的一部分并将其放入变量中 ${token}.
从服务器响应中提取身份验证令牌
我们已经使用这些设置配置了 JMeter JSON Extractor:
创建变量的名称: token, 这将导致带有语法的可重用变量 ${token},
JSON Path 表达式:$.token, 有关详细信息, 请参阅示例 JsonPath 表达式,
并且匹配 Nr: 简单地说 1, 第一次出现. 但我们可以把它留空.
看看我放置提取器的位置? 在 loginHTTP 请求下. 我们还添加一个 Debug Sampler 来查看是否正确提取了变量.
启用调试
在 Debug Sampler 中启用 JMeter 变量
通过设置 JMeter 的变量来 true, 我们启用了采样器输出变量的试运行期间.
测试提取
使用 JSON Extractor 从服务器响应中成功提取令牌
大! JSON 提取器完美无缺. 它 token 从 JSON 响应中提取字段的值. 我们现在可以 ${token} 在后续请求中使用表达式来执行经过身份验证的请求.
让我们看看我们如何重用此令牌来告诉我们的 REST API 我们是一个给定的用户.
重新注册验证令牌
我们的 REST API 有许多需要身份验证的端点. 这些端点提供用户工作区, 项目, 虚拟用户等数据. 要访问受用户保护的端点, 必须:
登录以获取身份验证令牌 (就像我们之前所做的那样),
Authorization: Bearer TOKEN
对于每个后续请求, 在 http 请求标头内发送身份验证令牌.
这正是我们要在这里做的.
检索用户工作区
我们现在特别感兴趣的是查询用户的工作空间. 这是 WorkspacesAPI 端点的一部分.
工作区从 Swagger API 文档中休息 API 端点
我们将 GET 使用路径向端点执行请求 / workspaces/member-of. 它应该返回包含用户工作空间的 JSON 响应. 这是一个示例响应:
- [
- {
- "created": "2018-04-23T12:40:00.133Z",
- "description": "This is my personal workspace.",
- "id": "workspaceId",
- "lastModified": "2018-04-23T12:40:00.133Z",
- "name": "Personal",
- "userId": "myUserId"
- }
- ]
让我们在 JMeter 中创建一个 HTTP 请求来查询它们. 这很简单, 如下面的截图所示.
从 JMeter 调用端点成员
在这里, 我们设置了一个 HTTP 请求来查询用户的工作区:
Http 方法: 必须是 GET 请求, 不涉及参数,
Http Scheme:https 由于我们的 REST API 受 SSL 保护 https://www.digicert.com/ssl/ ,
主机名: API.octoperf.com,
路径:
- /workspaces/member-of
- .
完了吗? 还没. 目前, 如果我们不提供身份验证令牌, 服务器将拒绝我们的请求.
服务器返回错误
服务器以 Http 4xx 错误拒绝请求: 401 Unauthorized.
与 403 Forbidden 类似, 但专门用于需要身份验证且已失败或尚未提供的情况.
我们需要通过 Authorization 在请求中包含标头来提供身份验证令牌. 怎么样? 通过向请求添加 HTTP 标头管理器.
添加授权标头
在 Authorization 标头中设置提取的令牌
请记住: 我们之前已经 token 从 / public/users/login 端点服务器响应中提取了. 现在, 是时候重用它来检索访问受保护的资源了:
首先, 在 getWorkspaces HTTP Request 下添加一个
Http Header Manager,
添加 Authorization 带有值的标头 Bearer ${token}.
从服务器获得工作区
太好了! 它现在正在工作! 我们拥有属于已登录用户的所有工作空间.
授权标头已在请求中发送
授权标头已成功包含在请求标头中. 但是, 有一点令人讨厌的是: JSON 格式不正确. 为什么?
大多数服务器以紧凑格式发送 JSON, 跳过缩进. 这是出于性能原因 (减少带宽使用和服务器 CPU 使用)
格式化 JSON 响应
为了解决这个问题, JSON Formatter PostProcessor https://jmeter-plugins.org/wiki/JSONFormatter/ 能够很好地完成这项工作.
JMeter JSON Formatter 后处理器
请参阅我们的 JMeter 插件安装指南, 了解如何安装 JSON 插件. 另一个选择是使用 JSR223 脚本自己格式化 JSON.
JSON 现在打印得很漂亮!
现在, 我们可以利用 JSON Assertion(在 JMeter 4.0 中引入) 的强大功能来检查服务器响应.
使用 JSON Assertion
我们将确保服务器响应包含 Personal 工作区. 这是 JSON 断言的工作. 要添加 JSON 断言, 请右键单击 HTTP Request 采样器, 然后选择 Add> Post Processor> JSON Assertion.
组态
断言响应包含个人工作空间
JSON 断言配置如下:
断言的 JSON 路径存在:$.[1]['name'] 指第二工作区返回, 并采取了 name,
另外 Assert Value: 选中以检查 name 字段的值,
预期价值: 应该是 Personal.
执行
假设我们断言期望值是 Other 不是 Personal.
查找名为 Other 的 workspaced 时, JSON Assertion 失败
正如预期的那样, 断言失败并显示以下消息:
- Assertion error: false
- Assertion failure: true
- Assertion failure message: Value expected to be 'Other', but found 'Personal'
性能
当然, 您不仅限于使用 JSON Assertion. 如果您愿意, 也可以使用 JMeter Response Assertion. 它在性能方面甚至是有益的, 因为根据我们的断言性能比较表, 响应断言比 JSON 断言消耗更少的 CPU / 内存资源.
模拟动态行为
现在我们知道如何登录 JSON REST API 并发送访问受保护端点的请求, 让我们看看如何 dynamically behaving 使用 JMeter 模拟用户.
这是本教程的最后一部分:
首先, 我们将提取随机工作区 ID,(将 ${workspaceId})
其次, 我们将使用端点查询该工作空间的项目
- /projects/by-workspace/${
- workspaceId
- }/DESIGN
- .
OctoPerf 的 Projects REST API 端点
最后一个 REST API 端点让我们感兴趣. 我们将从 JMeter 调用它, 但首先我们需要提取一个随机 workspaceId.
提取 WorkspaceId
提取随机 workspaceId
提取器配置为 getWorkspaces 请求的后处理器, 具有以下设置:
创建变量的名称: workspaceId,
JSON Path 表达式:$..id,
匹配号: 0, 这是随机的.
这将提取随机 workspaceId, 并将其放入 ${workspaceId} 变量中.
查询项目
最后, 我们需要根据之前提取的内容查询项目 workspaceId. 为此, 我复制并修改了之前的请求以获得一些时间.
使用 workspaceId 变量查询项目
在这里, 我们设置了一个 HTTP 请求来查询工作区的项目:
Http 方法: 必须是 GET 请求, 不涉及参数,
Http Scheme:https 由于我们的 REST API 受 SSL 保护 https://www.digicert.com/ssl/ ,
主机名: API.octoperf.com,
路径:
/design/projects/by-workspace/${workspaceId}/DESIGN
.DESIGN 工作空间中包含的项目的状态.(而不是结果, 这将是 RESULT)
我想我们已经准备好进行快速迭代来试试这个了!
查看结果
执行导致查询项目
如果我们多次执行用户, 我们会看到响应因提取的随机 workspaceId 而异.
最后的话
JMeter 非常适合 REST API 测试, 特别是那些基于 JSON 格式的测试 https://en.wikipedia.org/wiki/JSON . 使用 JMeter 测试 JSON API 非常简单.
基本上, 如果你掌握了上面提到的 JMeter 组件, 那么你很高兴!
如果你想进一步挖掘, 我强烈建议你阅读我们的文章:
JMeter JsonPath Extractor: 从 JSON 响应中提取任何内容, 了解有关 JsonPath 语法的更多信息,
JMeter JSON Assertion: 专门断言 JSON 响应,
和 JMeter 的插件, 如 JSON 的格式化可以使您的生活很多容易通过格式化输出.
如果您发现它有用, 请随时分享本指南!
来源: http://www.bubuko.com/infodetail-2944605.html