在使用K6时测量x个请求量的持续时间



我想使用K6来衡量API处理1.000000个请求(总共(所需的时间。

场景

由50个并发用户/线程执行1.000000(总计100万(get请求,因此每个用户/线程都执行20.000个请求。

我已经用Artillery.io创建了这样一个场景,但我不确定如何在使用K6时创建相同的场景。你能为我指明正确的方向来创建这个场景吗?(大多数示例都使用预定义的持续时间,但在这种情况下,我不知道持续时间->这正是我想要测量的(。

炮兵yml

config:
target: 'https://localhost:44000'
phases:
- duration: 1
arrivalRate: 50
scenarios:
- flow:
- loop:
- get:
url: "/api/Test"
count: 20000

K6 js

import http from 'k6/http';
import {check, sleep} from 'k6';
export let options = {
iterations: 1000000,
vus: 50
};
export default function() {
let res = http.get('https://localhost:44000/api/Test');
check(res, { 'success': (r) => r.status === 200 });
}

您在k6脚本options中指定的iterations+vus将产生一个shared-iterations执行器,其中VU将"偷窃;从1m迭代的公共堆中进行迭代。因此,速度较快的VU将完成略多于2万个请求,而速度较慢的VU完成的请求将略少,但总体而言,您仍将收到100万个请求。如果你想看看你能多快完成100万个请求,这可以说是更好的方法…

然而,如果每个VU有精确地20000个请求是一个严格的要求,那么使用命名恰当的per-vu-iterations执行器:可以很容易地做到这一点

export let options = {
discardResponseBodies: true,
scenarios: {
'million_hits': {
executor: 'per-vu-iterations',
vus: 50,
iterations: 20000,
maxDuration: '2h',
},
},
};

无论如何,我强烈建议将maxDuration设置为一个高值,因为任何一个执行器的默认值都只有10分钟。如果您不关心响应正文内容,discardResponseBodies可能会对性能有所帮助。

顺便说一句,你也可以在k6中做你在炮兵中做的事情,让50个VU每个开始一次迭代,然后在一次迭代中循环http.get()调用20000次。。。这样你就不会得到一个很好的用户体验,k6进度条会一直冻结到最后,因为k6在每次迭代中都不知道你的实际进度,但它也会起作用。

最新更新