1. 程式人生 > 其它 >httprunner3原始碼解讀(4)parser.py

httprunner3原始碼解讀(4)parser.py

原始碼結構目錄

可以看到此模組定義了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

作用:將函式引數解析到argskwargs

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()}