Merge pull request #349 from HttpRunner/bugfix

fix #309 #312
This commit is contained in:
debugtalk
2018-08-22 23:33:49 +08:00
committed by GitHub
6 changed files with 70 additions and 5 deletions

View File

@@ -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)

View File

@@ -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

View File

@@ -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):

View File

@@ -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}

View File

@@ -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

View File

@@ -343,6 +343,37 @@ 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"]
)
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):