tldr wrk

https://github.com/wg/wrk

Output to CSV

wrk -d10s -t1 -c10 http://127.0.0.1:8094/benchmark/redis-mapper/multi-set --latency -s report.lua
-- https://github.com/wg/wrk/blob/master/SCRIPTING
 
done = function(summary, latency, requests)
  f = io.open("result.csv", "a+")
 
  -- write below results to file
  --   minimum latency
  --   max latency
  --   mean of latency
  --   standard deviation of latency
  --   50percentile latency
  --   90percentile latency
  --   99percentile latency
  --   99.999percentile latency
  --   duration of the benchmark
  --   total requests during the benchmark
  --   total received bytes during the benchmark
  
  f:write(string.format("%s,%s,%s,%s,%s,%f,%f,%f,%f,%f,%f,%f,%f,%d,%d,%d\n",
  wrk.method, wrk.scheme, wrk.host, wrk.port, wrk.path,
  latency.min, latency.max, latency.mean, latency.stdev, latency:percentile(50),
  latency:percentile(90), latency:percentile(99), latency:percentile(99.999),
  summary["duration"], summary["requests"], summary["bytes"]))
 
  f:close()
end

snippet