aboutsummaryrefslogtreecommitdiffstats
path: root/behave_tests/features/steps/testapi.py
diff options
context:
space:
mode:
Diffstat (limited to 'behave_tests/features/steps/testapi.py')
-rw-r--r--behave_tests/features/steps/testapi.py41
1 files changed, 25 insertions, 16 deletions
diff --git a/behave_tests/features/steps/testapi.py b/behave_tests/features/steps/testapi.py
index 67e5104..f211ee5 100644
--- a/behave_tests/features/steps/testapi.py
+++ b/behave_tests/features/steps/testapi.py
@@ -14,22 +14,21 @@
# under the License.
#
-import json
+import logging
import requests
class TestapiClient:
- def __init__(self, testapi_url: str, logger):
+ __test__ = False # Hint for pytest: TestapiClient is not a test class.
+
+ def __init__(self, testapi_url: str):
"""
Args:
testapi_url: testapi URL as a string, for instance
"http://172.20.73.203:8000/api/v1/results"
-
- logger: reference to behave_tests logger.
-
"""
self._base_url = testapi_url
- self._logger = logger
+ self._logger = logging.getLogger("behave_tests")
def find_last_result(self, testapi_params, scenario_tag: str, nfvbench_test_input):
"""Search testapi database and return latest result matching filters.
@@ -49,7 +48,7 @@ class TestapiClient:
to filter the testapi results. The following keys are currently
supported:
- mandatory keys: 'duration_sec', 'frame_sizes', 'flow_count', 'rate'
- - optional keys: 'user_label', 'flavor_type'
+ - optional keys: 'user_label'
Returns:
None if no result matching the filters can be found, else a dictionary
@@ -118,19 +117,31 @@ class TestapiClient:
Perform an HTTP GET request on testapi, check status code and return JSON
results as dictionary.
- Args: testapi_url: a complete URL to request testapi results (with base
- endpoint and parameters)
+ Args:
+ testapi_url: a complete URL to request testapi results (with base
+ endpoint and parameters)
Returns:
The JSON document from testapi as a Python dictionary
Raises:
+ * requests.exceptions.ConnectionError in case of network problem
+ when trying to establish a connection with the TestAPI database
+ (DNS failure, refused connection, ...)
+
+ * requests.exceptions.ConnectTimeout in case of timeout during the
+ request.
+
+ * requests.exception.HTTPError if the HTTP request returned an
+ unsuccessful status code.
+ * another exception derived from requests.exceptions.RequestException
+ in case of problem during the HTTP request.
"""
response = requests.get(testapi_url)
- assert response.status_code == 200 # TODO: better error message
- results = json.loads(response.text)
- return results
+ # raise an HTTPError if the HTTP request returned an unsuccessful status code:
+ response.raise_for_status()
+ return response.json()
def equal_test_conditions(testapi_input, nfvbench_input):
@@ -148,7 +159,7 @@ def equal_test_conditions(testapi_input, nfvbench_input):
The following dict keys are currently supported:
- mandatory keys: 'duration_sec', 'frame_sizes', 'flow_count', 'rate'
- - optional keys: 'user_label', 'flavor_type'
+ - optional keys: 'user_label'
Optional keys are taken into account only when they can be found in
`nfvbench_input`, else they are ignored.
@@ -161,8 +172,6 @@ def equal_test_conditions(testapi_input, nfvbench_input):
required_keys = ['duration_sec', 'frame_sizes', 'flow_count', 'rate']
if 'user_label' in nfvbench_input:
required_keys.append('user_label')
- if 'flavor_type' in nfvbench_input:
- required_keys.append('flavor_type')
try:
testapi_subset = {k: testapi_input[k] for k in required_keys}
@@ -180,7 +189,7 @@ def nfvbench_input_to_str(nfvbench_input: dict) -> str:
nfvbench_input: dict of nfvbench test parameters
"""
string = ""
- for key in ['user_label', 'flavor_type', 'frame_sizes', 'flow_count', 'rate', 'duration_sec']:
+ for key in ['user_label', 'frame_sizes', 'flow_count', 'rate', 'duration_sec']:
if key in nfvbench_input:
string += f"{key}={nfvbench_input[key]} "
return string