在做接口测试时,接口请求参数用占位符来替换,但是因为代码的错误处理会带来错误的参数传递。
具体是这样的,传参是username=&password=*{password3},
写了个变量替换方法
def regi_var_substitute(params): #10132026 要注意:当参数是username=&password=*{password3},这里的参数替换,不能让username后面的空值变成None regi_dict = excel_util.load_vars_to_dict(FILE_PATH, REGIS_DATA_SHEET) if params and '&' in params: param_pair = params.split('&') for pair in param_pair: k, v = pair.split('=') if v is None: params = params.replace(v, '') print('after subs: ', params) else: real_value = str(regi_dict.get(v)) print('real value: ', real_value) params = params.replace(v, real_value) elif '&' not in params: k, v = params.split('=') real_value = regi_dict.get(v) params = params.replace(v, real_value) else: print('参数为空,无需替换') return params结果,运行测试脚本总是报错,
NoneuNonesNoneeNonerNonenNoneaNonemNoneeNone=None&NonepNoneaNonesNonesNonewNoneoNonerNonedNone=None*None{NonepNoneaNonesNonesNonewNoneoNonerNonedNone3None}None
出现以上这样的问题。
问了DS,才知道问题出现在哪。
问题1:代码if v is None:
对username=做split('=')后,得到的是('username',''),这里的v是空字符串(''),而不是None
用这个逻辑去判断,永远会走else分支
else:
real_value=str(regi_dict.get('') # get('')->None->str(None)->'None'
params = params.replace('', 'None') # 这就是灾难
str.replace('','None')会把'None'插入到每个字符之间
username=&password=*{password3} ->NoneuNonesNoneeNoner...(每个字符缝里都塞上None)
不得不说,代码里的问题太多了,一不留神就出错了。
正确判断应该用:
if v == '' or v is None:
continue # 空值直接跳过,不要做任何replace
问题2:real_value=regi_dict.get(v)没有判空
变量名没找到时返回None, str(None)='None'被写进参数,接口收到的就是字符串"None",而不是空。
总结:代码要很仔细的写,否则就会带来意料之外的问题。