问题描述
我已经使用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可以更好,更灵活。