天天看點

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

作用:将函數參數解析到​

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