Hey Deprecated
Use rakyll/hey to test a web application with a load of requests.
python · Developer Tools
Details
| ID | Hey |
|---|---|
| Language | python |
| From Version | 6.0.0 |
| Docker Image | demisto/rakyll-hey:1.0.0.103237 |
README
Use rakyll/hey to test a web application with a load of requests.
Inputs
| Argument Name | Description |
|---|---|
| url | URL to query. |
| requests_number | Number of requests to run. Default is 200. |
| timeout | Timeout for each request in seconds. Default is 20, use 0 for infinite. |
| concurrency | Number of workers to run concurrently. |
| duration | Duration of application to send requests (in seconds). |
| method | HTTP method. |
| headers | Custom HTTP header. Comma separated list of “key=value”. e.g. Type=IP,Size=100. |
| disable_compression | Disable compression. |
| results_map | Additional information to add to the result. Comma separated list of “key=value”. e.g. Content-Type=text/plain,Accept=*/*. |
| body | HTTP request body. |
| proxy | HTTP Proxy address as host:port. |
| enable_http2 | Enable HTTP/2. |
| disable_redirects | Disable following of HTTP redirects. |
Outputs
| Path | Description | Type |
|---|---|---|
| Hey.Timeout | Timeout for each request. | number |
| Hey.Concurrency | Max number of concurrent workers. | number |
| Hey.Requests | Number of requests sent to URL. | number |
| Hey.SlowestTime | The slowest time it took for a request to finish. | number |
| Hey.FastestTime | The fastest time it took for a request to finish. | number |
| Hey.SuccessfulResponses | The number of responses that returned with 200 status code. | number |
| Hey.AverageTime | The average time it took for a request to finish. | number |
| Hey.Result | The full result in text format when output is set to “human_readable” | number |
from CommonServerPython import * # noqa: F401 import Hey as hey import pytest def test_try_re(): # Too many extracted values -> None assert hey.try_re(hey.INT_RE, '7 days and not 8 or 6', 0) is None # Expected extracted values -> value assert hey.try_re(hey.INT_RE, '7 days exactly', 0) == '7' assert hey.try_re(hey.INT_RE, '7 days and not 8', 1) == '8' assert hey.try_re(hey.FLOAT_RE, 'give 100.1% and not any less', 0) == '100.1' assert hey.try_re(hey.BYTES_RE, 'disk size is 1337 bytes', 0) == '1337 bytes' # No value found -> None assert hey.try_re(hey.BYTES_RE, 'disk size is 1337 byte', 0) is None def test_try_name_value_arg_to_dict(): test_str = 'a=1' assert hey.name_value_arg_to_dict(test_str) == {'a': '1'} test_str = 'a==1' assert hey.name_value_arg_to_dict(test_str) == {'a': '=1'} test_str = 'a_invalid,b=1' with pytest.raises(DemistoException): hey.name_value_arg_to_dict(test_str) test_str = 'nothing to extract' with pytest.raises(DemistoException): hey.name_value_arg_to_dict(test_str) def test_construct_hey_query(): url = "http://mock.com" res = hey.construct_hey_query(url) assert res[0] == {} assert res[1] == ["hey", url] requests_number = "2" res = hey.construct_hey_query(url, requests_number=requests_number) assert res[0] == {"n": "2"} assert res[1] == ["hey", "-n", "2", url] timeout = "2" res = hey.construct_hey_query(url, timeout=timeout) assert res[0] == {"t": "2"} assert res[1] == ["hey", "-t", "2", url] concurrency = "2" res = hey.construct_hey_query(url, concurrency=concurrency) assert res[0] == {"c": "2"} assert res[1] == ["hey", "-c", "2", url] duration = "2" res = hey.construct_hey_query(url, duration=duration) assert res[0] == {"z": "2s"} assert res[1] == ["hey", "-z", "2s", url] method = "POST" res = hey.construct_hey_query(url, method=method) assert res[0] == {"m": method} assert res[1] == ["hey", "-m", method, url] disable_compression = "false" res = hey.construct_hey_query(url, disable_compression=disable_compression) assert res[0] == {} assert res[1] == ["hey", url] disable_compression = "true" res = hey.construct_hey_query(url, disable_compression=disable_compression) assert res[0] == {} assert res[1] == ["hey", "--disable-compression", url] headers = "a=1,b=2,c=3 4" res = hey.construct_hey_query(url, headers=headers) assert res[0] == {} assert res[1] == ["hey", "-H", "a:1", "-H", "b:2", "-H", "c:3 4", url] body = "{}" res = hey.construct_hey_query(url, body=body) assert res[0] == {"d": body} assert res[1] == ["hey", "-d", body, url] proxy = "a:1" res = hey.construct_hey_query(url, proxy=proxy) assert res[0] == {"x": proxy} assert res[1] == ["hey", "-x", proxy, url] enable_http2 = "true" res = hey.construct_hey_query(url, enable_http2=enable_http2) assert res[0] == {} assert res[1] == ["hey", "-h2", url] disable_redirects = "true" res = hey.construct_hey_query(url, disable_redirects=disable_redirects) assert res[0] == {} assert res[1] == ["hey", "-disable-redirects", url] res = hey.construct_hey_query( url=url, requests_number=requests_number, timeout=timeout, concurrency=concurrency, duration=duration, method=method, disable_compression=disable_compression, headers=headers, body=body, proxy=proxy, enable_http2=enable_http2, disable_redirects=disable_redirects, ) assert res[0] == { "t": timeout, "n": requests_number, "c": concurrency, "m": method, "z": duration + "s", "d": body, "x": proxy, } assert res[1] == [ "hey", "--disable-compression", "-h2", "-disable-redirects", "-H", "a:1", "-H", "b:2", "-H", "c:3 4", "-t", "2", "-n", "2", "-c", "2", "-m", "POST", "-z", "2s", "-d", "{}", "-x", "a:1", "http://mock.com", ] def test_run_hey_test(mocker): """ Given: mocker When: Running the run_hey_test function. Then: Assert the message returned is as expected. """ import subprocess url = 'http://mock.com' ret_value = f'hey {url}' expected_raw = {'SuccessfulResponses': 0, 'TimeoutPerRequest': 20, 'Concurrency': 50, 'Requests': 200} mocker.patch.object(subprocess, 'check_output', return_value=ret_value) results = hey.run_hey_test(url) assert results.readable_output == ret_value assert results.raw_response == expected_raw