mirror of
https://github.com/httprunner/httprunner.git
synced 2026-09-04 23:16:57 +08:00
fix #366: teststep name
This commit is contained in:
+30
-3
@@ -35,6 +35,7 @@ class HttpRunner(object):
|
|||||||
}
|
}
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
loader.reset_loader()
|
||||||
loader.dot_env_path = kwargs.pop("dot_env_path", None)
|
loader.dot_env_path = kwargs.pop("dot_env_path", None)
|
||||||
self.http_client_session = kwargs.pop("http_client_session", None)
|
self.http_client_session = kwargs.pop("http_client_session", None)
|
||||||
self.kwargs = kwargs
|
self.kwargs = kwargs
|
||||||
@@ -173,7 +174,7 @@ class HttpRunner(object):
|
|||||||
|
|
||||||
return parsed_testcases_list
|
return parsed_testcases_list
|
||||||
|
|
||||||
def __initialize(self, testcases):
|
def initialize(self, testcases):
|
||||||
""" initialize test runner with parsed testcases.
|
""" initialize test runner with parsed testcases.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
@@ -183,6 +184,32 @@ class HttpRunner(object):
|
|||||||
tuple: (unittest.TextTestRunner(), unittest.TestSuite())
|
tuple: (unittest.TextTestRunner(), unittest.TestSuite())
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
def __add_teststep(test_runner, config, teststep_dict):
|
||||||
|
""" add teststep to testcase.
|
||||||
|
"""
|
||||||
|
def test(self):
|
||||||
|
try:
|
||||||
|
test_runner.run_test(teststep_dict)
|
||||||
|
except exceptions.MyBaseFailure as ex:
|
||||||
|
self.fail(str(ex))
|
||||||
|
finally:
|
||||||
|
if hasattr(test_runner.http_client_session, "meta_data"):
|
||||||
|
self.meta_data = test_runner.http_client_session.meta_data
|
||||||
|
self.meta_data["validators"] = test_runner.evaluated_validators
|
||||||
|
test_runner.http_client_session.init_meta_data()
|
||||||
|
|
||||||
|
try:
|
||||||
|
teststep_dict["name"] = parser.parse_data(
|
||||||
|
teststep_dict["name"],
|
||||||
|
config.get("variables", {}),
|
||||||
|
config.get("functions", {})
|
||||||
|
)
|
||||||
|
except exceptions.VariableNotFound:
|
||||||
|
pass
|
||||||
|
|
||||||
|
test.__doc__ = teststep_dict["name"]
|
||||||
|
return test
|
||||||
|
|
||||||
self.kwargs.setdefault("resultclass", report.HtmlTestResult)
|
self.kwargs.setdefault("resultclass", report.HtmlTestResult)
|
||||||
unittest_runner = unittest.TextTestRunner(**self.kwargs)
|
unittest_runner = unittest.TextTestRunner(**self.kwargs)
|
||||||
|
|
||||||
@@ -200,7 +227,7 @@ class HttpRunner(object):
|
|||||||
# suppose one testcase should not have more than 9999 steps,
|
# suppose one testcase should not have more than 9999 steps,
|
||||||
# and one step should not run more than 999 times.
|
# and one step should not run more than 999 times.
|
||||||
test_method_name = 'test_{:04}_{:03}'.format(index, times_index)
|
test_method_name = 'test_{:04}_{:03}'.format(index, times_index)
|
||||||
test_method = utils.add_teststep(test_runner, teststep_dict)
|
test_method = __add_teststep(test_runner, config, teststep_dict)
|
||||||
setattr(TestSequense, test_method_name, test_method)
|
setattr(TestSequense, test_method_name, test_method)
|
||||||
|
|
||||||
loaded_testcase = loader.loadTestsFromTestCase(TestSequense)
|
loaded_testcase = loader.loadTestsFromTestCase(TestSequense)
|
||||||
@@ -240,7 +267,7 @@ class HttpRunner(object):
|
|||||||
parsed_testcases_list = self.parse_tests(testcases_list)
|
parsed_testcases_list = self.parse_tests(testcases_list)
|
||||||
|
|
||||||
# initialize
|
# initialize
|
||||||
unittest_runner, test_suite = self.__initialize(parsed_testcases_list)
|
unittest_runner, test_suite = self.initialize(parsed_testcases_list)
|
||||||
|
|
||||||
# aggregate
|
# aggregate
|
||||||
self.summary = {
|
self.summary = {
|
||||||
|
|||||||
+11
-9
@@ -25,7 +25,6 @@ project_mapping = {
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
dot_env_path = None
|
dot_env_path = None
|
||||||
|
|
||||||
testcases_cache_mapping = {}
|
testcases_cache_mapping = {}
|
||||||
project_working_directory = os.getcwd()
|
project_working_directory = os.getcwd()
|
||||||
|
|
||||||
@@ -852,6 +851,9 @@ def reset_loader():
|
|||||||
global project_working_directory
|
global project_working_directory
|
||||||
project_working_directory = os.getcwd()
|
project_working_directory = os.getcwd()
|
||||||
|
|
||||||
|
global dot_env_path
|
||||||
|
dot_env_path = None
|
||||||
|
|
||||||
project_mapping["debugtalk"] = {
|
project_mapping["debugtalk"] = {
|
||||||
"variables": {},
|
"variables": {},
|
||||||
"functions": {}
|
"functions": {}
|
||||||
@@ -937,20 +939,25 @@ def load_testcases(path):
|
|||||||
|
|
||||||
return testcases_list
|
return testcases_list
|
||||||
|
|
||||||
|
if not os.path.exists(path):
|
||||||
|
err_msg = "path not exist: {}".format(path)
|
||||||
|
logger.log_error(err_msg)
|
||||||
|
raise exceptions.FileNotFound(err_msg)
|
||||||
|
|
||||||
if not os.path.isabs(path):
|
if not os.path.isabs(path):
|
||||||
path = os.path.join(os.getcwd(), path)
|
path = os.path.join(os.getcwd(), path)
|
||||||
|
|
||||||
if path in testcases_cache_mapping:
|
if path not in testcases_cache_mapping:
|
||||||
|
load_project_tests(path)
|
||||||
|
else:
|
||||||
return testcases_cache_mapping[path]
|
return testcases_cache_mapping[path]
|
||||||
|
|
||||||
if os.path.isdir(path):
|
if os.path.isdir(path):
|
||||||
load_project_tests(path)
|
|
||||||
files_list = load_folder_files(path)
|
files_list = load_folder_files(path)
|
||||||
testcases_list = load_testcases(files_list)
|
testcases_list = load_testcases(files_list)
|
||||||
|
|
||||||
elif os.path.isfile(path):
|
elif os.path.isfile(path):
|
||||||
try:
|
try:
|
||||||
load_project_tests(path)
|
|
||||||
testcase = _load_test_file(path)
|
testcase = _load_test_file(path)
|
||||||
if testcase["teststeps"]:
|
if testcase["teststeps"]:
|
||||||
testcases_list = [testcase]
|
testcases_list = [testcase]
|
||||||
@@ -959,10 +966,5 @@ def load_testcases(path):
|
|||||||
except exceptions.FileFormatError:
|
except exceptions.FileFormatError:
|
||||||
testcases_list = []
|
testcases_list = []
|
||||||
|
|
||||||
else:
|
|
||||||
err_msg = "path not exist: {}".format(path)
|
|
||||||
logger.log_error(err_msg)
|
|
||||||
raise exceptions.FileNotFound(err_msg)
|
|
||||||
|
|
||||||
testcases_cache_mapping[path] = testcases_list
|
testcases_cache_mapping[path] = testcases_list
|
||||||
return testcases_list
|
return testcases_list
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ class Runner(object):
|
|||||||
SkipTest: skip teststep
|
SkipTest: skip teststep
|
||||||
|
|
||||||
"""
|
"""
|
||||||
# TODO: move skip to __initialize
|
# TODO: move skip to initialize
|
||||||
skip_reason = None
|
skip_reason = None
|
||||||
|
|
||||||
if "skip" in teststep_dict:
|
if "skip" in teststep_dict:
|
||||||
|
|||||||
@@ -256,24 +256,6 @@ def override_mapping_list(variables, new_mapping):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def add_teststep(test_runner, teststep_dict):
|
|
||||||
""" add teststep to testcase.
|
|
||||||
"""
|
|
||||||
def test(self):
|
|
||||||
try:
|
|
||||||
test_runner.run_test(teststep_dict)
|
|
||||||
except exceptions.MyBaseFailure as ex:
|
|
||||||
self.fail(str(ex))
|
|
||||||
finally:
|
|
||||||
if hasattr(test_runner.http_client_session, "meta_data"):
|
|
||||||
self.meta_data = test_runner.http_client_session.meta_data
|
|
||||||
self.meta_data["validators"] = test_runner.evaluated_validators
|
|
||||||
test_runner.http_client_session.init_meta_data()
|
|
||||||
|
|
||||||
test.__doc__ = teststep_dict["name"]
|
|
||||||
return test
|
|
||||||
|
|
||||||
|
|
||||||
def get_testcase_io(testcase):
|
def get_testcase_io(testcase):
|
||||||
""" get testcase input(variables) and output.
|
""" get testcase input(variables) and output.
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
- token
|
- token
|
||||||
|
|
||||||
- test:
|
- test:
|
||||||
name: get token with $user_agent and $app_version
|
name: get token with $user_agent and $username
|
||||||
api: get_token($user_agent, $device_sn, $os_platform, $app_version)
|
api: get_token($user_agent, $device_sn, $os_platform, $app_version)
|
||||||
extract:
|
extract:
|
||||||
- token: content.token
|
- token: content.token
|
||||||
|
|||||||
+35
-2
@@ -266,12 +266,12 @@ class TestHttpRunner(ApiServerUnittest):
|
|||||||
self.assertFalse(summary["success"])
|
self.assertFalse(summary["success"])
|
||||||
self.assertEqual(summary["stat"]["errors"], 1)
|
self.assertEqual(summary["stat"]["errors"], 1)
|
||||||
|
|
||||||
def test_run_testset_hardcode(self):
|
def test_run_testcase_hardcode(self):
|
||||||
for testcase_file_path in self.testcase_file_path_list:
|
for testcase_file_path in self.testcase_file_path_list:
|
||||||
runner = HttpRunner().run(testcase_file_path)
|
runner = HttpRunner().run(testcase_file_path)
|
||||||
self.assertTrue(runner.summary["success"])
|
self.assertTrue(runner.summary["success"])
|
||||||
|
|
||||||
def test_run_testsets_hardcode(self):
|
def test_run_testcases_hardcode(self):
|
||||||
runner = HttpRunner().run(self.testcase_file_path_list)
|
runner = HttpRunner().run(self.testcase_file_path_list)
|
||||||
summary = runner.summary
|
summary = runner.summary
|
||||||
self.assertTrue(summary["success"])
|
self.assertTrue(summary["success"])
|
||||||
@@ -344,6 +344,39 @@ class TestHttpRunner(ApiServerUnittest):
|
|||||||
self.assertIn("in", summary["details"][0]["in_out"])
|
self.assertIn("in", summary["details"][0]["in_out"])
|
||||||
self.assertIn("out", summary["details"][0]["in_out"])
|
self.assertIn("out", summary["details"][0]["in_out"])
|
||||||
|
|
||||||
|
def test_run_testcase_with_parameters_name(self):
|
||||||
|
testcase_file_path = os.path.join(
|
||||||
|
os.getcwd(), 'tests/data/demo_parameters.yml')
|
||||||
|
runner = HttpRunner()
|
||||||
|
testcases = runner.load_tests(testcase_file_path)
|
||||||
|
parsed_testcases = runner.parse_tests(testcases)
|
||||||
|
unittest_runner, test_suite = runner.initialize(parsed_testcases)
|
||||||
|
|
||||||
|
self.assertEqual(
|
||||||
|
test_suite._tests[0].teststeps[0]['name'],
|
||||||
|
'get token with iOS/10.1 and test1'
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
test_suite._tests[1].teststeps[0]['name'],
|
||||||
|
'get token with iOS/10.1 and test2'
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
test_suite._tests[2].teststeps[0]['name'],
|
||||||
|
'get token with iOS/10.2 and test1'
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
test_suite._tests[3].teststeps[0]['name'],
|
||||||
|
'get token with iOS/10.2 and test2'
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
test_suite._tests[4].teststeps[0]['name'],
|
||||||
|
'get token with iOS/10.3 and test1'
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
test_suite._tests[5].teststeps[0]['name'],
|
||||||
|
'get token with iOS/10.3 and test2'
|
||||||
|
)
|
||||||
|
|
||||||
def test_load_tests(self):
|
def test_load_tests(self):
|
||||||
testcase_file_path = os.path.join(
|
testcase_file_path = os.path.join(
|
||||||
os.getcwd(), 'tests/data/demo_testcase.yml')
|
os.getcwd(), 'tests/data/demo_testcase.yml')
|
||||||
|
|||||||
Reference in New Issue
Block a user