mirror of
https://github.com/httprunner/httprunner.git
synced 2026-05-12 02:21:29 +08:00
refactor: add argument typing
This commit is contained in:
@@ -1,11 +1,11 @@
|
||||
import ast
|
||||
import builtins
|
||||
import re
|
||||
from typing import Any, Set, Text, Callable, Tuple, List, Dict, Union
|
||||
from typing import Any, Set, Text, Callable, List, Dict
|
||||
|
||||
from httprunner import loader, utils
|
||||
from httprunner.v3 import exceptions
|
||||
from httprunner.v3.exceptions import VariableNotFound, FunctionNotFound
|
||||
from httprunner.v3.schema import VariablesMapping, FunctionsMapping
|
||||
|
||||
absolute_http_url_regexp = re.compile(r"^https?://", re.I)
|
||||
|
||||
@@ -130,7 +130,7 @@ def extract_variables(content: Any) -> Set:
|
||||
return set()
|
||||
|
||||
|
||||
def parse_function_params(params):
|
||||
def parse_function_params(params: Text) -> Dict:
|
||||
""" parse function params to args and kwargs.
|
||||
|
||||
Args:
|
||||
@@ -182,7 +182,7 @@ def parse_function_params(params):
|
||||
return function_meta
|
||||
|
||||
|
||||
def get_mapping_variable(variable_name: Text, variables_mapping: Dict[Text, Any]) -> Any:
|
||||
def get_mapping_variable(variable_name: Text, variables_mapping: VariablesMapping) -> Any:
|
||||
""" get variable from variables_mapping.
|
||||
|
||||
Args:
|
||||
@@ -203,7 +203,7 @@ def get_mapping_variable(variable_name: Text, variables_mapping: Dict[Text, Any]
|
||||
raise exceptions.VariableNotFound(f"{variable_name} not found in {variables_mapping}")
|
||||
|
||||
|
||||
def get_mapping_function(function_name: Text, functions_mapping: Dict[Text, Callable]) -> Callable:
|
||||
def get_mapping_function(function_name: Text, functions_mapping: FunctionsMapping) -> Callable:
|
||||
""" get function from functions_mapping,
|
||||
if not found, then try to check if builtin function.
|
||||
|
||||
@@ -250,8 +250,8 @@ def get_mapping_function(function_name: Text, functions_mapping: Dict[Text, Call
|
||||
|
||||
def parse_string(
|
||||
raw_string: Text,
|
||||
variables_mapping: Dict[Text, Any],
|
||||
functions_mapping: Dict[Text, Callable]) -> Any:
|
||||
variables_mapping: VariablesMapping,
|
||||
functions_mapping: FunctionsMapping) -> Any:
|
||||
""" parse string content with variables and functions mapping.
|
||||
|
||||
Args:
|
||||
@@ -346,8 +346,8 @@ def parse_string(
|
||||
|
||||
def parse_data(
|
||||
raw_data: Any,
|
||||
variables_mapping: Dict[Text, Any] = None,
|
||||
functions_mapping: Dict[Text, Callable] = None) -> Any:
|
||||
variables_mapping: VariablesMapping = None,
|
||||
functions_mapping: FunctionsMapping = None) -> Any:
|
||||
""" parse raw data with evaluated variables mapping.
|
||||
Notice: variables_mapping should not contain any variable or function.
|
||||
"""
|
||||
@@ -379,10 +379,10 @@ def parse_data(
|
||||
|
||||
|
||||
def parse_variables_mapping(
|
||||
variables_mapping: Dict[Text, Any],
|
||||
functions_mapping: Dict[Text, Callable] = None) -> Dict[Text, Any]:
|
||||
variables_mapping: VariablesMapping,
|
||||
functions_mapping: FunctionsMapping = None) -> VariablesMapping:
|
||||
|
||||
parsed_variables: Dict[Text, Any] = {}
|
||||
parsed_variables: VariablesMapping = {}
|
||||
|
||||
while len(parsed_variables) != len(variables_mapping):
|
||||
for var_name in variables_mapping:
|
||||
@@ -409,12 +409,12 @@ def parse_variables_mapping(
|
||||
if not_defined_variables:
|
||||
# e.g. {"varA": "123$varB", "varB": "456$varC"}
|
||||
# e.g. {"varC": "${sum_two($a, $b)}"}
|
||||
raise VariableNotFound(not_defined_variables)
|
||||
raise exceptions.VariableNotFound(not_defined_variables)
|
||||
|
||||
try:
|
||||
parsed_value = parse_data(
|
||||
var_value, parsed_variables, functions_mapping)
|
||||
except VariableNotFound:
|
||||
except exceptions.VariableNotFound:
|
||||
continue
|
||||
|
||||
parsed_variables[var_name] = parsed_value
|
||||
|
||||
@@ -5,7 +5,7 @@ from loguru import logger
|
||||
|
||||
from httprunner.v3.parser import build_url, parse_data, parse_variables_mapping
|
||||
from httprunner.v3.response import ResponseObject
|
||||
from httprunner.v3.schema import TestsConfig, TestStep
|
||||
from httprunner.v3.schema import TestsConfig, TestStep, VariablesMapping
|
||||
|
||||
|
||||
class TestCaseRunner(object):
|
||||
@@ -18,11 +18,11 @@ class TestCaseRunner(object):
|
||||
self.session = s
|
||||
return self
|
||||
|
||||
def with_variables(self, **variables) -> "TestCaseRunner":
|
||||
def with_variables(self, **variables: VariablesMapping) -> "TestCaseRunner":
|
||||
self.config.variables.update(variables)
|
||||
return self
|
||||
|
||||
def run_step(self, step):
|
||||
def run_step(self, step: TestStep):
|
||||
logger.info(f"run step: {step.name}")
|
||||
|
||||
# parse
|
||||
|
||||
@@ -8,7 +8,8 @@ from pydantic import HttpUrl
|
||||
Name = Text
|
||||
Url = Text
|
||||
BaseUrl = Union[HttpUrl, Text]
|
||||
Variables = Dict[Text, Any]
|
||||
VariablesMapping = Dict[Text, Any]
|
||||
FunctionsMapping = Dict[Text, Callable]
|
||||
Headers = Dict[Text, Text]
|
||||
Verify = bool
|
||||
Hook = List[Text]
|
||||
@@ -33,8 +34,8 @@ class TestsConfig(BaseModel):
|
||||
name: Name
|
||||
verify: Verify = False
|
||||
base_url: BaseUrl = ""
|
||||
variables: Variables = {}
|
||||
functions: Dict[Text, Callable]
|
||||
variables: VariablesMapping = {}
|
||||
functions: FunctionsMapping = {}
|
||||
setup_hooks: Hook = []
|
||||
teardown_hooks: Hook = []
|
||||
export: Export = []
|
||||
@@ -56,6 +57,6 @@ class Request(BaseModel):
|
||||
class TestStep(BaseModel):
|
||||
name: Name
|
||||
request: Request
|
||||
variables: Variables = {}
|
||||
variables: VariablesMapping = {}
|
||||
extract: Dict[Text, Text] = {}
|
||||
validation: Validate = Field([], alias="validate")
|
||||
|
||||
Reference in New Issue
Block a user