Javascript 如何在k6中的批处理请求中包含JSON查询

Javascript 如何在k6中的批处理请求中包含JSON查询,javascript,json,k6,Javascript,Json,K6,我已经为我的应用程序创建了一个使用k6的负载测试,并使用批处理请求并行运行我的所有URL,但是,我的一些URL是相同的,只是在JSON查询中有所不同。如果我并行运行URL,它将发布或获取相同的精确数据,而不使用查询来区分它们。有办法做到这一点吗?下面是我的批处理请求的一个示例 组('elasticsearch',函数(){ 组(':8000',函数(){ 让响应=http.batch([ ['POST','http://10.1.11.2:8000'], ['POST','http://10.1

我已经为我的应用程序创建了一个使用k6的负载测试,并使用批处理请求并行运行我的所有URL,但是,我的一些URL是相同的,只是在JSON查询中有所不同。如果我并行运行URL,它将发布或获取相同的精确数据,而不使用查询来区分它们。有办法做到这一点吗?下面是我的批处理请求的一个示例

组('elasticsearch',函数(){
组(':8000',函数(){
让响应=http.batch([
['POST','http://10.1.11.2:8000'],
['POST','http://10.1.11.2:8000'],..........
下面是我的JSON查询和其他头信息的示例

response=http.post(
"http://10.1.11.2:8000",
{“size”:0,查询:{“bool”:{“must”:[],“must_not”:[],“filter”:[]}},聚合:{“1_ucfgroup”:{“terms”:{“field”:“measure_name”,“size”:10000,order”:{“term”:“asc”},聚合:{}},
{
标题:{
主持人:“10.1.11.2:8000”,
连接:“保持活力”,
“用户代理”:
“Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/84.0.4147 Safari/537.36”,
“内容类型”:“应用程序/json”,
接受:“*/*”,
来源:“http://chart.com",
推荐人:“http://chart.com",
“接受编码”:“gzip,deflate”,
“接受语言”:“en-US,en;q=0.9”,
“内容类型”:“应用程序/json”,
},
}
);
response=http.post(
"http://10.1.11.2:8000",
{“size”:0,查询:{“bool”:{“must”:[],“must_not”:[],“filter”:[]}},聚合:{“1_ucfgroup”:{“terms”:{“field”:“compliance_year”,“size”:10000,order”:{“term”:“desc”},聚合:{},
{
标题:{
主持人:“10.1.11.2:8000”,
连接:“保持活力”,
“用户代理”:
“Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/84.0.4147 Safari/537.36”,
“内容类型”:“应用程序/json”,
接受:“*/*”,
来源:“http://chart.com",
推荐人:“http://chart.com/",
“接受编码”:“gzip,deflate”,
“接受语言”:“en-US,en;q=0.9”,
“内容类型”:“应用程序/json”,
},
}
);

我认为您希望在其中一个方面对它们进行区分

每个HTTP请求都会生成一组数据,每个度量都有。在您的情况下,我认为您可以使用默认发出的
方法

如果这还不够,您可以始终添加自己的自定义标记,或者为此添加
名称
标记,该标记通常等于
url
,但可以被覆盖

name
标记对k6云用户界面有特殊的意义,它是用来分组请求的,而不是
url
,因为这里有特定的情况。不过,您也可以使用它进行任何其他输出

如果您希望在测试摘要的末尾对它们进行分组,我认为您应该开始使用输出;),但有一种黑客方法可以让它工作,那就是创建一个阈值

从“k6/http”导入http;
导出let选项={
阈值:{
'http_req_duration{method:GET}':['p(90)<1000'],
'http_req_duration{method:POST}':['p(90)<1000'],
'http_reqs{method:GET}':['count<1000'],
'http_reqs{method:POST}':['count<1000'],
},
};
导出默认函数(){
http.get('https://test.k6.io/');
http.post('https://test.k6.io/');
http.post('https://test.k6.io/');
}
正如您所看到的,您需要为所需的每个度量/标记组合执行此操作,这增加了额外的计算复杂性,因为现在需要始终计算这些阈值。对于像本例这样的小用例,这是很好的,但是如果您需要更大的度量/标记组合,则使用此操作会更好、更通用

running (00m00.8s), 0/1 VUs, 1 complete and 0 interrupted iterations
default ✓ [======================================] 1 VUs  00m00.7s/10m0s  1/1 iters, 1 per VU


    data_received..............: 38 kB 49 kB/s
    data_sent..................: 951 B 1.2 kB/s
    http_req_blocked...........: avg=127.15ms min=5.72µs   med=6.14µs   max=381.46ms p(90)=305.16ms p(95)=343.31ms
    http_req_connecting........: avg=37.27ms  min=0s       med=0s       max=111.82ms p(90)=89.45ms  p(95)=100.64ms
    http_req_duration..........: avg=114.1ms  min=113.72ms med=113.9ms  max=114.68ms p(90)=114.53ms p(95)=114.61ms
    ✓ { method:GET }...........: avg=114.68ms min=114.68ms med=114.68ms max=114.68ms p(90)=114.68ms p(95)=114.68ms
    ✓ { method:POST }..........: avg=113.81ms min=113.72ms med=113.81ms max=113.9ms  p(90)=113.88ms p(95)=113.89ms
    http_req_receiving.........: avg=162.07µs min=132.62µs med=174.32µs max=179.28µs p(90)=178.29µs p(95)=178.78µs
    http_req_sending...........: avg=128.62µs min=44.28µs  med=44.83µs  max=296.75µs p(90)=246.37µs p(95)=271.56µs
    http_req_tls_handshaking...: avg=89.22ms  min=0s       med=0s       max=267.67ms p(90)=214.13ms p(95)=240.9ms
    http_req_waiting...........: avg=113.81ms min=113.5ms  med=113.72ms max=114.21ms p(90)=114.11ms p(95)=114.16ms
    http_reqs..................: 3     3.800233/s
    ✓ { method:GET }...........: 1     1.266744/s
    ✓ { method:POST }..........: 2     2.533488/s
    iteration_duration.........: avg=724.34ms min=724.34ms med=724.34ms max=724.34ms p(90)=724.34ms p(95)=724.34ms
    iterations.................: 1     1.266744/s