Groups currently do not return their duration.
Emit in that contexts means that if you are using json output/influxdb/stastsd/load impact's cloud for metrics storage than a metric that is that group duratioon will be send and you can later ... do whatever you want from inside the metric storage.
Also the syntax for check
is
check(variable_name_to_use, map_of_name_to_function_to_calls)
so something like
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,
})
You would also need to provide the scheme for the url when using http.*
.
I would also like to point out that the idea of group
is to measure how much a given group(!) of requests or operations takes. They can for example be used to group all the operations that comprise your "login", "adding an item to a cart", "checkout and payment" and so on. They are definitely useful but grouping single requests when all your groups are single request is not adding any new data :)
Solution 1:
you can do it yourself like this:
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
})
}
You can of course move this to a function and just return the duration as:
function mygroup(name, f) {
var start = new Date();
group(name, f);
return new Date() - start;
}
And than call mygroup
and get the duration as
var group_duration = mygroup('Home page', function(){
http.get('http://localhost:8080');
});
Solution 2:
In your case where you are using only a single request in each group you can use the fact that request do actually return how much they took. So
resp = http.get("google.com");
check (resp.timings.duration, {
"check response time", (d) => d<200
});
Will check that a given request took less than 200 millisecond. You can see more things that are in the response in the docs
As a k6 developer I think that what you are proposing is not a bad idea and I would like if you actually open an issue