From f1fb78a6e6a48a179bfc079c8e58559a751532c6 Mon Sep 17 00:00:00 2001 From: debugtalk Date: Sun, 7 Jun 2020 10:59:24 +0800 Subject: [PATCH] fix: clear project_meta before each test --- examples/postman_echo/conftest.py | 64 +++++++++++++++++++++++++++++++ tests/cli_test.py | 3 +- tests/make_test.py | 10 +++-- tests/runner_test.py | 2 + 4 files changed, 74 insertions(+), 5 deletions(-) create mode 100644 examples/postman_echo/conftest.py diff --git a/examples/postman_echo/conftest.py b/examples/postman_echo/conftest.py new file mode 100644 index 00000000..b16b9c1e --- /dev/null +++ b/examples/postman_echo/conftest.py @@ -0,0 +1,64 @@ +# NOTICE: Generated By HttpRunner. +import json +import os +import time + +import pytest +from loguru import logger + +from httprunner.utils import get_platform + + +@pytest.fixture(scope="session", autouse=True) +def session_fixture(request): + """setup and teardown each task""" + logger.info(f"start running testcases ...") + + start_at = time.time() + + yield + + logger.info(f"task finished, generate task summary for --save-tests") + + summary = { + "success": True, + "stat": { + "testcases": {"total": 0, "success": 0, "fail": 0}, + "teststeps": {"total": 0, "failures": 0, "successes": 0}, + }, + "time": {"start_at": start_at, "duration": time.time() - start_at}, + "platform": get_platform(), + "details": [], + } + + for item in request.node.items: + testcase_summary = item.instance.get_summary() + summary["success"] &= testcase_summary.success + + summary["stat"]["testcases"]["total"] += 1 + summary["stat"]["teststeps"]["total"] += len(testcase_summary.step_datas) + if testcase_summary.success: + summary["stat"]["testcases"]["success"] += 1 + summary["stat"]["teststeps"]["successes"] += len( + testcase_summary.step_datas + ) + else: + summary["stat"]["testcases"]["fail"] += 1 + summary["stat"]["teststeps"]["successes"] += ( + len(testcase_summary.step_datas) - 1 + ) + summary["stat"]["teststeps"]["failures"] += 1 + + testcase_summary_json = testcase_summary.dict() + testcase_summary_json["records"] = testcase_summary_json.pop("step_datas") + summary["details"].append(testcase_summary_json) + + summary_path = "/Users/debugtalk/MyProjects/HttpRunner-dev/HttpRunner/examples/postman_echo/logs/request.methods/hardcode.summary.json" + summary_dir = os.path.dirname(summary_path) + os.makedirs(summary_dir, exist_ok=True) + + with open(summary_path, "w", encoding="utf-8") as f: + json.dump(summary, f, indent=4) + + logger.info(f"generated task summary: {summary_path}") + diff --git a/tests/cli_test.py b/tests/cli_test.py index 3ddd0efb..c84e294b 100644 --- a/tests/cli_test.py +++ b/tests/cli_test.py @@ -40,9 +40,10 @@ class TestCli(unittest.TestCase): self.assertIn(__description__, self.captured_output.getvalue().strip()) def test_debug_pytest(self): - pytest.main( + exit_code = pytest.main( [ "-s", "examples/postman_echo/request_methods/request_with_testcase_reference_test.py", ] ) + self.assertEqual(exit_code, 0) diff --git a/tests/make_test.py b/tests/make_test.py index 122fbde6..33de21d9 100644 --- a/tests/make_test.py +++ b/tests/make_test.py @@ -9,9 +9,15 @@ from httprunner.make import ( make_teststep_chain_style, pytest_files_run_set, ) +from httprunner import loader class TestMake(unittest.TestCase): + def setUp(self) -> None: + pytest_files_made_cache_mapping.clear() + pytest_files_run_set.clear() + loader.project_meta = None + def test_make_testcase(self): path = ["examples/postman-echo/request.methods/request_with_variables.yml"] testcase_python_list = main_make(path) @@ -27,8 +33,6 @@ class TestMake(unittest.TestCase): path = [ "examples/postman-echo/request.methods/request_with_testcase_reference.yml" ] - pytest_files_made_cache_mapping.clear() - pytest_files_run_set.clear() testcase_python_list = main_make(path) self.assertEqual(len(testcase_python_list), 1) self.assertIn( @@ -90,8 +94,6 @@ from examples.postman_echo.request_methods.request_with_functions_test import ( def test_make_testsuite(self): path = ["examples/postman-echo/request.methods/demo_testsuite.yml"] - pytest_files_made_cache_mapping.clear() - pytest_files_run_set.clear() testcase_python_list = main_make(path) self.assertEqual(len(testcase_python_list), 2) self.assertIn( diff --git a/tests/runner_test.py b/tests/runner_test.py index 66cef1c4..a63c0694 100644 --- a/tests/runner_test.py +++ b/tests/runner_test.py @@ -1,10 +1,12 @@ import unittest +from httprunner import loader from httprunner.runner import HttpRunner class TestHttpRunner(unittest.TestCase): def setUp(self): + loader.project_meta = None self.runner = HttpRunner() def test_run_testcase_by_path_request_only(self):