mirror of
https://github.com/httprunner/httprunner.git
synced 2026-06-06 08:19:45 +08:00
Merge pull request #531 from HttpRunner/save-variables-output
implement method to get variables and output
This commit is contained in:
@@ -194,6 +194,35 @@ class HttpRunner(object):
|
|||||||
|
|
||||||
return report_path
|
return report_path
|
||||||
|
|
||||||
|
def get_vars_out(self):
|
||||||
|
""" get variables and output
|
||||||
|
Returns:
|
||||||
|
list: list of variables and output.
|
||||||
|
if tests are parameterized, list items are corresponded to parameters.
|
||||||
|
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"in": {
|
||||||
|
"user1": "leo"
|
||||||
|
},
|
||||||
|
"out": {
|
||||||
|
"out1": "out_value_1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{...}
|
||||||
|
]
|
||||||
|
|
||||||
|
None: returns None if tests not started or finished or corrupted.
|
||||||
|
|
||||||
|
"""
|
||||||
|
if not self._summary:
|
||||||
|
return None
|
||||||
|
|
||||||
|
return [
|
||||||
|
summary["in_out"]
|
||||||
|
for summary in self._summary["details"]
|
||||||
|
]
|
||||||
|
|
||||||
def run_path(self, path, dot_env_path=None, mapping=None):
|
def run_path(self, path, dot_env_path=None, mapping=None):
|
||||||
""" run testcase/testsuite file or folder.
|
""" run testcase/testsuite file or folder.
|
||||||
|
|
||||||
|
|||||||
@@ -805,7 +805,7 @@ def __parse_testcase_tests(tests, config, project_mapping):
|
|||||||
project_mapping (dict):
|
project_mapping (dict):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
config_variables = config.pop("variables", {})
|
config_variables = config.get("variables", {})
|
||||||
config_base_url = config.pop("base_url", "")
|
config_base_url = config.pop("base_url", "")
|
||||||
config_verify = config.pop("verify", True)
|
config_verify = config.pop("verify", True)
|
||||||
functions = project_mapping.get("functions", {})
|
functions = project_mapping.get("functions", {})
|
||||||
|
|||||||
@@ -82,6 +82,68 @@ class TestHttpRunner(ApiServerUnittest):
|
|||||||
self.runner.run(self.testcase_cli_path)
|
self.runner.run(self.testcase_cli_path)
|
||||||
self.assertEqual(self.runner.summary["stat"]["teststeps"]["skipped"], 4)
|
self.assertEqual(self.runner.summary["stat"]["teststeps"]["skipped"], 4)
|
||||||
|
|
||||||
|
def test_save_variables_output(self):
|
||||||
|
testcases = [
|
||||||
|
{
|
||||||
|
"config": {
|
||||||
|
'name': "post data",
|
||||||
|
'variables': {
|
||||||
|
"var1": "abc",
|
||||||
|
"var2": "def"
|
||||||
|
},
|
||||||
|
"output": ["status_code", "req_data"]
|
||||||
|
},
|
||||||
|
"teststeps": [
|
||||||
|
{
|
||||||
|
"name": "post data",
|
||||||
|
"request": {
|
||||||
|
"url": "{}/post".format(HTTPBIN_SERVER),
|
||||||
|
"method": "POST",
|
||||||
|
"headers": {
|
||||||
|
"User-Agent": "python-requests/2.18.4",
|
||||||
|
"Content-Type": "application/json"
|
||||||
|
},
|
||||||
|
"data": "$var1"
|
||||||
|
},
|
||||||
|
"extract": {
|
||||||
|
"status_code": "status_code",
|
||||||
|
"req_data": "content.data"
|
||||||
|
},
|
||||||
|
"validate": [
|
||||||
|
{"eq": ["status_code", 200]}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
tests_mapping = {
|
||||||
|
"testcases": testcases
|
||||||
|
}
|
||||||
|
self.runner.run_tests(tests_mapping)
|
||||||
|
vars_out = self.runner.get_vars_out()
|
||||||
|
self.assertIsInstance(vars_out, list)
|
||||||
|
self.assertEqual(vars_out[0]["in"]["var1"], "abc")
|
||||||
|
self.assertEqual(vars_out[0]["in"]["var2"], "def")
|
||||||
|
self.assertEqual(vars_out[0]["out"]["status_code"], 200)
|
||||||
|
self.assertEqual(vars_out[0]["out"]["req_data"], "abc")
|
||||||
|
|
||||||
|
def test_save_variables_output_with_parameters(self):
|
||||||
|
testcase_file_path = os.path.join(
|
||||||
|
os.getcwd(), 'tests/testsuites/create_users_with_parameters.yml')
|
||||||
|
self.runner.run(testcase_file_path)
|
||||||
|
vars_out = self.runner.get_vars_out()
|
||||||
|
self.assertIsInstance(vars_out, list)
|
||||||
|
self.assertEqual(len(vars_out), 6)
|
||||||
|
self.assertEqual(vars_out[0]["in"]["uid"], 101)
|
||||||
|
self.assertEqual(vars_out[0]["in"]["device_sn"], "TESTSUITE_X1")
|
||||||
|
token1 = vars_out[0]["out"]["token"]
|
||||||
|
self.assertEqual(len(token1), 16)
|
||||||
|
self.assertEqual(vars_out[5]["in"]["uid"], 103)
|
||||||
|
self.assertEqual(vars_out[5]["in"]["device_sn"], "TESTSUITE_X2")
|
||||||
|
token2 = vars_out[0]["out"]["token"]
|
||||||
|
self.assertEqual(len(token2), 16)
|
||||||
|
self.assertEqual(token1, token2)
|
||||||
|
|
||||||
def test_html_report(self):
|
def test_html_report(self):
|
||||||
report_save_dir = os.path.join(os.getcwd(), 'reports', "demo")
|
report_save_dir = os.path.join(os.getcwd(), 'reports', "demo")
|
||||||
runner = HttpRunner(failfast=True, report_dir=report_save_dir)
|
runner = HttpRunner(failfast=True, report_dir=report_save_dir)
|
||||||
@@ -483,7 +545,7 @@ class TestApi(ApiServerUnittest):
|
|||||||
|
|
||||||
self.assertEqual(len(parsed_testcases), 1)
|
self.assertEqual(len(parsed_testcases), 1)
|
||||||
|
|
||||||
self.assertNotIn("variables", parsed_testcases[0]["config"])
|
self.assertIn("variables", parsed_testcases[0]["config"])
|
||||||
self.assertEqual(len(parsed_testcases[0]["teststeps"]), 2)
|
self.assertEqual(len(parsed_testcases[0]["teststeps"]), 2)
|
||||||
|
|
||||||
test_dict1 = parsed_testcases[0]["teststeps"][0]
|
test_dict1 = parsed_testcases[0]["teststeps"][0]
|
||||||
|
|||||||
@@ -6,6 +6,8 @@
|
|||||||
variables:
|
variables:
|
||||||
uid: 9001
|
uid: 9001
|
||||||
device_sn: "TESTCASE_CREATE_XXX"
|
device_sn: "TESTCASE_CREATE_XXX"
|
||||||
|
output:
|
||||||
|
- token
|
||||||
|
|
||||||
- test:
|
- test:
|
||||||
name: setup and reset all (override) for $device_sn.
|
name: setup and reset all (override) for $device_sn.
|
||||||
|
|||||||
Reference in New Issue
Block a user