python接口自动化测试-正则表达式

一、值匹配 

1、. 表示匹配任意1个字符(除了\n换行符)默认字符串中第一个

span()表示匹配到的位置;

group()获取匹配到的字符串;

re.search()只找一个,符合的出现了就不再找了

import re
string = 'python337'
data = re.search(pattern=('.'),string=string)
print(data)
print(data.group())

输出

python接口自动化测试-正则表达式_第1张图片

 2、[value1,value2]匹配value1、value2中的任意一个

import re
string = 'python337'
data = re.search(pattern=('[yt]'),string=string)
print(data)
print(data.group())

 输出

python接口自动化测试-正则表达式_第2张图片

3、\d匹配任意数字0~9

import re
string = 'python337'
data = re.search(pattern=('\d'),string=string)
print(data)
print(data.group())

 输出

python接口自动化测试-正则表达式_第3张图片

4、其余常用:

\D匹配非数字;

\s匹配空格(相当于tab键,空白);

\S匹配非空格;

\w匹配特殊字符除外的字符(包含大小写字母、数字、下划线_);

\W匹配特殊字符

 二、次数匹配

1、* 一个字符出现0次或无限次,若是没有匹配到则是空字符串;匹配连着的

import re
string = 'python337'
data = re.search(pattern=('p*'),string=string)
print(data)
print(data.group())
data = re.search(pattern=('a*'),string=string)
print(data)
print(data.group())

 输出

python接口自动化测试-正则表达式_第4张图片

 2、+ 一个字符出现1次或无限次,至少1次;1以及1以上

import re
string = 'python337'
data = re.search(pattern=('3+'),string=string)
print(data)
print(data.group())

输出

python接口自动化测试-正则表达式_第5张图片

3、? 要么1次要么0次, 可有可无;要么有要么没;非贪婪模式

import re
string = '337'
data = re.search('3?',string)
print(data)

data = re.search('3*',string)
print(data)

输出

python接口自动化测试-正则表达式_第6张图片

4、{m,n}至少m次最多n次;{m,}至少匹配m次

三、定位符匹配

1、^  放在 [] 里是取反 , [^0-9] 除0-9的数据

import re
string = '33p7ython'
data = re.search(pattern=('[^0-9]'),string=string)
print(data)
print(data.group())

输出

python接口自动化测试-正则表达式_第7张图片

2、^  放在 [] 前面是以什么开头 

import re
string = 'python337'
data = re.search(pattern=('^p[y]*'),string=string)
print(data)
print(data.group()

 输出

python接口自动化测试-正则表达式_第8张图片

3、$ 放在后面是以什么结尾

string = 'hello python'
data = re.search('python$',string=string)
print(data)
print(data.group())

输出

python接口自动化测试-正则表达式_第9张图片

4、\b 单词边界 ,是一整个单词的匹配,若不是则匹配不出 牢记,使用\b时一定要加 r 否则会转义

import re
string = 'study python is great'
data = re.search(pattern=r'\bpython\b',string=string)
print(data)
print(data.group())

输出

python接口自动化测试-正则表达式_第10张图片

四、贪婪模式/非贪婪模式

1、 .*  则是贪婪模式,无限次;

import re
string = 'python337'
data = re.search(pattern=('.*'),string=string)
print(data)
print(data.group())

输出 

python接口自动化测试-正则表达式_第11张图片

2、.*?  非贪婪模式,0次,全都不匹配

import re
string = 'python337'
data = re.search(pattern=('.*?'),string=string)
print(data)
print(data.group())

 输出

python接口自动化测试-正则表达式_第12张图片

 五、#XXX#

1、贪婪模式,匹配所有符合的

import re
string = '{"mobile_phone": "#mobile_phone#", "pwd": "#pwd#"}'
data = re.search(pattern='#.*#',string=string)
print(data.group())

输出

python接口自动化测试-正则表达式_第13张图片

2、非贪婪模式,有满足结果的取1次

import re
string = '{"mobile_phone": "#mobile_phone#", "pwd": "#pwd#"}'
data = re.search(pattern='#.*?#',string=string)
print(data.group())

输出

python接口自动化测试-正则表达式_第14张图片

3、贪婪模式加()

import re
string = '{"mobile_phone": "#mobile_phone#", "pwd": "#pwd#"}'
data = re.search(pattern='#(.*)#',string=string)
print(data)
print(data.group())

输出

python接口自动化测试-正则表达式_第15张图片

4、非贪婪模式加()

import re
string = '{"mobile_phone": "#mobile_phone#", "pwd": "#pwd#"}'
data = re.search(pattern='#(.*?)#',string=string)
print(data.group())
print(data.group(1))

输出

python接口自动化测试-正则表达式_第16张图片

5、#xxx#值替换

import re
string = '{"mobile_phone": "#mobile_phone#"}'
data = re.search(pattern='#(.*?)#',string=string)

old_string = data.group()
new_string = data.group(1)

string = string.replace(old_string,new_string)
print(string)

输出:

python接口自动化测试-正则表达式_第17张图片

 六、group()

group()默认参数0,返回匹配的字符,匹配到的整个结果;

group(1)参数1,返回结果当中第一个括号里面的内容,参数是几就是第几个,得到去边界的字符串;若参数非0则表达式用()括起来,表示组,如#(.*?)

import re
string = '{"mobile_phone": "#mobile_phone#", "pwd": "#pwd#"}'
data = re.search(pattern='#(.*?)#',string=string)
print(data.group())
print(data.group(1))

输出

python接口自动化测试-正则表达式_第18张图片

七、re.search、re.finditer、re.findall

import re
string = '{"mobile_phone": "#mobile_phone#", "pwd": "#pwd#"}'

#re.search返回匹配的一个
data = re.search(pattern='#(.*?)#',string=string)
print(data)

#re.finditer返回的是迭代器
data = re.finditer(pattern='#(.*?)#',string=string)
print(data)

#re.findall返回的是有匹配的字符串,并存为⼀个列表中
data = re.findall(pattern='#(.*?)#',string=string)
print(data)

输出

python接口自动化测试-正则表达式_第19张图片

八、测试用例中使用,#XXX#替换成具体值

切记,xxx类属性名称==做标记的#xxx#保持一致,一致才可替换对应的属性值

替换类属性值

import re
string = '{"mobile_phone": "#mobile_phone#","pwd":"#pwd#"}'

class Data:
    mobile_phone = '13111111111'
    pwd = '12345678'

data = re.finditer(pattern='#(.*?)#',string=string)

for el in data:

    el.group()
    el.group(1)

    # 依次得到#mobile_phone#、#pwd#
    old_string = el.group()
    # 依次得到mobile_phone、pwd
    new_string = el.group(1)

    string = string.replace(old_string,getattr(Data,new_string))

print(string)

输出

python接口自动化测试-正则表达式_第20张图片

接口测试用例中使用(以注册接口为例)

正则表达式封装

import re

class ApiCase:
    phone = '13111111112'
    pwd = '12345678'

    def get_value(self,string):
        result = re.finditer(pattern='#(.*?)#',string=string)

        for el in result:
            old_value = el.group()
            para_value = el.group(1)
            string = string.replace(old_value,str(getattr(ApiCase,para_value)))
        return string

测试用例,继承类并还用类属性及方法

import unittest
import json
import requests
from tests.base import ApiCase
from func_faker import get_phone
from requests import request
from ddt import ddt,data
from common.excel_package import read_excel_dict
excelpath = r'E:\learn_python\pri_package\data\case_02.xlsx'
excel_data = read_excel_dict(excelpath,'register')
bef_url = 'http://api.lemonban.com:8766/futureloan'

@ddt
class Testlogin_url(unittest.TestCase,ApiCase):

    @data(*excel_data)
    def test_01(self,info):

        url = bef_url + info['url']
        method = info['method']
        json_data = info['json']

        json_data = self.get_value(json_data)
        json_data = json.loads(json_data)

        headers = json.loads(info['headers'])
        expected = json.loads(info['expected'])
        resp = requests.request(url=url,
                                method=method,
                                headers=headers,
                                json=json_data).json()

        self.assertEqual(expected['msg'],resp['msg'])

你可能感兴趣的:(python基础,python,机器学习,单元测试)