Python3接口自动化测试框架之正则re参数替换

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

re正则表达式

这里【不详细】介绍正则表达式的用法及其他方法,百度已有一堆完美诠释re的博客!
复制代码

接口测试中的应用

在实现接口自动化测试框架编码过程中,使用ddt设计测试用例,需要参数化;
因此采用re正则式来匹配需要参数化的请求参数,然后替换成新的请求参数;
复制代码
  • 演示参数:data={"phone":"#phone#","passwd":"#pwd#","name":"#name#","amount":123}
  • 正则表达式:parttern=r"#(.+?)#"
^:匹配字符串的开头
$:匹配字符串的结尾
.:匹配任意字符,除了换行符
+:匹配1个或多个的表达式
?:匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式,(左右边界到了就停止查找)
复制代码
  • re.match()和re.search()、re.findall()的区别:
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
注意: match 和 search 是匹配一次, findall 匹配所有。
复制代码
  • group()和groups()的区别
前者是匹配整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
例如:ress.group(0),ress.group(1),ress.group(0,1) 结果:#phone# 、phone 、'#phone#', 'phone')
后者返回一个包含所有小组字符串的元组,匹配找到的字符串
复制代码

封装re代码展示

import re
from common.HandleConfig import conf
from common.HandleLogging import log


class TestData:
    """这个类的作用:专门用来保存一些要替换的数据"""
    pass
 
 
def parameters_handle(data,partten=r"#(.+?)#"):
    '''根据正则匹配参数化,需要替换的参数'''
    
    # 判断是否有需要替换的数据
    while re.search(partten, data):
        # 匹配出第一个要替换的数据
        res = re.search(partten, data)
        # 提取待替换的内容
        item = res.group()
        # 获取替换内容中的数据项
        key = res.group(1)
        try:
            # 根据替换内容中的数据项去配置文件中找到对应的内容,进行替换
            data = data.replace(item, conf.get("test_data", key))
        except:
            try:
                data = data.replace(item, getattr(TestData,key))#要是类中没有这个属性,还是会报错提示类中没这个类属性
            except:
                log.error("TestData类中没有{}类属性".format(key))
                break
    # 返回替换好的数据
    return data
复制代码

猜你喜欢

转载自juejin.im/post/7018955303865548836