#-*- coding: utf-8 -*-
#author:yunque
import requests,json,sys,copy,codecs,time
#---------
if sys.getdefaultencoding() != 'utf-8':
reload(sys)
sys.setdefaultencoding('utf-8')
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
sys_encoding = sys.getfilesystemencoding()
#----------
#list存储返回结果
re_list=[]
class creatpostdata():
'''完成http请求输入参数生成,以列表返回到listfordic'''
def __init__(self):
self.tmpdic = {}
self.listfordic = []
def list_all_dict(self,dict_a,new_value,maindic=0,pop=False):
'''把入口字典dict_a,的所有层级的value依次替换成newvalue,
如果pop=Ture,依次删除对应的key及内容'''
print maindic
if maindic==0:
self.tmpdic = dict_a
if isinstance(dict_a,dict) :
for x in dict_a.keys():
if pop:
t_key = x
t_value = dict_a[x]
#做处理
dict_a.pop(x)
t = copy.deepcopy(self.tmpdic)
self.listfordic.append(t)
#复原
dict_a[t_key]=t_value
else:
t_value = dict_a[x]
dict_a[x] = new_value
#做处理
t = copy.deepcopy(self.tmpdic)
self.listfordic.append(t)
#复原
dict_a[x] = t_value
#递归
maindic = maindic+1
self.list_all_dict(t_value,new_value,maindic=maindic,pop=pop)
def newdata_request(re_url,re_header,re_data,request_type='post'):
'''入口函数'''
#定义异常数据的类型
global re_list
re_list=[]
longstr = 'abcdefghigklmabcdefghigklmabcdefghigklmabcdefghigklmabcdefghigklmabcdefgh'\
'igklmabcdefghigklmabcdefghigklmabcdefghigklmabcdefghigklmabcdefghigklmabc'
datalist=["","abcdefghigklm",10,"'!@%$&%&^*???aaa",u"a你好",None,longstr]
if request_type not in ["post","get"]:
print "can't support the request type "
return 1
#完成指定新字串的遍历
datalist=[""," ","abcdefghigklm",10,"'!@%$&%&^*???aaa",u"a你好",None]
for t_data in datalist:
listT = creatpostdata()
listT.list_all_dict(re_data,t_data)
for data in listT.listfordic:
re_list.append('==================================================================')
re_list.append("Request Data:"+str(data))
print "data:",data
if request_type=='post':
try:
#针对post内容为json的情况
if 'json' in re_header['Content-Type'].lower():
data=json.dumps(data)
except Exception as e:
print 'Content-Type', e
r = requests.post(re_url,headers=re_header,data=data,verify=False)
re_list.append('-------------------------------------------------------------------')
re_list.append("Response Data:"+r.text)
print "response:",r.text
elif request_type=='get':
r = requests.get(re_url,headers=re_header,params=data,verify=False)
re_list.append('-------------------------------------------------------------------')
re_list.append("Response Data:"+r.text)
print "response:",r.text
#完成删除key_value的遍历
listT = creatpostdata()
listT.list_all_dict(re_data,t_data,pop=True)
for data in listT.listfordic:
re_list.append('==================================================================')
re_list.append("Request Data:"+str(data))
print "data:",data
if request_type=='post':
r = requests.post(re_url,headers=re_header,data=json.dumps(data),verify=False)
re_list.append('-------------------------------------------------------------------')
re_list.append("Response Data:"+r.text)
print "response:",r.text
elif request_type=='get':
r = requests.get(re_url,headers=re_header,params=data,verify=False)
re_list.append('-------------------------------------------------------------------')
re_list.append("Response Data:"+r.text)
print "response:",r.text
#返回结果
re = '\n'.join(re_list)
return re
针对常规接口测试,递归遍历所有参数各种类型异常输入的例子
于 2018-12-11 11:27:25 首次发布