mirror of
https://github.com/httprunner/httprunner.git
synced 2026-07-12 16:01:27 +08:00
fix:修改SqlResponseObject继承关系;添加thriftpy2依赖
This commit is contained in:
@@ -43,7 +43,8 @@ class TestCompat(unittest.TestCase):
|
|||||||
"body.data.buildings[0].building_id",
|
"body.data.buildings[0].building_id",
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
compat._convert_jmespath("body.users[-1]"), "body.users[-1]",
|
compat._convert_jmespath("body.users[-1]"),
|
||||||
|
"body.users[-1]",
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
compat._convert_jmespath("body.result.WorkNode_-1"),
|
compat._convert_jmespath("body.result.WorkNode_-1"),
|
||||||
|
|||||||
@@ -97,7 +97,11 @@ class TestLoader(unittest.TestCase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def test_load_env_path_not_exist(self):
|
def test_load_env_path_not_exist(self):
|
||||||
dot_env_path = os.path.join(os.getcwd(), "tests", "data",)
|
dot_env_path = os.path.join(
|
||||||
|
os.getcwd(),
|
||||||
|
"tests",
|
||||||
|
"data",
|
||||||
|
)
|
||||||
env_variables_mapping = loader.load_dot_env_file(dot_env_path)
|
env_variables_mapping = loader.load_dot_env_file(dot_env_path)
|
||||||
self.assertEqual(env_variables_mapping, {})
|
self.assertEqual(env_variables_mapping, {})
|
||||||
|
|
||||||
|
|||||||
@@ -534,7 +534,8 @@ def main_make(tests_paths: List[Text]) -> List[Text]:
|
|||||||
def init_make_parser(subparsers):
|
def init_make_parser(subparsers):
|
||||||
"""make testcases: parse command line options and run commands."""
|
"""make testcases: parse command line options and run commands."""
|
||||||
parser = subparsers.add_parser(
|
parser = subparsers.add_parser(
|
||||||
"make", help="Convert YAML/JSON testcases to pytest cases.",
|
"make",
|
||||||
|
help="Convert YAML/JSON testcases to pytest cases.",
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"testcase_path", nargs="*", help="Specify YAML/JSON testcase file/folder path"
|
"testcase_path", nargs="*", help="Specify YAML/JSON testcase file/folder path"
|
||||||
|
|||||||
@@ -73,7 +73,8 @@ from request_methods.request_with_functions_test import (
|
|||||||
content,
|
content,
|
||||||
)
|
)
|
||||||
self.assertIn(
|
self.assertIn(
|
||||||
".call(RequestWithFunctions)", content,
|
".call(RequestWithFunctions)",
|
||||||
|
content,
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_make_testcase_folder(self):
|
def test_make_testcase_folder(self):
|
||||||
@@ -111,7 +112,8 @@ from request_methods.request_with_functions_test import (
|
|||||||
)
|
)
|
||||||
loader.project_meta = None
|
loader.project_meta = None
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
ensure_file_abs_path_valid(os.getcwd()), os.getcwd(),
|
ensure_file_abs_path_valid(os.getcwd()),
|
||||||
|
os.getcwd(),
|
||||||
)
|
)
|
||||||
loader.project_meta = None
|
loader.project_meta = None
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
@@ -122,11 +124,17 @@ from request_methods.request_with_functions_test import (
|
|||||||
def test_convert_testcase_path(self):
|
def test_convert_testcase_path(self):
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
convert_testcase_path(os.path.join(self.data_dir, "a-b.c", "2 3.yml")),
|
convert_testcase_path(os.path.join(self.data_dir, "a-b.c", "2 3.yml")),
|
||||||
(os.path.join(self.data_dir, "a_b_c", "T2_3_test.py"), "T23",),
|
(
|
||||||
|
os.path.join(self.data_dir, "a_b_c", "T2_3_test.py"),
|
||||||
|
"T23",
|
||||||
|
),
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
convert_testcase_path(os.path.join(self.data_dir, "a-b.c", "中文case.yml")),
|
convert_testcase_path(os.path.join(self.data_dir, "a-b.c", "中文case.yml")),
|
||||||
(os.path.join(self.data_dir, "a_b_c", "中文case_test.py"), "中文Case",),
|
(
|
||||||
|
os.path.join(self.data_dir, "a_b_c", "中文case_test.py"),
|
||||||
|
"中文Case",
|
||||||
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_make_config_chain_style(self):
|
def test_make_config_chain_style(self):
|
||||||
@@ -145,7 +153,11 @@ from request_methods.request_with_functions_test import (
|
|||||||
def test_make_teststep_chain_style(self):
|
def test_make_teststep_chain_style(self):
|
||||||
step = {
|
step = {
|
||||||
"name": "get with params",
|
"name": "get with params",
|
||||||
"variables": {"foo1": "bar1", "foo2": 123, "sum_v": "${sum_two(1, 2)}",},
|
"variables": {
|
||||||
|
"foo1": "bar1",
|
||||||
|
"foo2": 123,
|
||||||
|
"sum_v": "${sum_two(1, 2)}",
|
||||||
|
},
|
||||||
"request": {
|
"request": {
|
||||||
"method": "GET",
|
"method": "GET",
|
||||||
"url": "/get",
|
"url": "/get",
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ class TransportEnum(Text, Enum):
|
|||||||
|
|
||||||
|
|
||||||
class TThriftRequest(BaseModel):
|
class TThriftRequest(BaseModel):
|
||||||
""" rpc request model"""
|
"""rpc request model"""
|
||||||
|
|
||||||
method: Text = ""
|
method: Text = ""
|
||||||
params: Dict = {}
|
params: Dict = {}
|
||||||
@@ -106,7 +106,7 @@ class SqlMethodEnum(Text, Enum):
|
|||||||
|
|
||||||
|
|
||||||
class TSqlRequest(BaseModel):
|
class TSqlRequest(BaseModel):
|
||||||
""" sql request model"""
|
"""sql request model"""
|
||||||
|
|
||||||
db_config: TConfigDB = TConfigDB()
|
db_config: TConfigDB = TConfigDB()
|
||||||
method: SqlMethodEnum = None
|
method: SqlMethodEnum = None
|
||||||
|
|||||||
@@ -476,7 +476,9 @@ def parse_variables_mapping(
|
|||||||
return parsed_variables
|
return parsed_variables
|
||||||
|
|
||||||
|
|
||||||
def parse_parameters(parameters: Dict,) -> List[Dict]:
|
def parse_parameters(
|
||||||
|
parameters: Dict,
|
||||||
|
) -> List[Dict]:
|
||||||
"""parse parameters and generate cartesian product.
|
"""parse parameters and generate cartesian product.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ from httprunner.parser import parse_string_value, Parser
|
|||||||
|
|
||||||
|
|
||||||
def get_uniform_comparator(comparator: Text):
|
def get_uniform_comparator(comparator: Text):
|
||||||
""" convert comparator alias to uniform name"""
|
"""convert comparator alias to uniform name"""
|
||||||
if comparator in ["eq", "equals", "equal"]:
|
if comparator in ["eq", "equals", "equal"]:
|
||||||
return "equal"
|
return "equal"
|
||||||
elif comparator in ["lt", "less_than"]:
|
elif comparator in ["lt", "less_than"]:
|
||||||
@@ -114,7 +114,7 @@ def uniform_validator(validator):
|
|||||||
|
|
||||||
class ResponseObjectBase(object):
|
class ResponseObjectBase(object):
|
||||||
def __init__(self, resp_obj, parser: Parser):
|
def __init__(self, resp_obj, parser: Parser):
|
||||||
""" initialize with a response object
|
"""initialize with a response object
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
resp_obj (instance): requests.Response instance
|
resp_obj (instance): requests.Response instance
|
||||||
@@ -125,7 +125,9 @@ class ResponseObjectBase(object):
|
|||||||
self.validation_results: Dict = {}
|
self.validation_results: Dict = {}
|
||||||
|
|
||||||
def extract(
|
def extract(
|
||||||
self, extractors: Dict[Text, Text], variables_mapping: VariablesMapping = None,
|
self,
|
||||||
|
extractors: Dict[Text, Text],
|
||||||
|
variables_mapping: VariablesMapping = None,
|
||||||
) -> Dict[Text, Any]:
|
) -> Dict[Text, Any]:
|
||||||
if not extractors:
|
if not extractors:
|
||||||
return {}
|
return {}
|
||||||
@@ -142,10 +144,22 @@ class ResponseObjectBase(object):
|
|||||||
return extract_mapping
|
return extract_mapping
|
||||||
|
|
||||||
def _search_jmespath(self, expr: Text) -> Any:
|
def _search_jmespath(self, expr: Text) -> Any:
|
||||||
raise NotImplementedError("_search_jmespath not override")
|
try:
|
||||||
|
check_value = jmespath.search(expr, self.resp_obj)
|
||||||
|
except JMESPathError as ex:
|
||||||
|
logger.error(
|
||||||
|
f"failed to search with jmespath\n"
|
||||||
|
f"expression: {expr}\n"
|
||||||
|
f"data: {self.resp_obj}\n"
|
||||||
|
f"exception: {ex}"
|
||||||
|
)
|
||||||
|
raise
|
||||||
|
return check_value
|
||||||
|
|
||||||
def validate(
|
def validate(
|
||||||
self, validators: Validators, variables_mapping: VariablesMapping = None,
|
self,
|
||||||
|
validators: Validators,
|
||||||
|
variables_mapping: VariablesMapping = None,
|
||||||
):
|
):
|
||||||
|
|
||||||
variables_mapping = variables_mapping or {}
|
variables_mapping = variables_mapping or {}
|
||||||
@@ -277,19 +291,8 @@ class ResponseObject(ResponseObjectBase):
|
|||||||
|
|
||||||
|
|
||||||
class ThriftResponseObject(ResponseObjectBase):
|
class ThriftResponseObject(ResponseObjectBase):
|
||||||
def _search_jmespath(self, expr: Text) -> Any:
|
pass
|
||||||
try:
|
|
||||||
check_value = jmespath.search(expr, self.resp_obj)
|
|
||||||
except JMESPathError as ex:
|
class SqlResponseObject(ResponseObjectBase):
|
||||||
logger.error(
|
|
||||||
f"failed to search with jmespath\n"
|
|
||||||
f"expression: {expr}\n"
|
|
||||||
f"data: {self.resp_obj}\n"
|
|
||||||
f"exception: {ex}"
|
|
||||||
)
|
|
||||||
raise
|
|
||||||
return check_value
|
|
||||||
|
|
||||||
|
|
||||||
class SqlResponseObject(ThriftResponseObject):
|
|
||||||
pass
|
pass
|
||||||
|
|||||||
@@ -61,6 +61,9 @@ class TestResponse(unittest.TestCase):
|
|||||||
def test_validate_functions(self):
|
def test_validate_functions(self):
|
||||||
variables_mapping = {"index": 1}
|
variables_mapping = {"index": 1}
|
||||||
self.resp_obj.validate(
|
self.resp_obj.validate(
|
||||||
[{"eq": ["${get_num(0)}", 0]}, {"eq": ["${get_num($index)}", 1]},],
|
[
|
||||||
|
{"eq": ["${get_num(0)}", 0]},
|
||||||
|
{"eq": ["${get_num($index)}", 1]},
|
||||||
|
],
|
||||||
variables_mapping=variables_mapping,
|
variables_mapping=variables_mapping,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -67,7 +67,10 @@ def call_hooks(
|
|||||||
|
|
||||||
def run_step_request(runner: HttpRunner, step: TStep) -> StepResult:
|
def run_step_request(runner: HttpRunner, step: TStep) -> StepResult:
|
||||||
"""run teststep: request"""
|
"""run teststep: request"""
|
||||||
step_result = StepResult(name=step.name, success=False,)
|
step_result = StepResult(
|
||||||
|
name=step.name,
|
||||||
|
success=False,
|
||||||
|
)
|
||||||
start_time = time.time()
|
start_time = time.time()
|
||||||
|
|
||||||
step.variables = runner.merge_step_variables(step.variables)
|
step.variables = runner.merge_step_variables(step.variables)
|
||||||
@@ -79,7 +82,8 @@ def run_step_request(runner: HttpRunner, step: TStep) -> StepResult:
|
|||||||
request_dict.pop("upload", None)
|
request_dict.pop("upload", None)
|
||||||
parsed_request_dict = runner.parser.parse_data(request_dict, step.variables)
|
parsed_request_dict = runner.parser.parse_data(request_dict, step.variables)
|
||||||
parsed_request_dict["headers"].setdefault(
|
parsed_request_dict["headers"].setdefault(
|
||||||
"HRUN-Request-ID", f"HRUN-{runner.case_id}-{str(int(time.time() * 1000))[-6:]}",
|
"HRUN-Request-ID",
|
||||||
|
f"HRUN-{runner.case_id}-{str(int(time.time() * 1000))[-6:]}",
|
||||||
)
|
)
|
||||||
step.variables["request"] = parsed_request_dict
|
step.variables["request"] = parsed_request_dict
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,10 @@ def run_step_sql_request(runner: HttpRunner, step: TStep) -> StepResult:
|
|||||||
"""run teststep:sql request"""
|
"""run teststep:sql request"""
|
||||||
start_time = time.time()
|
start_time = time.time()
|
||||||
|
|
||||||
step_result = StepResult(name=step.name, success=False,)
|
step_result = StepResult(
|
||||||
|
name=step.name,
|
||||||
|
success=False,
|
||||||
|
)
|
||||||
step.variables = runner.merge_step_variables(step.variables)
|
step.variables = runner.merge_step_variables(step.variables)
|
||||||
# parse
|
# parse
|
||||||
request_dict = step.sql_request.dict()
|
request_dict = step.sql_request.dict()
|
||||||
@@ -48,11 +51,7 @@ def run_step_sql_request(runner: HttpRunner, step: TStep) -> StepResult:
|
|||||||
parsed_request_dict["db_config"]["database"] or config.db.database
|
parsed_request_dict["db_config"]["database"] or config.db.database
|
||||||
)
|
)
|
||||||
|
|
||||||
if parsed_request_dict["db_config"]["psm"]:
|
if not runner.db_engine:
|
||||||
runner.db_engine = DBEngine(
|
|
||||||
f'mysql+pymysql://:@/?charset=utf8mb4&db_psm={parsed_request_dict["psm"]}'
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
runner.db_engine = DBEngine(
|
runner.db_engine = DBEngine(
|
||||||
f'mysql+pymysql://{parsed_request_dict["db_config"]["user"]}:'
|
f'mysql+pymysql://{parsed_request_dict["db_config"]["user"]}:'
|
||||||
f'{parsed_request_dict["db_config"]["password"]}@{parsed_request_dict["db_config"]["ip"]}:'
|
f'{parsed_request_dict["db_config"]["password"]}@{parsed_request_dict["db_config"]["ip"]}:'
|
||||||
@@ -171,10 +170,8 @@ class RunSqlRequest(IStep):
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
def with_db_config(
|
def with_db_config(
|
||||||
self, psm=None, user=None, password=None, ip=None, port=None, database=None
|
self, user=None, password=None, ip=None, port=None, database=None, psm=None
|
||||||
):
|
):
|
||||||
if psm:
|
|
||||||
self.__step.sql_request.db_config.psm = psm
|
|
||||||
if user:
|
if user:
|
||||||
self.__step.sql_request.db_config.user = user
|
self.__step.sql_request.db_config.user = user
|
||||||
if password:
|
if password:
|
||||||
@@ -185,6 +182,8 @@ class RunSqlRequest(IStep):
|
|||||||
self.__step.sql_request.db_config.port = port
|
self.__step.sql_request.db_config.port = port
|
||||||
if database:
|
if database:
|
||||||
self.__step.sql_request.db_config.database = database
|
self.__step.sql_request.db_config.database = database
|
||||||
|
if psm:
|
||||||
|
self.__step.sql_request.db_config.psm = psm
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def fetchone(self, sql) -> "RunSqlRequest":
|
def fetchone(self, sql) -> "RunSqlRequest":
|
||||||
|
|||||||
@@ -22,7 +22,10 @@ def run_step_thrift_request(runner: HttpRunner, step: TStep) -> StepResult:
|
|||||||
"""run teststep:thrift request"""
|
"""run teststep:thrift request"""
|
||||||
start_time = time.time()
|
start_time = time.time()
|
||||||
|
|
||||||
step_result = StepResult(name=step.name, success=False,)
|
step_result = StepResult(
|
||||||
|
name=step.name,
|
||||||
|
success=False,
|
||||||
|
)
|
||||||
step.variables = runner.merge_step_variables(step.variables)
|
step.variables = runner.merge_step_variables(step.variables)
|
||||||
# parse
|
# parse
|
||||||
request_dict = step.thrift_request.dict()
|
request_dict = step.thrift_request.dict()
|
||||||
@@ -65,17 +68,18 @@ def run_step_thrift_request(runner: HttpRunner, step: TStep) -> StepResult:
|
|||||||
step.variables["thrift_request"] = parsed_request_dict
|
step.variables["thrift_request"] = parsed_request_dict
|
||||||
|
|
||||||
psm = parsed_request_dict["psm"]
|
psm = parsed_request_dict["psm"]
|
||||||
|
if not runner.thrift_client:
|
||||||
runner.thrift_client = parsed_request_dict["thrift_client"]
|
runner.thrift_client = parsed_request_dict["thrift_client"]
|
||||||
if not runner.thrift_client:
|
if not runner.thrift_client:
|
||||||
runner.thrift_client = ThriftClient(
|
runner.thrift_client = ThriftClient(
|
||||||
parsed_request_dict["idl_path"],
|
thrift_file=parsed_request_dict["idl_path"],
|
||||||
parsed_request_dict["service_name"],
|
service_name=parsed_request_dict["service_name"],
|
||||||
parsed_request_dict["ip"],
|
ip=parsed_request_dict["ip"],
|
||||||
parsed_request_dict["port"],
|
port=parsed_request_dict["port"],
|
||||||
parsed_request_dict["timeout"],
|
include_dirs=parsed_request_dict["include_dirs"],
|
||||||
parsed_request_dict["proto_type"],
|
timeout=parsed_request_dict["timeout"],
|
||||||
parsed_request_dict["trans_port"],
|
proto_type=parsed_request_dict["proto_type"],
|
||||||
|
trans_type=parsed_request_dict["trans_port"],
|
||||||
)
|
)
|
||||||
|
|
||||||
# setup hooks
|
# setup hooks
|
||||||
|
|||||||
@@ -78,9 +78,7 @@ def unicode_2_utf8_keep_native(para):
|
|||||||
|
|
||||||
|
|
||||||
def encode_basestring(s):
|
def encode_basestring(s):
|
||||||
"""Return a JSON representation of a Python string
|
"""Return a JSON representation of a Python string"""
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
def replace(match):
|
def replace(match):
|
||||||
return ESCAPE_DCT[match.group(0)]
|
return ESCAPE_DCT[match.group(0)]
|
||||||
@@ -89,9 +87,7 @@ def encode_basestring(s):
|
|||||||
|
|
||||||
|
|
||||||
def py_encode_basestring_ascii(s):
|
def py_encode_basestring_ascii(s):
|
||||||
"""Return an ASCII-only JSON representation of a Python string
|
"""Return an ASCII-only JSON representation of a Python string"""
|
||||||
|
|
||||||
"""
|
|
||||||
if isinstance(s, str) and HAS_UTF8.search(s) is not None:
|
if isinstance(s, str) and HAS_UTF8.search(s) is not None:
|
||||||
s = s.decode("utf-8")
|
s = s.decode("utf-8")
|
||||||
|
|
||||||
@@ -289,10 +285,10 @@ class MyJSONEncoder(json.JSONEncoder):
|
|||||||
|
|
||||||
def encode(self, o):
|
def encode(self, o):
|
||||||
"""Return a JSON string representation of a Python data structure.
|
"""Return a JSON string representation of a Python data structure.
|
||||||
JSONEncoder().encode({"foo": ["bar", "baz"]})
|
JSONEncoder().encode({"foo": ["bar", "baz"]})
|
||||||
'{"foo": ["bar", "baz"]}'
|
'{"foo": ["bar", "baz"]}'
|
||||||
|
|
||||||
"""
|
"""
|
||||||
# This is for extremely simple cases and benchmarks.
|
# This is for extremely simple cases and benchmarks.
|
||||||
|
|
||||||
if isinstance(o, str):
|
if isinstance(o, str):
|
||||||
@@ -363,7 +359,7 @@ class ThriftJSONEncoder(json.JSONEncoder):
|
|||||||
JSONEncoder().encode({"foo": ["bar", "baz"]})
|
JSONEncoder().encode({"foo": ["bar", "baz"]})
|
||||||
'{"foo": ["bar", "baz"]}'
|
'{"foo": ["bar", "baz"]}'
|
||||||
|
|
||||||
"""
|
"""
|
||||||
# This is for extremely simple cases and benchmarks.
|
# This is for extremely simple cases and benchmarks.
|
||||||
|
|
||||||
if isinstance(o, str):
|
if isinstance(o, str):
|
||||||
|
|||||||
58
poetry.lock
generated
58
poetry.lock
generated
@@ -384,6 +384,19 @@ type = "legacy"
|
|||||||
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
|
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
|
||||||
reference = "tsinghua"
|
reference = "tsinghua"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ply"
|
||||||
|
version = "3.11"
|
||||||
|
description = "Python Lex & Yacc"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = "*"
|
||||||
|
|
||||||
|
[package.source]
|
||||||
|
type = "legacy"
|
||||||
|
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
|
||||||
|
reference = "tsinghua"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "py"
|
name = "py"
|
||||||
version = "1.11.0"
|
version = "1.11.0"
|
||||||
@@ -589,6 +602,26 @@ type = "legacy"
|
|||||||
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
|
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
|
||||||
reference = "tsinghua"
|
reference = "tsinghua"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "thriftpy2"
|
||||||
|
version = "0.4.14"
|
||||||
|
description = "Pure python implementation of Apache Thrift."
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
ply = ">=3.4,<4.0"
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
dev = ["cython (>=0.28.4)", "flake8 (>=2.5)", "pytest (>=2.8)", "sphinx-rtd-theme (>=0.1.9)", "sphinx (>=1.3)", "tornado (>=4.0,<6.0)"]
|
||||||
|
tornado = ["tornado (>=4.0,<6.0)"]
|
||||||
|
|
||||||
|
[package.source]
|
||||||
|
type = "legacy"
|
||||||
|
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
|
||||||
|
reference = "tsinghua"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "toml"
|
name = "toml"
|
||||||
version = "0.10.2"
|
version = "0.10.2"
|
||||||
@@ -699,7 +732,7 @@ upload = ["requests-toolbelt", "filetype"]
|
|||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "1.1"
|
lock-version = "1.1"
|
||||||
python-versions = "^3.7"
|
python-versions = "^3.7"
|
||||||
content-hash = "8dc444117b1b9a55f00d25b86e69a26d9ceaac2d331731b676415fd4a019f57a"
|
content-hash = "f521e769204610adda9594e1159c73c2215c6456c53e27ba1141e048d6aa8a54"
|
||||||
|
|
||||||
[metadata.files]
|
[metadata.files]
|
||||||
allure-pytest = [
|
allure-pytest = [
|
||||||
@@ -755,6 +788,9 @@ brotli = [
|
|||||||
{file = "Brotli-1.0.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ee83d3e3a024a9618e5be64648d6d11c37047ac48adff25f12fa4226cf23d1c"},
|
{file = "Brotli-1.0.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ee83d3e3a024a9618e5be64648d6d11c37047ac48adff25f12fa4226cf23d1c"},
|
||||||
{file = "Brotli-1.0.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:19598ecddd8a212aedb1ffa15763dd52a388518c4550e615aed88dc3753c0f0c"},
|
{file = "Brotli-1.0.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:19598ecddd8a212aedb1ffa15763dd52a388518c4550e615aed88dc3753c0f0c"},
|
||||||
{file = "Brotli-1.0.9-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:44bb8ff420c1d19d91d79d8c3574b8954288bdff0273bf788954064d260d7ab0"},
|
{file = "Brotli-1.0.9-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:44bb8ff420c1d19d91d79d8c3574b8954288bdff0273bf788954064d260d7ab0"},
|
||||||
|
{file = "Brotli-1.0.9-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e23281b9a08ec338469268f98f194658abfb13658ee98e2b7f85ee9dd06caa91"},
|
||||||
|
{file = "Brotli-1.0.9-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3496fc835370da351d37cada4cf744039616a6db7d13c430035e901443a34daa"},
|
||||||
|
{file = "Brotli-1.0.9-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b83bb06a0192cccf1eb8d0a28672a1b79c74c3a8a5f2619625aeb6f28b3a82bb"},
|
||||||
{file = "Brotli-1.0.9-cp310-cp310-win32.whl", hash = "sha256:26d168aac4aaec9a4394221240e8a5436b5634adc3cd1cdf637f6645cecbf181"},
|
{file = "Brotli-1.0.9-cp310-cp310-win32.whl", hash = "sha256:26d168aac4aaec9a4394221240e8a5436b5634adc3cd1cdf637f6645cecbf181"},
|
||||||
{file = "Brotli-1.0.9-cp310-cp310-win_amd64.whl", hash = "sha256:622a231b08899c864eb87e85f81c75e7b9ce05b001e59bbfbf43d4a71f5f32b2"},
|
{file = "Brotli-1.0.9-cp310-cp310-win_amd64.whl", hash = "sha256:622a231b08899c864eb87e85f81c75e7b9ce05b001e59bbfbf43d4a71f5f32b2"},
|
||||||
{file = "Brotli-1.0.9-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:c83aa123d56f2e060644427a882a36b3c12db93727ad7a7b9efd7d7f3e9cc2c4"},
|
{file = "Brotli-1.0.9-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:c83aa123d56f2e060644427a882a36b3c12db93727ad7a7b9efd7d7f3e9cc2c4"},
|
||||||
@@ -766,12 +802,18 @@ brotli = [
|
|||||||
{file = "Brotli-1.0.9-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:40d15c79f42e0a2c72892bf407979febd9cf91f36f495ffb333d1d04cebb34e4"},
|
{file = "Brotli-1.0.9-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:40d15c79f42e0a2c72892bf407979febd9cf91f36f495ffb333d1d04cebb34e4"},
|
||||||
{file = "Brotli-1.0.9-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:93130612b837103e15ac3f9cbacb4613f9e348b58b3aad53721d92e57f96d46a"},
|
{file = "Brotli-1.0.9-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:93130612b837103e15ac3f9cbacb4613f9e348b58b3aad53721d92e57f96d46a"},
|
||||||
{file = "Brotli-1.0.9-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87fdccbb6bb589095f413b1e05734ba492c962b4a45a13ff3408fa44ffe6479b"},
|
{file = "Brotli-1.0.9-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87fdccbb6bb589095f413b1e05734ba492c962b4a45a13ff3408fa44ffe6479b"},
|
||||||
|
{file = "Brotli-1.0.9-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:6d847b14f7ea89f6ad3c9e3901d1bc4835f6b390a9c71df999b0162d9bb1e20f"},
|
||||||
|
{file = "Brotli-1.0.9-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:495ba7e49c2db22b046a53b469bbecea802efce200dffb69b93dd47397edc9b6"},
|
||||||
|
{file = "Brotli-1.0.9-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:4688c1e42968ba52e57d8670ad2306fe92e0169c6f3af0089be75bbac0c64a3b"},
|
||||||
{file = "Brotli-1.0.9-cp36-cp36m-win32.whl", hash = "sha256:61a7ee1f13ab913897dac7da44a73c6d44d48a4adff42a5701e3239791c96e14"},
|
{file = "Brotli-1.0.9-cp36-cp36m-win32.whl", hash = "sha256:61a7ee1f13ab913897dac7da44a73c6d44d48a4adff42a5701e3239791c96e14"},
|
||||||
{file = "Brotli-1.0.9-cp36-cp36m-win_amd64.whl", hash = "sha256:1c48472a6ba3b113452355b9af0a60da5c2ae60477f8feda8346f8fd48e3e87c"},
|
{file = "Brotli-1.0.9-cp36-cp36m-win_amd64.whl", hash = "sha256:1c48472a6ba3b113452355b9af0a60da5c2ae60477f8feda8346f8fd48e3e87c"},
|
||||||
{file = "Brotli-1.0.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3b78a24b5fd13c03ee2b7b86290ed20efdc95da75a3557cc06811764d5ad1126"},
|
{file = "Brotli-1.0.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3b78a24b5fd13c03ee2b7b86290ed20efdc95da75a3557cc06811764d5ad1126"},
|
||||||
{file = "Brotli-1.0.9-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:9d12cf2851759b8de8ca5fde36a59c08210a97ffca0eb94c532ce7b17c6a3d1d"},
|
{file = "Brotli-1.0.9-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:9d12cf2851759b8de8ca5fde36a59c08210a97ffca0eb94c532ce7b17c6a3d1d"},
|
||||||
{file = "Brotli-1.0.9-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:6c772d6c0a79ac0f414a9f8947cc407e119b8598de7621f39cacadae3cf57d12"},
|
{file = "Brotli-1.0.9-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:6c772d6c0a79ac0f414a9f8947cc407e119b8598de7621f39cacadae3cf57d12"},
|
||||||
{file = "Brotli-1.0.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29d1d350178e5225397e28ea1b7aca3648fcbab546d20e7475805437bfb0a130"},
|
{file = "Brotli-1.0.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29d1d350178e5225397e28ea1b7aca3648fcbab546d20e7475805437bfb0a130"},
|
||||||
|
{file = "Brotli-1.0.9-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7bbff90b63328013e1e8cb50650ae0b9bac54ffb4be6104378490193cd60f85a"},
|
||||||
|
{file = "Brotli-1.0.9-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ec1947eabbaf8e0531e8e899fc1d9876c179fc518989461f5d24e2223395a9e3"},
|
||||||
|
{file = "Brotli-1.0.9-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:12effe280b8ebfd389022aa65114e30407540ccb89b177d3fbc9a4f177c4bd5d"},
|
||||||
{file = "Brotli-1.0.9-cp37-cp37m-win32.whl", hash = "sha256:f909bbbc433048b499cb9db9e713b5d8d949e8c109a2a548502fb9aa8630f0b1"},
|
{file = "Brotli-1.0.9-cp37-cp37m-win32.whl", hash = "sha256:f909bbbc433048b499cb9db9e713b5d8d949e8c109a2a548502fb9aa8630f0b1"},
|
||||||
{file = "Brotli-1.0.9-cp37-cp37m-win_amd64.whl", hash = "sha256:97f715cf371b16ac88b8c19da00029804e20e25f30d80203417255d239f228b5"},
|
{file = "Brotli-1.0.9-cp37-cp37m-win_amd64.whl", hash = "sha256:97f715cf371b16ac88b8c19da00029804e20e25f30d80203417255d239f228b5"},
|
||||||
{file = "Brotli-1.0.9-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e16eb9541f3dd1a3e92b89005e37b1257b157b7256df0e36bd7b33b50be73bcb"},
|
{file = "Brotli-1.0.9-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e16eb9541f3dd1a3e92b89005e37b1257b157b7256df0e36bd7b33b50be73bcb"},
|
||||||
@@ -779,6 +821,9 @@ brotli = [
|
|||||||
{file = "Brotli-1.0.9-cp38-cp38-manylinux1_i686.whl", hash = "sha256:b663f1e02de5d0573610756398e44c130add0eb9a3fc912a09665332942a2efb"},
|
{file = "Brotli-1.0.9-cp38-cp38-manylinux1_i686.whl", hash = "sha256:b663f1e02de5d0573610756398e44c130add0eb9a3fc912a09665332942a2efb"},
|
||||||
{file = "Brotli-1.0.9-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:5b6ef7d9f9c38292df3690fe3e302b5b530999fa90014853dcd0d6902fb59f26"},
|
{file = "Brotli-1.0.9-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:5b6ef7d9f9c38292df3690fe3e302b5b530999fa90014853dcd0d6902fb59f26"},
|
||||||
{file = "Brotli-1.0.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a674ac10e0a87b683f4fa2b6fa41090edfd686a6524bd8dedbd6138b309175c"},
|
{file = "Brotli-1.0.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a674ac10e0a87b683f4fa2b6fa41090edfd686a6524bd8dedbd6138b309175c"},
|
||||||
|
{file = "Brotli-1.0.9-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e2d9e1cbc1b25e22000328702b014227737756f4b5bf5c485ac1d8091ada078b"},
|
||||||
|
{file = "Brotli-1.0.9-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b336c5e9cf03c7be40c47b5fd694c43c9f1358a80ba384a21969e0b4e66a9b17"},
|
||||||
|
{file = "Brotli-1.0.9-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:85f7912459c67eaab2fb854ed2bc1cc25772b300545fe7ed2dc03954da638649"},
|
||||||
{file = "Brotli-1.0.9-cp38-cp38-win32.whl", hash = "sha256:35a3edbe18e876e596553c4007a087f8bcfd538f19bc116917b3c7522fca0429"},
|
{file = "Brotli-1.0.9-cp38-cp38-win32.whl", hash = "sha256:35a3edbe18e876e596553c4007a087f8bcfd538f19bc116917b3c7522fca0429"},
|
||||||
{file = "Brotli-1.0.9-cp38-cp38-win_amd64.whl", hash = "sha256:269a5743a393c65db46a7bb982644c67ecba4b8d91b392403ad8a861ba6f495f"},
|
{file = "Brotli-1.0.9-cp38-cp38-win_amd64.whl", hash = "sha256:269a5743a393c65db46a7bb982644c67ecba4b8d91b392403ad8a861ba6f495f"},
|
||||||
{file = "Brotli-1.0.9-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2aad0e0baa04517741c9bb5b07586c642302e5fb3e75319cb62087bd0995ab19"},
|
{file = "Brotli-1.0.9-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2aad0e0baa04517741c9bb5b07586c642302e5fb3e75319cb62087bd0995ab19"},
|
||||||
@@ -786,6 +831,9 @@ brotli = [
|
|||||||
{file = "Brotli-1.0.9-cp39-cp39-manylinux1_i686.whl", hash = "sha256:16d528a45c2e1909c2798f27f7bf0a3feec1dc9e50948e738b961618e38b6a7b"},
|
{file = "Brotli-1.0.9-cp39-cp39-manylinux1_i686.whl", hash = "sha256:16d528a45c2e1909c2798f27f7bf0a3feec1dc9e50948e738b961618e38b6a7b"},
|
||||||
{file = "Brotli-1.0.9-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:56d027eace784738457437df7331965473f2c0da2c70e1a1f6fdbae5402e0389"},
|
{file = "Brotli-1.0.9-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:56d027eace784738457437df7331965473f2c0da2c70e1a1f6fdbae5402e0389"},
|
||||||
{file = "Brotli-1.0.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9bf919756d25e4114ace16a8ce91eb340eb57a08e2c6950c3cebcbe3dff2a5e7"},
|
{file = "Brotli-1.0.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9bf919756d25e4114ace16a8ce91eb340eb57a08e2c6950c3cebcbe3dff2a5e7"},
|
||||||
|
{file = "Brotli-1.0.9-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e4c4e92c14a57c9bd4cb4be678c25369bf7a092d55fd0866f759e425b9660806"},
|
||||||
|
{file = "Brotli-1.0.9-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e48f4234f2469ed012a98f4b7874e7f7e173c167bed4934912a29e03167cf6b1"},
|
||||||
|
{file = "Brotli-1.0.9-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9ed4c92a0665002ff8ea852353aeb60d9141eb04109e88928026d3c8a9e5433c"},
|
||||||
{file = "Brotli-1.0.9-cp39-cp39-win32.whl", hash = "sha256:cfc391f4429ee0a9370aa93d812a52e1fee0f37a81861f4fdd1f4fb28e8547c3"},
|
{file = "Brotli-1.0.9-cp39-cp39-win32.whl", hash = "sha256:cfc391f4429ee0a9370aa93d812a52e1fee0f37a81861f4fdd1f4fb28e8547c3"},
|
||||||
{file = "Brotli-1.0.9-cp39-cp39-win_amd64.whl", hash = "sha256:854c33dad5ba0fbd6ab69185fec8dab89e13cda6b7d191ba111987df74f38761"},
|
{file = "Brotli-1.0.9-cp39-cp39-win_amd64.whl", hash = "sha256:854c33dad5ba0fbd6ab69185fec8dab89e13cda6b7d191ba111987df74f38761"},
|
||||||
{file = "Brotli-1.0.9-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9749a124280a0ada4187a6cfd1ffd35c350fb3af79c706589d98e088c5044267"},
|
{file = "Brotli-1.0.9-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9749a124280a0ada4187a6cfd1ffd35c350fb3af79c706589d98e088c5044267"},
|
||||||
@@ -932,6 +980,10 @@ pluggy = [
|
|||||||
{file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
|
{file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
|
||||||
{file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
|
{file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
|
||||||
]
|
]
|
||||||
|
ply = [
|
||||||
|
{file = "ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce"},
|
||||||
|
{file = "ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3"},
|
||||||
|
]
|
||||||
py = [
|
py = [
|
||||||
{file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
|
{file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
|
||||||
{file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
|
{file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
|
||||||
@@ -1023,6 +1075,10 @@ six = [
|
|||||||
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
|
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
|
||||||
{file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
|
{file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
|
||||||
]
|
]
|
||||||
|
thriftpy2 = [
|
||||||
|
{file = "thriftpy2-0.4.14-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:b4aae6f6c1d8d12e63c45f68ec1a25267e7d3af1ced1e5a82cbabaaed4bcebc9"},
|
||||||
|
{file = "thriftpy2-0.4.14.tar.gz", hash = "sha256:1758ccaeb2a40d8779b50cdd3d7a3b43e8c5752f21ad0a54ded7c251d05219e8"},
|
||||||
|
]
|
||||||
toml = [
|
toml = [
|
||||||
{file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"},
|
{file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"},
|
||||||
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
|
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ filetype = {version = "^1.0.7", optional = true}
|
|||||||
Brotli = "^1.0.9"
|
Brotli = "^1.0.9"
|
||||||
jinja2 = "^3.0.3"
|
jinja2 = "^3.0.3"
|
||||||
toml = "^0.10.2"
|
toml = "^0.10.2"
|
||||||
|
thriftpy2 = "^0.4.14"
|
||||||
|
|
||||||
[tool.poetry.extras]
|
[tool.poetry.extras]
|
||||||
allure = ["allure-pytest"] # pip install "httprunner[allure]", poetry install -E allure
|
allure = ["allure-pytest"] # pip install "httprunner[allure]", poetry install -E allure
|
||||||
|
|||||||
Reference in New Issue
Block a user