mirror of
https://github.com/wg/wrk
synced 2025-01-06 21:32:54 +08:00
118 lines
4.1 KiB
Plaintext
118 lines
4.1 KiB
Plaintext
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
|
|
}
|
|
}
|