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

问题描述

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

group(' elasticsearch',function () {

      group(':8000',function () {

         let responses = http.batch([
            ['POST','http://10.1.11.2:8000'],['POST',..........

这是我的JSON查询和其他标头信息的示例。

  response = http.post(

      "http://10.1.11.2:8000",'{"size":0,"query":{"bool":{"must":[],"must_not":[],"filter":[]}},"aggregations":{"1__cfgroup":{"terms":{"field":"measure_name","size":10000,"order":{"_term":"asc"}},"aggregations":{}}}}',{

        headers: {

          Host: "10.1.11.2:8000",Connection: "keep-alive","User-Agent":

            "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/84.0.4147 Safari/537.36","content-type": "application/json",Accept: "*/*",Origin: "http://chart.com",Referer: "http://chart.com","Accept-Encoding": "gzip,deflate","Accept-Language": "en-US,en;q=0.9","Content-Type": "application/json",},}

    );

 response = http.post(

      "http://10.1.11.2:8000","aggregations":{"1__cfgroup":{"terms":{"field":"compliance_year","order":{"_term":"desc"}},Referer: "http://chart.com/",}

    );

解决方法

我认为您想在outputs之一中区分它们。

每个HTTP请求都会生成一堆metrics,每个指标都有tags。对于您的情况,我认为您可以使用默认情况下发出的method tag

如果这还不够,您可以随时添加自己的自定义标签,或者为此reason (and others)添加一个name标签,该标签通常等于url,但可以覆盖

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

如果要在测试摘要的末尾对它们进行分组,我认为您应该开始使用输出;),但是有一种使该函数起作用的怪异方法,即创建一个阈值。

import http from "k6/http";

export let options = {
    thresholds: {
        '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'],},};

export default function () {
    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
如您所见,

您需要为所需的每个指标/标签组合执行此操作,这增加了额外的计算复杂性,因为现在需要始终计算这些阈值。对于像本示例这样的小用例来说,它很好,但是如果您需要更大的东西,使用an output可以更好,更灵活。