POST /test
Start a test with given specification
Request Body
Field | Required | Default | Data type | Description |
---|---|---|---|---|
name | ❎ | UUID | String | Test name/job id, application will append UUID to ensure unique identifier, this field is ignored during multi request test |
duration | ✅ | uint32 | Test duration in seconds | |
target | ✅ | Target | Target details | |
req | ✅ | Request Specification | Request Specification | |
qps | ✅ | QPS Specification | Request per second specification | |
concurrentConnection | ❎ | Elastic | Connection Pool Specification | Concurrent number of requests to use to send request |
responseAssertion | ❎ | Assert response | ||
histogramBuckets | ❎ | [20, 50, 100, 300, 700, 1100] | [uint16] | Prometheus histogram buckets. For details check monitoring & Prometheus docs |
Example
curl --location --request POST '{overload_host}:3030/test' \
--header 'Content-Type: application/json' \
--data-raw '<json_request_body>'
Sample JSON request body -
extern crate overload_http;
extern crate serde_json;
use overload_http::Request;
let req = r###"
{
"duration": 800,
"name": "test-overload",
"histogram_buckets": [
1,
2,
5,
7,
10,
15
],
"qps": {
"Linear": {
"a": 1,
"b": 1,
"max": 100
}
},
"req": {
"RequestList": {
"data": [
{
"method": "GET",
"url": "/serde",
"headers": {
"Host": "127.0.0.1:2000",
"Connection": "keep-alive"
}
}
]
}
},
"target": {
"host": "172.17.0.1",
"port": 2000,
"protocol": "HTTP"
},
"concurrentConnection": {
"Linear": {
"a": 1,
"b": 1,
"max": 100
}
},
"responseAssertion": {
"luaAssertion": [
"function(method, url, requestBody, responseBody)",
" -- initialize assertion result",
" result = {}",
" -- verify valid json response",
" jsonResp=json.decode(responseBody);",
" if jsonResp == nil then",
" -- create new assertion result",
" local err = {}",
" -- used for metrics, should avoid duplicate values in the same assertion",
" err.id = 1",
" err.success = false",
" err.error = 'Failed to parse to json'",
" -- add to result",
" table.insert(result, err)",
" end",
" return result",
"end"
]
}
}
"###;
let result = serde_json::from_str::<Request>(req);
assert!(result.is_ok());