针对常规接口测试,递归遍历所有参数各种类型异常输入的例子

#-*- 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
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值