From 949fac3a936d98c5291b8781d3e665401818e72b Mon Sep 17 00:00:00 2001 From: debugtalk Date: Wed, 22 Aug 2018 22:47:12 +0800 Subject: [PATCH 1/2] change function name --- httprunner/api.py | 8 ++++---- httprunner/context.py | 2 +- tests/test_api.py | 16 ++++++++++++++++ 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/httprunner/api.py b/httprunner/api.py index 54065a37..0d3393a5 100644 --- a/httprunner/api.py +++ b/httprunner/api.py @@ -57,7 +57,7 @@ class HttpRunner(object): self.project_mapping = loader.project_mapping utils.set_os_environ(self.project_mapping["env"]) - def __load_testcases(self, path_or_testcases): + def load_tests(self, path_or_testcases): """ load testcases, extend and merge with api/testcase definitions. Args: @@ -122,7 +122,7 @@ class HttpRunner(object): return testcases - def __parse_testcases(self, testcases, variables_mapping=None): + def parse_tests(self, testcases, variables_mapping=None): """ parse testcases configs, including variables/parameters/name/request. Args: @@ -250,8 +250,8 @@ class HttpRunner(object): """ # parser - testcases_list = self.__load_testcases(path_or_testcases) - parsed_testcases_list = self.__parse_testcases(testcases_list) + testcases_list = self.load_tests(path_or_testcases) + parsed_testcases_list = self.parse_tests(testcases_list) # initialize unittest_runner, test_suite = self.__initialize(parsed_testcases_list) diff --git a/httprunner/context.py b/httprunner/context.py index b41733a6..35c42ceb 100644 --- a/httprunner/context.py +++ b/httprunner/context.py @@ -109,7 +109,7 @@ class Context(object): """ if level == "testcase": - # testcase config request dict has been parsed in __parse_testcases + # testcase config request dict has been parsed in parse_tests self.TESTCASE_SHARED_REQUEST_MAPPING = request_dict return request_dict diff --git a/tests/test_api.py b/tests/test_api.py index 540d8c44..bdc3c7fa 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -343,6 +343,22 @@ class TestHttpRunner(ApiServerUnittest): self.assertIn("get_token", hrunner.project_mapping["def-api"]) self.assertIn("setup_and_reset", hrunner.project_mapping["def-testcase"]) + def test_load_tests(self): + testcase_file_path = os.path.join( + os.getcwd(), 'tests/data/demo_testcase.yml') + runner = HttpRunner() + testcases = runner.load_tests(testcase_file_path) + self.assertIsInstance(testcases, list) + self.assertEqual( + testcases[0]["config"]["request"], + '$demo_default_request' + ) + self.assertEqual(testcases[0]["config"]["name"], '123$var_a') + self.assertIn( + "sum_two", + runner.project_mapping["debugtalk"]["functions"] + ) + class TestLocustRunner(ApiServerUnittest): From b3eede8762f91e867443219a10766acf9ef0dbd5 Mon Sep 17 00:00:00 2001 From: debugtalk Date: Wed, 22 Aug 2018 23:20:15 +0800 Subject: [PATCH 2/2] fix #309 #312 --- httprunner/utils.py | 2 ++ tests/data/demo_testcase.yml | 23 +++++++++++++++++++++++ tests/debugtalk.py | 9 +++++++++ tests/test_api.py | 15 +++++++++++++++ 4 files changed, 49 insertions(+) create mode 100644 tests/data/demo_testcase.yml diff --git a/httprunner/utils.py b/httprunner/utils.py index 395a70c7..c4a76220 100644 --- a/httprunner/utils.py +++ b/httprunner/utils.py @@ -333,6 +333,8 @@ def print_io(in_out): for variable, value in in_out.items(): if isinstance(value, tuple): continue + elif isinstance(value, dict): + value = json.dumps(value) if is_py2: if isinstance(variable, unicode): diff --git a/tests/data/demo_testcase.yml b/tests/data/demo_testcase.yml new file mode 100644 index 00000000..e16eea4d --- /dev/null +++ b/tests/data/demo_testcase.yml @@ -0,0 +1,23 @@ +- config: + name: "123$var_a" + variables: + - var_a: 0 + - var_c: "${sum_two(1, 2)}" + parameters: + - "var_a-var_b": + - [11, 21] + - [12, 22] + - "app_version": "${gen_app_version()}" + request: $demo_default_request + +- test: + name: testcase1-$var_a + request: + url: /api1 + method: GET + headers: + var_a: $var_a + var_b: $var_b + var_c: $var_c + validate: + - {"check": "status_code", "comparator": "eq", "expect": 200} diff --git a/tests/debugtalk.py b/tests/debugtalk.py index 83f91ad3..d232fe0e 100644 --- a/tests/debugtalk.py +++ b/tests/debugtalk.py @@ -8,6 +8,15 @@ from tests.api_server import HTTPBIN_SERVER, SECRET_KEY, gen_md5, get_sign BASE_URL = "http://127.0.0.1:5000" +demo_default_request = { + "base_url": "$BASE_URL", + "headers": { + "content-type": "application/json" + } +} + +def sum_two(m, n): + return m + n def sum_status_code(status_code, expect_sum): """ sum status code digits diff --git a/tests/test_api.py b/tests/test_api.py index bdc3c7fa..9baf5338 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -359,6 +359,21 @@ class TestHttpRunner(ApiServerUnittest): runner.project_mapping["debugtalk"]["functions"] ) + def test_parse_tests(self): + testcase_file_path = os.path.join( + os.getcwd(), 'tests/data/demo_testcase.yml') + runner = HttpRunner() + testcases = runner.load_tests(testcase_file_path) + parsed_testcases = runner.parse_tests(testcases) + self.assertEqual(parsed_testcases[0]["config"]["variables"]["var_c"], 3) + self.assertEqual(len(parsed_testcases), 2 * 2) + self.assertEqual( + parsed_testcases[0]["config"]["request"]["base_url"], + 'http://127.0.0.1:5000' + ) + self.assertIsInstance(parsed_testcases, list) + self.assertEqual(parsed_testcases[0]["config"]["name"], '12311') + class TestLocustRunner(ApiServerUnittest):