mirror of
https://github.com/httprunner/httprunner.git
synced 2026-09-05 07:26:55 +08:00
test: add unittest for ensure_testcase_v3
This commit is contained in:
+28
-21
@@ -2,7 +2,7 @@
|
|||||||
This module handles compatibility issues between testcase format v2 and v3.
|
This module handles compatibility issues between testcase format v2 and v3.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from typing import List, Dict, Text
|
from typing import List, Dict, Text, Union
|
||||||
|
|
||||||
from httprunner import exceptions
|
from httprunner import exceptions
|
||||||
|
|
||||||
@@ -29,7 +29,7 @@ def convert_jmespath(raw: Text) -> Text:
|
|||||||
return ".".join(raw_list).replace(".[", "[")
|
return ".".join(raw_list).replace(".[", "[")
|
||||||
|
|
||||||
|
|
||||||
def convert_extractors(extractors: List) -> Dict:
|
def convert_extractors(extractors: Union[List, Dict]) -> Dict:
|
||||||
""" convert extract list(v2) to dict(v3)
|
""" convert extract list(v2) to dict(v3)
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
@@ -71,19 +71,34 @@ def convert_validators(validators: List) -> List:
|
|||||||
return validators
|
return validators
|
||||||
|
|
||||||
|
|
||||||
|
def ensure_step_attachment(step: Dict) -> Dict:
|
||||||
|
|
||||||
|
test_dict = {
|
||||||
|
"name": step["name"],
|
||||||
|
}
|
||||||
|
|
||||||
|
if "variables" in step:
|
||||||
|
test_dict["variables"] = step["variables"]
|
||||||
|
|
||||||
|
if "extract" in step:
|
||||||
|
test_dict["extract"] = convert_extractors(step["extract"])
|
||||||
|
|
||||||
|
if "validate" in step:
|
||||||
|
test_dict["validate"] = convert_validators(step["validate"])
|
||||||
|
|
||||||
|
return test_dict
|
||||||
|
|
||||||
|
|
||||||
def ensure_testcase_v3_api(api_content: Dict) -> Dict:
|
def ensure_testcase_v3_api(api_content: Dict) -> Dict:
|
||||||
|
|
||||||
|
teststep = {
|
||||||
|
"request": api_content["request"],
|
||||||
|
}
|
||||||
|
teststep.update(ensure_step_attachment(api_content))
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"config": {"name": api_content["name"]},
|
"config": {"name": api_content["name"]},
|
||||||
"teststeps": [
|
"teststeps": [teststep],
|
||||||
{
|
|
||||||
"name": api_content["name"],
|
|
||||||
"variables": api_content.get("variables", {}),
|
|
||||||
"request": api_content["request"],
|
|
||||||
"validate": convert_validators(api_content.get("validate", [])),
|
|
||||||
"extract": convert_extractors(api_content.get("extract", {})),
|
|
||||||
}
|
|
||||||
],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -92,9 +107,7 @@ def ensure_testcase_v3(test_content: Dict) -> Dict:
|
|||||||
v3_content = {"config": test_content["config"], "teststeps": []}
|
v3_content = {"config": test_content["config"], "teststeps": []}
|
||||||
|
|
||||||
for step in test_content["teststeps"]:
|
for step in test_content["teststeps"]:
|
||||||
teststep = {"name": step.pop("name", "")}
|
teststep = {}
|
||||||
if "variables" in step:
|
|
||||||
teststep["variables"] = step.pop("variables")
|
|
||||||
|
|
||||||
if "request" in step:
|
if "request" in step:
|
||||||
teststep["request"] = step.pop("request")
|
teststep["request"] = step.pop("request")
|
||||||
@@ -103,13 +116,7 @@ def ensure_testcase_v3(test_content: Dict) -> Dict:
|
|||||||
elif "testcase" in step:
|
elif "testcase" in step:
|
||||||
teststep["testcase"] = step.pop("testcase")
|
teststep["testcase"] = step.pop("testcase")
|
||||||
|
|
||||||
if "extract" in step:
|
teststep.update(ensure_step_attachment(step))
|
||||||
teststep["extract"] = convert_extractors(step.pop("extract"))
|
|
||||||
|
|
||||||
if "validate" in step:
|
|
||||||
teststep["validate"] = convert_validators(step.pop("validate"))
|
|
||||||
|
|
||||||
teststep.update(step)
|
|
||||||
v3_content["teststeps"].append(teststep)
|
v3_content["teststeps"].append(teststep)
|
||||||
|
|
||||||
return v3_content
|
return v3_content
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import os
|
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
from httprunner import compat
|
from httprunner import compat
|
||||||
@@ -48,3 +47,90 @@ class TestCompat(unittest.TestCase):
|
|||||||
compat.convert_validators([{"eq": ["content.0.name", 201]}]),
|
compat.convert_validators([{"eq": ["content.0.name", 201]}]),
|
||||||
[{"eq": ["body[0].name", 201]}],
|
[{"eq": ["body[0].name", 201]}],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_ensure_testcase_v3_api(self):
|
||||||
|
api_content = {
|
||||||
|
"name": "get with params",
|
||||||
|
"request": {
|
||||||
|
"method": "GET",
|
||||||
|
"url": "/get",
|
||||||
|
"params": {"foo1": "bar1", "foo2": "bar2"},
|
||||||
|
"headers": {"User-Agent": "HttpRunner/3.0"},
|
||||||
|
},
|
||||||
|
"extract": [{"varA": "content.varA"}, {"user_agent": "headers.User-Agent"}],
|
||||||
|
"validate": [{"eq": ["content.varB", 200]}, {"lt": ["json.0.varC", 0]}],
|
||||||
|
}
|
||||||
|
self.assertEqual(
|
||||||
|
compat.ensure_testcase_v3_api(api_content),
|
||||||
|
{
|
||||||
|
"config": {"name": "get with params"},
|
||||||
|
"teststeps": [
|
||||||
|
{
|
||||||
|
"name": "get with params",
|
||||||
|
"request": {
|
||||||
|
"method": "GET",
|
||||||
|
"url": "/get",
|
||||||
|
"params": {"foo1": "bar1", "foo2": "bar2"},
|
||||||
|
"headers": {"User-Agent": "HttpRunner/3.0"},
|
||||||
|
},
|
||||||
|
"extract": {
|
||||||
|
"varA": "body.varA",
|
||||||
|
"user_agent": 'headers."User-Agent"',
|
||||||
|
},
|
||||||
|
"validate": [
|
||||||
|
{"eq": ["body.varB", 200]},
|
||||||
|
{"lt": ["body[0].varC", 0]},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
],
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_ensure_testcase_v3(self):
|
||||||
|
testcase_content = {
|
||||||
|
"config": {"name": "xxx", "base_url": "https://httpbin.org"},
|
||||||
|
"teststeps": [
|
||||||
|
{
|
||||||
|
"name": "get with params",
|
||||||
|
"request": {
|
||||||
|
"method": "GET",
|
||||||
|
"url": "/get",
|
||||||
|
"params": {"foo1": "bar1", "foo2": "bar2"},
|
||||||
|
"headers": {"User-Agent": "HttpRunner/3.0"},
|
||||||
|
},
|
||||||
|
"extract": [
|
||||||
|
{"varA": "content.varA"},
|
||||||
|
{"user_agent": "headers.User-Agent"},
|
||||||
|
],
|
||||||
|
"validate": [
|
||||||
|
{"eq": ["content.varB", 200]},
|
||||||
|
{"lt": ["json.0.varC", 0]},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
],
|
||||||
|
}
|
||||||
|
self.assertEqual(
|
||||||
|
compat.ensure_testcase_v3(testcase_content),
|
||||||
|
{
|
||||||
|
"config": {"name": "xxx", "base_url": "https://httpbin.org"},
|
||||||
|
"teststeps": [
|
||||||
|
{
|
||||||
|
"name": "get with params",
|
||||||
|
"request": {
|
||||||
|
"method": "GET",
|
||||||
|
"url": "/get",
|
||||||
|
"params": {"foo1": "bar1", "foo2": "bar2"},
|
||||||
|
"headers": {"User-Agent": "HttpRunner/3.0"},
|
||||||
|
},
|
||||||
|
"extract": {
|
||||||
|
"varA": "body.varA",
|
||||||
|
"user_agent": 'headers."User-Agent"',
|
||||||
|
},
|
||||||
|
"validate": [
|
||||||
|
{"eq": ["body.varB", 200]},
|
||||||
|
{"lt": ["body[0].varC", 0]},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
],
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user