七、mock/正則


一、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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM