refactor: add argument typing

This commit is contained in:
debugtalk
2020-04-21 13:09:03 +08:00
parent add0849009
commit f892eb4b26
3 changed files with 22 additions and 21 deletions

View File

@@ -1,11 +1,11 @@
import ast import ast
import builtins import builtins
import re 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 import loader, utils
from httprunner.v3 import exceptions 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) absolute_http_url_regexp = re.compile(r"^https?://", re.I)
@@ -130,7 +130,7 @@ def extract_variables(content: Any) -> Set:
return set() return set()
def parse_function_params(params): def parse_function_params(params: Text) -> Dict:
""" parse function params to args and kwargs. """ parse function params to args and kwargs.
Args: Args:
@@ -182,7 +182,7 @@ def parse_function_params(params):
return function_meta 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. """ get variable from variables_mapping.
Args: 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}") 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, """ get function from functions_mapping,
if not found, then try to check if builtin function. 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( def parse_string(
raw_string: Text, raw_string: Text,
variables_mapping: Dict[Text, Any], variables_mapping: VariablesMapping,
functions_mapping: Dict[Text, Callable]) -> Any: functions_mapping: FunctionsMapping) -> Any:
""" parse string content with variables and functions mapping. """ parse string content with variables and functions mapping.
Args: Args:
@@ -346,8 +346,8 @@ def parse_string(
def parse_data( def parse_data(
raw_data: Any, raw_data: Any,
variables_mapping: Dict[Text, Any] = None, variables_mapping: VariablesMapping = None,
functions_mapping: Dict[Text, Callable] = None) -> Any: functions_mapping: FunctionsMapping = None) -> Any:
""" parse raw data with evaluated variables mapping. """ parse raw data with evaluated variables mapping.
Notice: variables_mapping should not contain any variable or function. Notice: variables_mapping should not contain any variable or function.
""" """
@@ -379,10 +379,10 @@ def parse_data(
def parse_variables_mapping( def parse_variables_mapping(
variables_mapping: Dict[Text, Any], variables_mapping: VariablesMapping,
functions_mapping: Dict[Text, Callable] = None) -> Dict[Text, Any]: functions_mapping: FunctionsMapping = None) -> VariablesMapping:
parsed_variables: Dict[Text, Any] = {} parsed_variables: VariablesMapping = {}
while len(parsed_variables) != len(variables_mapping): while len(parsed_variables) != len(variables_mapping):
for var_name in variables_mapping: for var_name in variables_mapping:
@@ -409,12 +409,12 @@ def parse_variables_mapping(
if not_defined_variables: if not_defined_variables:
# e.g. {"varA": "123$varB", "varB": "456$varC"} # e.g. {"varA": "123$varB", "varB": "456$varC"}
# e.g. {"varC": "${sum_two($a, $b)}"} # e.g. {"varC": "${sum_two($a, $b)}"}
raise VariableNotFound(not_defined_variables) raise exceptions.VariableNotFound(not_defined_variables)
try: try:
parsed_value = parse_data( parsed_value = parse_data(
var_value, parsed_variables, functions_mapping) var_value, parsed_variables, functions_mapping)
except VariableNotFound: except exceptions.VariableNotFound:
continue continue
parsed_variables[var_name] = parsed_value parsed_variables[var_name] = parsed_value

View File

@@ -5,7 +5,7 @@ from loguru import logger
from httprunner.v3.parser import build_url, parse_data, parse_variables_mapping from httprunner.v3.parser import build_url, parse_data, parse_variables_mapping
from httprunner.v3.response import ResponseObject from httprunner.v3.response import ResponseObject
from httprunner.v3.schema import TestsConfig, TestStep from httprunner.v3.schema import TestsConfig, TestStep, VariablesMapping
class TestCaseRunner(object): class TestCaseRunner(object):
@@ -18,11 +18,11 @@ class TestCaseRunner(object):
self.session = s self.session = s
return self return self
def with_variables(self, **variables) -> "TestCaseRunner": def with_variables(self, **variables: VariablesMapping) -> "TestCaseRunner":
self.config.variables.update(variables) self.config.variables.update(variables)
return self return self
def run_step(self, step): def run_step(self, step: TestStep):
logger.info(f"run step: {step.name}") logger.info(f"run step: {step.name}")
# parse # parse

View File

@@ -8,7 +8,8 @@ from pydantic import HttpUrl
Name = Text Name = Text
Url = Text Url = Text
BaseUrl = Union[HttpUrl, Text] BaseUrl = Union[HttpUrl, Text]
Variables = Dict[Text, Any] VariablesMapping = Dict[Text, Any]
FunctionsMapping = Dict[Text, Callable]
Headers = Dict[Text, Text] Headers = Dict[Text, Text]
Verify = bool Verify = bool
Hook = List[Text] Hook = List[Text]
@@ -33,8 +34,8 @@ class TestsConfig(BaseModel):
name: Name name: Name
verify: Verify = False verify: Verify = False
base_url: BaseUrl = "" base_url: BaseUrl = ""
variables: Variables = {} variables: VariablesMapping = {}
functions: Dict[Text, Callable] functions: FunctionsMapping = {}
setup_hooks: Hook = [] setup_hooks: Hook = []
teardown_hooks: Hook = [] teardown_hooks: Hook = []
export: Export = [] export: Export = []
@@ -56,6 +57,6 @@ class Request(BaseModel):
class TestStep(BaseModel): class TestStep(BaseModel):
name: Name name: Name
request: Request request: Request
variables: Variables = {} variables: VariablesMapping = {}
extract: Dict[Text, Text] = {} extract: Dict[Text, Text] = {}
validation: Validate = Field([], alias="validate") validation: Validate = Field([], alias="validate")