Skip to content

Instantly share code, notes, and snippets.

@tomasbasham
Created April 4, 2023 19:37
Show Gist options
  • Save tomasbasham/74cf7d4fc8690785db1ef524fb8b9011 to your computer and use it in GitHub Desktop.
Save tomasbasham/74cf7d4fc8690785db1ef524fb8b9011 to your computer and use it in GitHub Desktop.

Revisions

  1. tomasbasham created this gist Apr 4, 2023.
    95 changes: 95 additions & 0 deletions loadtest.lua
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,95 @@
    local threads = {}

    function setup(thread)
    table.insert(threads, thread)
    end

    function init(args)
    count_2xx = 0
    count_3xx = 0
    count_400 = 0
    count_404 = 0
    count_429 = 0
    count_4xx = 0
    count_500 = 0
    count_503 = 0
    count_5xx = 0
    count_xxx = 0
    end

    function response(status, headers, body)
    if status < 300 then count_2xx = count_2xx + 1
    elseif status < 400 then count_3xx = count_3xx + 1
    elseif status == 400 then count_400 = count_400 + 1
    elseif status == 404 then count_404 = count_404 + 1
    elseif status == 429 then count_429 = count_429 + 1
    elseif status < 500 then count_4xx = count_4xx + 1
    elseif status == 500 then count_500 = count_500 + 1
    elseif status == 503 then count_503 = count_503 + 1
    else count_xxx = count_xxx + 1
    end
    end

    function done(summary, latency, requests)
    total_2xx = 0
    total_3xx = 0
    total_400 = 0
    total_404 = 0
    total_429 = 0
    total_4xx = 0
    total_500 = 0
    total_503 = 0
    total_5xx = 0
    total_xxx = 0

    for index, thread in ipairs(threads) do
    total_2xx = total_2xx + thread:get("count_2xx")
    total_3xx = total_3xx + thread:get("count_3xx")
    total_400 = total_400 + thread:get("count_400")
    total_404 = total_404 + thread:get("count_404")
    total_429 = total_429 + thread:get("count_429")
    total_4xx = total_4xx + thread:get("count_4xx")
    total_500 = total_500 + thread:get("count_500")
    total_503 = total_503 + thread:get("count_503")
    total_5xx = total_5xx + thread:get("count_5xx")
    total_xxx = total_xxx + thread:get("count_xxx")
    end

    io.write("\n------------------------------\n")
    io.write("Response Latencies\n\n")
    for _, p in pairs({ 50, 90, 99, 99.999 }) do
    n = latency:percentile(p)
    io.write(string.format("%g%%\t=> %d\n", p, n))
    end

    local msg_status = "HTTP Status %s Count: %d\n"
    io.write("\n------------------------------\n")
    io.write("Response Codes\n\n")
    io.write(msg_status:format("2xx", total_2xx))
    io.write(msg_status:format("3xx", total_3xx))
    io.write(msg_status:format("400", total_400))
    io.write(msg_status:format("404", total_404))
    io.write(msg_status:format("429", total_429))
    io.write(msg_status:format("4xx", total_4xx))
    io.write(msg_status:format("500", total_500))
    io.write(msg_status:format("503", total_503))
    io.write(msg_status:format("5xx", total_5xx))
    io.write(msg_status:format("xxx", total_xxx))
    end

    -- Print contents of `tbl`, with indentation.
    -- `indent` sets the initial level of indentation.
    function tprint (tbl, indent)
    if not indent then indent = 0 end
    for k, v in pairs(tbl) do
    formatting = string.rep(" ", indent) .. k .. ": "
    if type(v) == "table" then
    print(formatting)
    tprint(v, indent+1)
    elseif type(v) == 'boolean' then
    print(formatting .. tostring(v))
    else
    print(formatting .. v)
    end
    end
    end
    6 changes: 6 additions & 0 deletions wrk
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,6 @@
    #!/usr/bin/env bash

    wrk $1 \
    -R 150 \
    -d 100 \
    -s loadtest.lua