behave_tests: refactor TestAPI HTTP request
[nfvbench.git] / behave_tests / features / steps / testapi.py
index 67e5104..15ef8b1 100644 (file)
 #    under the License.
 #
 
 #    under the License.
 #
 
-import json
+import logging
 import requests
 
 
 class TestapiClient:
 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"
         """
         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._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.
 
     def find_last_result(self, testapi_params, scenario_tag: str, nfvbench_test_input):
         """Search testapi database and return latest result matching filters.
@@ -118,19 +117,31 @@ class TestapiClient:
         Perform an HTTP GET request on testapi, check status code and return JSON
         results as dictionary.
 
         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:
 
         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)
         """
         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):
 
 
 def equal_test_conditions(testapi_input, nfvbench_input):