Mercurial
diff third_party/wrk/SCRIPTING @ 186:8cf4ec5e2191 hg-web
Fixed merge conflict.
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Fri, 23 Jan 2026 22:38:59 -0800 |
| parents | 94705b5986b3 |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/third_party/wrk/SCRIPTING Fri Jan 23 22:38:59 2026 -0800 @@ -0,0 +1,117 @@ +Overview + + wrk supports executing a LuaJIT script during three distinct phases: setup, + running, and done. Each wrk thread has an independent scripting environment + and the setup & done phases execute in a separate environment which does + not participate in the running phase. + + The public Lua API consists of a global table and a number of global + functions: + + wrk = { + scheme = "http", + host = "localhost", + port = nil, + method = "GET", + path = "/", + headers = {}, + body = nil, + thread = <userdata>, + } + + function wrk.format(method, path, headers, body) + + wrk.format returns a HTTP request string containing the passed parameters + merged with values from the wrk table. + + function wrk.lookup(host, service) + + wrk.lookup returns a table containing all known addresses for the host + and service pair. This corresponds to the POSIX getaddrinfo() function. + + function wrk.connect(addr) + + wrk.connect returns true if the address can be connected to, otherwise + it returns false. The address must be one returned from wrk.lookup(). + + The following globals are optional, and if defined must be functions: + + global setup -- called during thread setup + global init -- called when the thread is starting + global delay -- called to get the request delay + global request -- called to generate the HTTP request + global response -- called with HTTP response data + global done -- called with results of run + +Setup + + function setup(thread) + + The setup phase begins after the target IP address has been resolved and all + threads have been initialized but not yet started. + + setup() is called once for each thread and receives a userdata object + representing the thread. + + thread.addr - get or set the thread's server address + thread:get(name) - get the value of a global in the thread's env + thread:set(name, value) - set the value of a global in the thread's env + thread:stop() - stop the thread + + Only boolean, nil, number, and string values or tables of the same may be + transfered via get()/set() and thread:stop() can only be called while the + thread is running. + +Running + + function init(args) + function delay() + function request() + function response(status, headers, body) + + The running phase begins with a single call to init(), followed by + a call to request() and response() for each request cycle. + + The init() function receives any extra command line arguments for the + script which must be separated from wrk arguments with "--". + + delay() returns the number of milliseconds to delay sending the next + request. + + request() returns a string containing the HTTP request. Building a new + request each time is expensive, when testing a high performance server + one solution is to pre-generate all requests in init() and do a quick + lookup in request(). + + response() is called with the HTTP response status, headers, and body. + Parsing the headers and body is expensive, so if the response global is + nil after the call to init() wrk will ignore the headers and body. + +Done + + function done(summary, latency, requests) + + The done() function receives a table containing result data, and two + statistics objects representing the per-request latency and per-thread + request rate. Duration and latency are microsecond values and rate is + measured in requests per second. + + latency.min -- minimum value seen + latency.max -- maximum value seen + latency.mean -- average value seen + latency.stdev -- standard deviation + latency:percentile(99.0) -- 99th percentile value + latency(i) -- raw value and count + + summary = { + duration = N, -- run duration in microseconds + requests = N, -- total completed requests + bytes = N, -- total bytes received + errors = { + connect = N, -- total socket connection errors + read = N, -- total socket read errors + write = N, -- total socket write errors + status = N, -- total HTTP status codes > 399 + timeout = N -- total request timeouts + } + }