一、mock
什么是mock:模擬數據進行測試,假數據,不是接口真正返回的數據
為什么要使用mock:1.接口還沒完成,2.第三方的不方便直接調用的
客戶端mock:pip insatall mock
# 要測試add函數 def add(a,b): pass class TestAdd(unittest.TestCase): def test_add(self): # 變量命名成被測試的函數名稱,mock中填寫被測試函數返回值 # 等接口完成后,注釋掉mock語句 add = Mock(return_value=7) self.assertEqual(7,add(3,4))
# 用requests封裝的函數時,這個函數沒完成,直接用mock模擬 import requests from unittest import mock def request_lemonfix(): res = requests.get('http://www.lemonfix.com') return res.status_code.encode('utf-8') if __name__ == '__main__': request_lemonfix = mock.Mock(return_value="這里會顯示論壇主頁") print(request_lemonfix())
二、正則表達式
--為了匹配字符串,替換字符串
--是一門通用的技術,與語言無關
re:python自帶的標准庫,不需要安裝
# 正則表達式通常在匹配方式前加r,如下不加r默認\n是換行
# 正則表達式中不要隨便加空格
match 從最開始的地方進行匹配
earch 可以在任意地方匹配,只匹配到第一個
記錄匹配位置 start(),end()
""" regular expression ==>re==》regx==>正則表達式 """ import re my_string = "xiaolingwangleling" # 正則表達式通常在匹配方式前加r,如下不加r默認\n是換行 # 正則表達式中不要隨便加空格 print("a\nb") print(r"a\nb") # a\nb # match 從最開始的地方進行匹配 print(re.match(r"ling",my_string)) # None # search 可以在任意地方匹配,只匹配到第一個 res = re.search(r"ling",my_string) print(res) # <re.Match object; span=(4, 8), match='ling'> print(res.group()) # ling print(res.start()) # 4 匹配開始索引 print(res.end()) # 8 匹配結束索引 # find_all 可以在任意地方匹配,匹配到所有 print(re.findall(r"ling",my_string)) # ['ling', 'ling']
1)正則表達式語法


my_string = "_@_xiaoling256wangkkkkle88ling" # .匹配一個字符,除了\n print(re.search(r".",my_string)) # x # a. print(re.search(r"a.",my_string)) # ao # []代表匹配里面的某一個,[abc],要么匹配a,要么匹配b,要么匹配c print(re.search(r"[oge]",my_string)) # \d表示匹配一個數字 、\D表示非數字 print(re.search(r"\d",my_string)) print(re.search(r"\D",my_string)) # [0-9]和\d等價 print(re.search(r"[0-9]",my_string)) # \w匹配大小寫字母,0-9 下划線_ \W 匹配非單詞字符 print(re.search(r"\w",my_string)) print(re.search(r"\w\w\w",my_string)) print(re.search(r"\W",my_string)) # * 表示前面字符0次或者任意次 print(re.search(r"\d*",my_string)) # 匹配0次和任意次就隨機的 print(re.search(r".*",my_string)) # + 表示前面字符1次或者任意次,盡可能多的匹配(貪婪模式) print(re.search(r"\d+",my_string)) # ?匹配1次或者0次(隨機) 通常的用法表示非貪婪模式 print(re.search(r"\d+?",my_string)) # {m}匹配多少次 print(re.search(r"k{2}",my_string)) print(re.search(r"k{2,}",my_string)) print(re.search(r"k{2,}?",my_string))
group重點
login_data = '{"member_id": #member_id#,"amount":#money#}' # 不加括號只有一個組,#member_id# pattern = r"#.+?#" print(re.search(pattern,login_data).group(0)) # 加括號有兩個分組,group(0)d代表#member_id#,group(1)代表括號里的部分member_id,有多少括號就有多少分組 pattern = r"#(.+?)#" print(re.search(pattern,login_data).group(0)) print(re.search(pattern,login_data).group(1))
替換用例中的#
login_data = '{"member_id": #member_id#,"amount":#money#}' pattern = r"#.+?#" print(re.search(pattern,login_data)) # 替換 result = re.sub(pattern,"19876",login_data,count=1) print(result) result = re.sub(pattern,"10000",result,count=1) print(result)
封裝
def replace_data(self,data): pattern = r"#(.+?)#" while re.search(pattern,data): key = re.search(pattern,data).group(1) value = getattr(self,key,"") data = re.sub(pattern,str(value),data,count=1) return data