2

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

group(' elasticsearch', function () {

      group(':8000', function () {

         let responses = 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,"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",

      '{"size":0,"query":{"bool":{"must":[],"must_not":[],"filter":[]}},"aggregations":{"1__cfgroup":{"terms":{"field":"compliance_year","size":10000,"order":{"_term":"desc"}},"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",

        },

      }

    );
4

1 回答 1

1

我认为您想在其中一个输出中区分它们。

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

如果这还不够,您可以随时添加自己的自定义标签,或者出于这个原因(和其他原因)name标签通常等于url,但可以被覆盖。

name标签对 k6 云 UI 具有特殊含义,它用于对请求进行分组,而不是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

如您所见,您需要为所需的每个指标/标签组合执行此操作,这增加了额外的计算复杂性,因为现在需要一直计算这些阈值。对于像这个例子这样的小用例,这很好,但如果你需要它来做更大的事情,用输出来做这件事要好得多,而且用途广泛。

于 2020-09-01T06:37:14.017 回答