From 3f0cbc2245b7f353b831216c6a5af352fd262e8c Mon Sep 17 00:00:00 2001 From: debugtalk Date: Thu, 9 Apr 2020 10:59:27 +0800 Subject: [PATCH] change: remove compatibility with testcase format v1 --- docs/CHANGELOG.md | 6 + httprunner/loader/buildup.py | 105 +++---------- httprunner/loader/check.py | 16 -- .../loader/schemas/testcase.schema.v1.json | 138 ------------------ 4 files changed, 27 insertions(+), 238 deletions(-) delete mode 100644 httprunner/loader/schemas/testcase.schema.v1.json diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index c8d2ed94..20dfa5d9 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,5 +1,11 @@ # Release History +## 3.0.2 (2020-04-09) + +**Changed** + +- remove compatibility with testcase format v1 + ## 3.0.1 (2020-03-24) **Changed** diff --git a/httprunner/loader/buildup.py b/httprunner/loader/buildup.py index 12f2bc7f..55f36287 100644 --- a/httprunner/loader/buildup.py +++ b/httprunner/loader/buildup.py @@ -78,11 +78,8 @@ def __extend_with_testcase_ref(raw_testinfo): ) loaded_testcase = load_file(testcase_path) - if isinstance(loaded_testcase, list): - # make compatible with version < 2.2.0 - testcase_dict = load_testcase(loaded_testcase) - elif isinstance(loaded_testcase, dict) and "teststeps" in loaded_testcase: - # format version 2, implemented in 2.2.0 + # TODO: validate with pydantic + if isinstance(loaded_testcase, dict) and "teststeps" in loaded_testcase: testcase_dict = load_testcase_v2(loaded_testcase) else: raise exceptions.FileFormatError( @@ -147,57 +144,6 @@ def load_teststep(raw_testinfo): return raw_testinfo -def load_testcase(raw_testcase): - """ load testcase with api/testcase references. - - Args: - raw_testcase (list): raw testcase content loaded from JSON/YAML file: - [ - # config part - { - "config": { - "name": "XXXX", - "base_url": "https://debugtalk.com" - } - }, - # teststeps part - { - "test": {...} - }, - { - "test": {...} - } - ] - - Returns: - dict: loaded testcase content - { - "config": {}, - "teststeps": [test11, test12] - } - - """ - JsonSchemaChecker.validate_testcase_v1_format(raw_testcase) - config = {} - tests = [] - - for item in raw_testcase: - key, test_block = item.popitem() - if key == "config": - config.update(test_block) - elif key == "test": - tests.append(load_teststep(test_block)) - else: - logger.warning( - f"unexpected block key: {key}. block key should only be 'config' or 'test'." - ) - - return { - "config": config, - "teststeps": tests - } - - def load_testcase_v2(raw_testcase): """ load testcase in format version 2. @@ -311,7 +257,7 @@ def load_testsuite(raw_testsuite): return raw_testsuite -def load_test_file(path): +def load_test_file(path: str) -> dict: """ load test file, file maybe testcase/testsuite/api Args: @@ -347,38 +293,29 @@ def load_test_file(path): """ raw_content = load_file(path) - if isinstance(raw_content, dict): + if not isinstance(raw_content, dict): + # invalid format + raise exceptions.FileFormatError("Invalid test file format!") - if "testcases" in raw_content: - # file_type: testsuite - loaded_content = load_testsuite(raw_content) - loaded_content["path"] = path - loaded_content["type"] = "testsuite" + if "testcases" in raw_content: + # file_type: testsuite + loaded_content = load_testsuite(raw_content) + loaded_content["path"] = path + loaded_content["type"] = "testsuite" - elif "teststeps" in raw_content: - # file_type: testcase (format version 2) - loaded_content = load_testcase_v2(raw_content) - loaded_content["path"] = path - loaded_content["type"] = "testcase" - - elif "request" in raw_content: - # file_type: api - JsonSchemaChecker.validate_api_format(raw_content) - loaded_content = raw_content - loaded_content["path"] = path - loaded_content["type"] = "api" - - else: - # invalid format - raise exceptions.FileFormatError("Invalid test file format!") - - elif isinstance(raw_content, list) and len(raw_content) > 0: - # file_type: testcase - # make compatible with version < 2.2.0 - loaded_content = load_testcase(raw_content) + elif "teststeps" in raw_content: + # file_type: testcase (format version 2) + loaded_content = load_testcase_v2(raw_content) loaded_content["path"] = path loaded_content["type"] = "testcase" + elif "request" in raw_content: + # file_type: api + JsonSchemaChecker.validate_api_format(raw_content) + loaded_content = raw_content + loaded_content["path"] = path + loaded_content["type"] = "api" + else: # invalid format raise exceptions.FileFormatError("Invalid test file format!") diff --git a/httprunner/loader/check.py b/httprunner/loader/check.py index ba248ec7..63d7149b 100644 --- a/httprunner/loader/check.py +++ b/httprunner/loader/check.py @@ -11,7 +11,6 @@ from httprunner import exceptions schemas_root_dir = os.path.join(os.path.dirname(__file__), "schemas") common_schema_path = os.path.join(schemas_root_dir, "common.schema.json") api_schema_path = os.path.join(schemas_root_dir, "api.schema.json") -testcase_schema_v1_path = os.path.join(schemas_root_dir, "testcase.schema.v1.json") testcase_schema_v2_path = os.path.join(schemas_root_dir, "testcase.schema.v2.json") testsuite_schema_v1_path = os.path.join(schemas_root_dir, "testsuite.schema.v1.json") testsuite_schema_v2_path = os.path.join(schemas_root_dir, "testsuite.schema.v2.json") @@ -29,9 +28,6 @@ with io.open(common_schema_path, encoding='utf-8') as f: common_schema = json.load(f) resolver = jsonschema.RefResolver(absolute_base_path, common_schema) -with io.open(testcase_schema_v1_path, encoding='utf-8') as f: - testcase_schema_v1 = json.load(f) - with io.open(testcase_schema_v2_path, encoding='utf-8') as f: testcase_schema_v2 = json.load(f) @@ -62,12 +58,6 @@ class JsonSchemaChecker(object): """ return JsonSchemaChecker.validate_format(content, api_schema) - @staticmethod - def validate_testcase_v1_format(content): - """ check testcase format v1 if valid - """ - return JsonSchemaChecker.validate_format(content, testcase_schema_v1) - @staticmethod def validate_testcase_v2_format(content): """ check testcase format v2 if valid @@ -175,12 +165,6 @@ def is_test_content(data_structure): except exceptions.FileFormatError: pass - try: - JsonSchemaChecker.validate_testcase_v2_format(item) - is_testcase = True - except exceptions.FileFormatError: - pass - if not is_testcase: return False diff --git a/httprunner/loader/schemas/testcase.schema.v1.json b/httprunner/loader/schemas/testcase.schema.v1.json deleted file mode 100644 index 823399cc..00000000 --- a/httprunner/loader/schemas/testcase.schema.v1.json +++ /dev/null @@ -1,138 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema", - "description": "httprunner testcase schema v1 definition", - "type": "array", - "definitions": { - "test": { - "type": "object", - "oneOf": [ - { - "properties": { - "name": { - "$ref": "common.schema.json#/definitions/name" - }, - "request": { - "description": "define api request directly", - "$ref": "common.schema.json#/definitions/request" - }, - "variables": { - "$ref": "common.schema.json#/definitions/variables" - }, - "extract": { - "$ref": "common.schema.json#/definitions/extract" - }, - "validate": { - "$ref": "common.schema.json#/definitions/validate" - }, - "setup_hooks": { - "$ref": "common.schema.json#/definitions/hook" - }, - "teardown_hooks": { - "$ref": "common.schema.json#/definitions/hook" - } - }, - "required": [ - "name", - "request" - ] - }, - { - "properties": { - "name": { - "$ref": "common.schema.json#/definitions/name" - }, - "api": { - "description": "api reference, value is api file relative path", - "type": "string" - }, - "variables": { - "$ref": "common.schema.json#/definitions/variables" - }, - "extract": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "$ref": "common.schema.json#/definitions/extract" - } - ] - }, - "validate": { - "$ref": "common.schema.json#/definitions/validate" - }, - "setup_hooks": { - "$ref": "common.schema.json#/definitions/hook" - }, - "teardown_hooks": { - "$ref": "common.schema.json#/definitions/hook" - } - }, - "required": [ - "name", - "api" - ] - }, - { - "properties": { - "name": { - "$ref": "common.schema.json#/definitions/name" - }, - "testcase": { - "description": "testcase reference, value is testcase file relative path", - "type": "string" - }, - "variables": { - "$ref": "common.schema.json#/definitions/variables" - }, - "extract": { - "type": "array", - "items": { - "type": "string" - } - }, - "setup_hooks": { - "$ref": "common.schema.json#/definitions/hook" - }, - "teardown_hooks": { - "$ref": "common.schema.json#/definitions/hook" - } - }, - "required": [ - "name", - "testcase" - ] - } - ] - } - }, - "items": { - "type": "object", - "oneOf": [ - { - "type": "object", - "properties": { - "config": { - "$ref": "common.schema.json#/definitions/config" - } - }, - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "test": { - "$ref": "testcase.schema.v1.json#/definitions/test" - } - }, - "additionalProperties": false - } - ], - "minProperties": 1, - "maxProperties": 1 - }, - "minItems": 2 -} \ No newline at end of file