如何获取组的组持续时间值

时间:2019-05-22 18:09:50

标签: k6

我有一个K6测试,其中对流进行负载测试,并且将每个页面请求分组。我要做的是检查每个组的持续时间,例如


  group('Home page', function(){
         http.get('localhost:8080')
   });
   //something like this 
   check(group.duration, function()=>{'performs check logic'})

   group('search page', function(){
    http.get('localhost:8080/Search?term=mysearch')
   })
   check(group.duration, function()=>{'performs check logic'})

文档指出group发出group_duration,但没有说明如何监听它。 JS不强,所以我很抱歉,如果这很简单。

1 个答案:

答案 0 :(得分:1)

组当前不返回持续时间。

在这种情况下的发射意味着,如果您使用json输出/ influxdb / stastsd / load Impact的云进行指标存储,则比发送组持续时间的指标要高,您以后可以...在内部做任何您想做的事情指标存储。

check的语法也是 check(variable_name_to_use, map_of_name_to_function_to_calls)类似于

check(group.duraiton, {
  "checking duration is less than 20 as normal function": function(d){ return d<20}, 
  "checking duration is less than 20 as arrow function": (d)=>{ return d<20}, 
  "checking duration is less than 20 as arrow function without the brackets": (d)=>d<20, 
})

使用http.*时,您还需要提供url的方案。

我还想指出,group的想法是衡量给定的一组请求或操作需要多少费用。例如,它们可以用于对包括“登录”,“向购物车中添加商品”,“结帐和付款”等所有操作进行分组。它们绝对有用,但是当您的所有组都是单个请求时对单个请求进行分组不会添加任何新数据:)

解决方案1: 您可以这样自己做:

import { check, group } from "k6";
import http from 'k6/http';

export default function() {
        var group_duration;
    group('Home page', function(){
                var start = new Date();
        http.get('http://localhost:8080');
                group_duration = new Date() - start;
    });
    check(group_duration,  {
                "Name of group check": function(d){return d<200}
        })

    group('search page', function(){
                var start = new Date();
        http.get('http://localhost:8080/Search?term=mysearch');
                group_duration = new Date() - start;
    })
        console.log(group_duration);
    check(group_duration,  {
                "Name of group check": (d)=>d<200
        })
}

您当然可以将其移动到函数中,只需将持续时间返回为:

function mygroup(name, f) {
        var start = new Date();
        group(name, f);
        return new Date() - start;
}

然后调用mygroup并将持续时间设为

var group_duration = mygroup('Home page', function(){
    http.get('http://localhost:8080');
});

解决方案2: 如果您在每个组中仅使用一个请求,则可以使用这样的事实,即请求确实返回了他们收取的费用。所以

resp = http.get("google.com");
check (resp.timings.duration, {
    "check response time", (d) => d<200
});

将检查给定的请求是否少于200毫秒。您可以在docs

中查看响应中的更多内容

作为k6开发人员,我认为您的建议不是一个坏主意,如果您实际open an issue

,我希望