httprunner3原始碼解讀(4)parser.py
阿新 • • 發佈:2021-11-08
原始碼結構目錄
可以看到此模組定義了4個屬性和12個函式,我們依次來講解
屬性原始碼分析
# 匹配http://或https:// absolute_http_url_regexp = re.compile(r"^https?://", re.I) # 使用$$轉義$符號 dolloar_regex_compile = re.compile(r"\$\$") # 變數符號, e.g. ${var} or $var variable_regex_compile = re.compile(r"\$\{(\w+)\}|\$(\w+)") # 函式符號, e.g. ${func1($var_1, $var_3)} function_regex_compile = re.compile(r"\$\{(\w+)\(([\$\w\.\-/\s=,]*)\)\}")
函式原始碼分析
parse_string_value
作用:將字串轉換為數字
"123" => 123
"12.2" => 12.3
"abc" => "abc"
"$var" => "$var"
build_url
作用:在url前面加上base_url
,除非它已經是絕對url
regex_findall_variables
作用:從內容中提取所有變數名,格式為$variable
Examples: >>> regex_findall_variables("$variable") ["variable"] >>> regex_findall_variables("/blog/$postid") ["postid"] >>> regex_findall_variables("/$var1/$var2") ["var1", "var2"] >>> regex_findall_variables("abc") []
regex_findall_functions
作用:從字串內容中提取所有函式,格式為${fun()}
Examples: >>> regex_findall_functions("${func(5)}") ["func(5)"] >>> regex_findall_functions("${func(a=1, b=2)}") ["func(a=1, b=2)"] >>> regex_findall_functions("/api/1000?_t=${get_timestamp()}") ["get_timestamp()"] >>> regex_findall_functions("/api/${add(1, 2)}") ["add(1, 2)"] >>> regex_findall_functions("/api/${add(1, 2)}?_t=${get_timestamp()}") ["add(1, 2)", "get_timestamp()"]
extract_variables
作用:遞迴提取內容中的所有變數
parse_function_params
作用:將函式引數解析到args
和kwargs
Examples:
>>> parse_function_params("")
{'args': [], 'kwargs': {}}
>>> parse_function_params("5")
{'args': [5], 'kwargs': {}}
>>> parse_function_params("1, 2")
{'args': [1, 2], 'kwargs': {}}
>>> parse_function_params("a=1, b=2")
{'args': [], 'kwargs': {'a': 1, 'b': 2}}
>>> parse_function_params("1, 2, a=3, b=4")
{'args': [1, 2], 'kwargs': {'a':3, 'b':4}}
get_mapping_variable
作用:獲取對映變數
get_mapping_function
作用:獲取對映函式
parse_string
作用:將帶有變數和方法的字串,轉為字串實際內容
Examples:
>>> raw_string = "abc${add_one($num)}def"
>>> variables_mapping = {"num": 3}
>>> functions_mapping = {"add_one": lambda x: x + 1}
>>> parse_string(raw_string, variables_mapping, functions_mapping)
"abc4def"
parse_data
作用:封裝parse_string
提供給外部呼叫
parse_variables_mapping
作用:解析變數對映
parse_parameters
作用:解析引數,引數有3種形式
1. list列表:e.g. ["iOS/10.1", "iOS/10.2", "iOS/10.3"]
2.csv檔案上傳:"${parameterize(account.csv)}"
3.從debugtalk.py
函式中生成:${gen_app_version()}