Вывод Json из нагрузочного тестирования Vegeta HTTP - PullRequest
0 голосов
/ 24 апреля 2019

Я использую Vegeta для проведения стресс-теста, но у меня возникли некоторые проблемы при создании отчета json. Запустив следующую команду, я могу видеть текстовые результаты:

вегета атака -targets = "./ vegeta_sagemaker_True.txt" -rate = 10 -duration = 2s | vegeta report -output = "attack.json" -type = text

Requests      [total, rate]            20, 10.52
Duration      [total, attack, wait]    2.403464884s, 1.901136s, 502.328884ms
Latencies     [mean, 50, 95, 99, max]  945.385864ms, 984.768025ms, 1.368113304s, 1.424427549s, 1.424427549s
Bytes In      [total, mean]            5919, 295.95
Bytes Out     [total, mean]            7104, 355.20
Success       [ratio]                  95.00%
Status Codes  [code:count]             200:19  400:1  
Error Set:
400 

Когда я запускаю ту же команду, меняя -type-text на -type = json, я получаю очень странные числа, и они не имеют смысла для меня:

{
  "latencies": {
    "total": 19853536952,
    "mean": 992676847,
    "50th": 972074984,
    "95th": 1438787021,
    "99th": 1636579198,
    "max": 1636579198
  },
  "bytes_in": {
    "total": 5919,
    "mean": 295.95
  },
  "bytes_out": {
    "total": 7104,
    "mean": 355.2
  },
  "earliest": "2019-04-24T14:32:23.099072+02:00",
  "latest": "2019-04-24T14:32:25.00025+02:00",
  "end": "2019-04-24T14:32:25.761337546+02:00",
  "duration": 1901178000,
  "wait": 761087546,
  "requests": 20,
  "rate": 10.519793517492838,
  "success": 0.95,
  "status_codes": {
    "200": 19,
    "400": 1
  },
  "errors": [
    "400 "
  ]
}

Кто-нибудь знает, почему это должно происходить?

Спасибо!

1 Ответ

1 голос
/ 25 апреля 2019

Эти числа являются наносекундами - внутреннее представление time.Duration в Go.

Например, latencies.mean в JSON равно 992676847, что означает 992676847 наносекунд, то есть 992676847/1000/1000 = 992,676847мс.

На самом деле в вегете, если вы объявите type как text (-type=text), он будет использовать NewTextReporter и напечатает time.Duration как удобную для пользователя строку. Если вы объявите type как json (-type=json), он будет использовать NewJSONReporter и вернет time.Duration внутреннее представление:

Длительность представляет прошедшее время между двумя моментами в виде подсчета с интервалом 64 секунды. Представление ограничивает наибольшую представляемую продолжительность приблизительно 290 годами.

...