所以,我有 2 个 API,一个 POST 和一个 GET 调用。我在 POST 请求中发送一些 json 数据,它会生成一个
id
作为响应。然后我必须使用 id
发出 GET 请求。我正在测试大数据,所以我需要等到id
生成。
这是我的 YAML 脚本 -
---
execution:
- concurrency: 30
ramp-up: 1m
hold-for: 10m
scenario: 5K_Export Excel
scenarios:
5K_Export Excel:
store-cache: false
store-cookie: false
use-dns-cache-mgr: false
variables:
calcEngineId: ${calcEngineId}
url: ${url}
data-sources:
# path of .csv files for ${calcEngineId}, ${url} and ${bearerToken}
requests:
- label: Post Pivot Data
url: ${url}/${calcEngineId}/exportPivotDataToExcel
follow-redirects: true
method: POST
headers:
Content-Type: application/json
User-Agent: ApacheJMeter
Authorization: Bearer ${bearerToken1}
content-encoding: UTF-8
think-time: 30s
timeout: 2m
extract-jsonpath:
jobId: $.id
body:
# body of POST request
- label: Export To Excel
url: ${url}/${calcEngineId}/exportPivotDataToExcel/${jobId}
follow-redirects: true
method: GET
headers:
Content-Type: application/octet-stream
User-Agent: ApacheJMeter
Authorization: Bearer ${bearerToken1}
content-encoding: UTF-8
think-time: 1m
timeout: 2m
我正在提取
id
并将其存储在一个名为 jobId
的变量中 -
extract-jsonpath:
jobId: $.id
然后我在 GET 请求的 url 中使用这个
jobId
,如上所示。
当我在 blazemeter 中运行此命令时,GET 调用显示错误请求,可能是由于在进行 GET 调用时尚未生成
jobId
。
我尝试在 POST 和 GET 调用之间添加
think-time
60 秒,但没有成功。
- label: Think for 1 Minute
think-time: 60000
我如何实现这一目标?还有其他方法可以在 YAML 中进行异步调用吗?
我还想提一下,当 POST 调用正文中的数据相对较小时,它工作正常。当数据很大时,比如 10k-15k 行,就会出现问题。
在 BlazeMeter 的 Logs Report 中应该有
error.jtl
文件
它包含请求和响应数据以及用于失败采样器的标头,因此您可以检查正在发送的内容以及响应是什么。
此外您还可以:
error.jtl
文件