mirror of
https://github.com/httprunner/httprunner.git
synced 2026-08-25 01:59:52 +08:00
fix: compatibility with v2, body.lst.0.name
This commit is contained in:
@@ -4,23 +4,29 @@ This module handles compatibility issues between testcase format v2 and v3.
|
|||||||
|
|
||||||
from typing import List, Dict, Text
|
from typing import List, Dict, Text
|
||||||
|
|
||||||
|
from httprunner import exceptions
|
||||||
|
|
||||||
|
|
||||||
def convert_jmespath(raw: Text) -> Text:
|
def convert_jmespath(raw: Text) -> Text:
|
||||||
# content.xx/json.xx => body.xx
|
# content.xx/json.xx => body.xx
|
||||||
if raw.startswith("content"):
|
if raw.startswith("content"):
|
||||||
return f"body{raw[len('content'):]}"
|
raw = f"body{raw[len('content'):]}"
|
||||||
elif raw.startswith("json"):
|
elif raw.startswith("json"):
|
||||||
return f"body{raw[len('json'):]}"
|
raw = f"body{raw[len('json'):]}"
|
||||||
|
|
||||||
# add quotes for field with separator, e.g. headers.Content-Type
|
|
||||||
raw_list = []
|
raw_list = []
|
||||||
for item in raw.split("."):
|
for item in raw.split("."):
|
||||||
if "-" in item:
|
if "-" in item:
|
||||||
|
# add quotes for field with separator, e.g. headers.Content-Type
|
||||||
raw_list.append(f'"{item}"')
|
raw_list.append(f'"{item}"')
|
||||||
|
elif item.isdigit():
|
||||||
|
# convert lst.0.name to lst[0].name
|
||||||
|
raw_list.append(f"[{item}]")
|
||||||
else:
|
else:
|
||||||
raw_list.append(item)
|
raw_list.append(item)
|
||||||
|
|
||||||
return ".".join(raw_list)
|
# lst.[0].name => lst[0].name
|
||||||
|
return ".".join(raw_list).replace(".[", "[")
|
||||||
|
|
||||||
|
|
||||||
def convert_extractors(extractors: List) -> Dict:
|
def convert_extractors(extractors: List) -> Dict:
|
||||||
@@ -33,13 +39,19 @@ def convert_extractors(extractors: List) -> Dict:
|
|||||||
{"varA": "body.varA", "varB": "body.varB"}
|
{"varA": "body.varA", "varB": "body.varB"}
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if isinstance(extractors, Dict):
|
v3_extractors: Dict = {}
|
||||||
return extractors
|
|
||||||
|
|
||||||
v3_extractors = {}
|
if isinstance(extractors, List):
|
||||||
for extractor in extractors:
|
for extractor in extractors:
|
||||||
for k, v in extractor.items():
|
for k, v in extractor.items():
|
||||||
v3_extractors[k] = convert_jmespath(v)
|
v3_extractors[k] = v
|
||||||
|
elif isinstance(extractors, Dict):
|
||||||
|
v3_extractors = extractors
|
||||||
|
else:
|
||||||
|
raise exceptions.FileFormatError(f"Invalid extractor: {extractors}")
|
||||||
|
|
||||||
|
for k, v in v3_extractors.items():
|
||||||
|
v3_extractors[k] = convert_jmespath(v)
|
||||||
|
|
||||||
return v3_extractors
|
return v3_extractors
|
||||||
|
|
||||||
|
|||||||
@@ -5,18 +5,46 @@ from httprunner import compat
|
|||||||
|
|
||||||
|
|
||||||
class TestCompat(unittest.TestCase):
|
class TestCompat(unittest.TestCase):
|
||||||
|
|
||||||
def test_convert_jmespath(self):
|
def test_convert_jmespath(self):
|
||||||
|
|
||||||
|
self.assertEqual(compat.convert_jmespath("content.abc"), "body.abc")
|
||||||
|
self.assertEqual(compat.convert_jmespath("json.abc"), "body.abc")
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
compat.convert_jmespath("content.abc"),
|
compat.convert_jmespath("headers.Content-Type"), 'headers."Content-Type"'
|
||||||
"body.abc"
|
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
compat.convert_jmespath("json.abc"),
|
compat.convert_jmespath("body.data.buildings.0.building_id"),
|
||||||
"body.abc"
|
"body.data.buildings[0].building_id",
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_convert_extractors(self):
|
||||||
|
self.assertEqual(
|
||||||
|
compat.convert_extractors(
|
||||||
|
[{"varA": "content.varA"}, {"varB": "json.varB"}]
|
||||||
|
),
|
||||||
|
{"varA": "body.varA", "varB": "body.varB"},
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
compat.convert_jmespath("headers.Content-Type"),
|
compat.convert_extractors([{"varA": "content.0.varA"}]),
|
||||||
'headers."Content-Type"'
|
{"varA": "body[0].varA"},
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
compat.convert_extractors({"varA": "content.0.varA"}),
|
||||||
|
{"varA": "body[0].varA"},
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_convert_validators(self):
|
||||||
|
self.assertEqual(
|
||||||
|
compat.convert_validators(
|
||||||
|
[{"check": "content.abc", "assert": "eq", "expect": 201}]
|
||||||
|
),
|
||||||
|
[{"check": "body.abc", "assert": "eq", "expect": 201}],
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
compat.convert_validators([{"eq": ["content.abc", 201]}]),
|
||||||
|
[{"eq": ["body.abc", 201]}],
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
compat.convert_validators([{"eq": ["content.0.name", 201]}]),
|
||||||
|
[{"eq": ["body[0].name", 201]}],
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user