小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
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
复制代码