我目前正在针对我的登台虚拟机编写针对应用程序的性能测试,并且遇到了一个问题,即已定义的请求未按顺序运行,或者次数不相同
由于测试是针对我的暂存环境运行的,因此,我希望这些请求尽可能按顺序运行并且次数相同。如果没有,我相信我的某些清理代码可能无法正常工作,这将导致集成测试成为CICD等的一部分。
这是我的YAML文件
execution:
- concurrency: 10
ramp-up: 1s
hold-for: 1m
throughput: 10
scenario: myScenario
scenarios:
myScenario:
variables:
staging_url: http://${__P(staging_host)}/api/endpoint
requests:
- url: ${staging_url}
method: POST
headers:
Content-Type: application/json
body-file: performance_testing/data_to_post.json
- url: ${staging_url}/search?searchForPreviouslyPostedData
method: GET
headers:
Content-Type: application/json
extract-jsonpath:
id: $[0]['id']
- url: ${staging_url}/${id}
method: PATCH
headers:
Content-Type: application/json
body-file: performance_testing/data_to_patch.json
如您所见,某些请求块还取决于先前的请求,这就是为什么我希望能够按顺序运行这些块的原因
谢谢,我希望这很清楚
答案 0 :(得分:0)
Taurus在后台运行JMeter,而JMeter颠倒执行Samplers,因此您可以立即执行顺序执行。您有10个并发线程,它们以最快的速度执行Samplers,因此,如果在.jtl文件中看到请求的非顺序顺序,则意味着它们源自不同的线程。您可以使用__threadNum()和__iterationNum()函数来区分来自不同虚拟用户/迭代的请求。
您可以通过运行bzt your-test.yml -gui
命令来查看生成的JMeter脚本
由于使用Concurrency Thread Group会启动10个线程1分钟,并且线程开始尽快执行采样器,因此无法保证请求的总数。
您正在使用Throughput Shaping Timer将吞吐量限制为每秒10个请求。计时器只能暂停以将JMeter减慢到所需速度,并且如果您的响应时间波动并且超过1秒,则可能需要添加额外的线程才能达到10个请求/秒(假设您的应用程序能够处理此类负载)