zoukankan      html  css  js  c++  java
  • 七、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默认 是换行

    # 正则表达式中不要随便加空格

    match 从最开始的地方进行匹配

    earch 可以在任意地方匹配,只匹配到第一个

    记录匹配位置 start(),end()
    """
    regular expression ==>re==》regx==>正则表达式
    """
    import re
    
    my_string = "xiaolingwangleling"
    # 正则表达式通常在匹配方式前加r,如下不加r默认
    是换行
    # 正则表达式中不要随便加空格
    print("a
    b")  
    print(r"a
    b") # a
    b
    
    # 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"
    # .匹配一个字符,除了
    
    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"www",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
  • 相关阅读:
    第一个MIPS汇编
    选你所爱,爱你所选
    海明码(汉明码)的工作机制
    第一个x86汇编程序
    机器学习 coursera【week1-3】
    描述符应用与类的装饰器
    多态,封装,反射,类内置attr属性,os操作复习
    面向对象操作
    类属性的增删改查,类属性和实例属性
    os常用模块,json,pickle,shelve模块,正则表达式(实现运算符分离),logging模块,配置模块,路径叠加,哈希算法
  • 原文地址:https://www.cnblogs.com/zhangjx2457/p/13750657.html
Copyright © 2011-2022 走看看