博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BJQA-IIATF1.0框架之《自动生成有效请求Json串》
阅读量:5351 次
发布时间:2019-06-15

本文共 7674 字,大约阅读时间需要 25 分钟。

2017年7月28日,今天是一个里程碑的日子,根据参数及数值通过结对有效算法自动生成字典形式的测试用例功能模块完成,鼓掌,鼓掌!

替换postdata模板内指定元素值的代码如下:

1 import copy 2 import  createPWtestcase 3 dicta ={ 4     "H": { 5         "ACID": "aaaaa", 6         "Ver": ["aaaa","bbbb"], 7         "CInf": [100,2,1000], 8         "TID": "df22839322dfceb0622b5c6be5879ed852d594d5" 9     },10     "B": {11         "Login": {12             "Type": "LP",13             "Name": "18601231676",14             "Pwd": "123456",15             "ForToken": 116         },17         "TInfo": {18             "IMSI": "460029636249253",19             "IMEI": "868349029037662",20             "AndroidID": "ed93e839f67279df",21             "Mac": "68: 3e: 34: 14: 61: e7",22             "NetType": "Wifi",23             "Model": "m2note",24             "OsVer": "5.1",25             "AppVer": "4.0.0"26         },27         "TT": "kAEBLgABABQzMjAxMTcwNjA1MTcyMjMxMDEzNwEACjMwMDA2NjkxNDIAAAFcjH7IjgERrT0YjQhgPAjXvmY9Z1lM8A"28     }29 }30 31 dictd={
'ACID': ['999','appchina'], 'Ver': [['IOS_5.0.0_1.0', 'IOS_5.0.0'],['Android2.0.0']], 'CInf': [100, 2, 1000], 32 'TID': ['df22839322dfceb0622b5c6be5879ed852d594d5'],'Type': [['LP'],['PH']], 'Name': [['18232441676'],['15806666690']],33 'Pwd': ['123456'], 'ForToken':[ 1], 'IMSI': ['460029636249253'], 'IMEI': [['868349029037662'],['666666']], 'AndroidID': ['ed93e839f67279df'], 34 'Mac': ['68: 3e: 34: 14: 61: e7'], 'NetType': ['Wifi','4G','3G'], 'Model': ['m2note'], 'OsVer': [['5.1'],['ios9'],['IOS10']]35 , 'AppVer': [['4.0.0'],['4.0.1'],['4.0.2']], 'TT': ['kAEBLgABABQzMjAxMTcwNjA1MTcyM']}36 def quantizeJsonTemplet(targetDict,sourceList_dict):37 copytargetDict = copy.deepcopy(targetDict)38 def recursionReplace(copytargetDict,serchKey,newValue):39 for k,v in copytargetDict.items():40 if isinstance(v,dict) : #值是字典元素,则递归处理41 recursionReplace(v,serchKey,newValue)42 else:43 if k == serchKey:44 # print ('-----Find it:',k)45 copytargetDict[k] = newValue #对目标字典元素的值重写46 return copytargetDict47 48 for k,v in sourceList_dict.items():#遍历替换列表,使多测试用例同时生成49 recursionReplace(copytargetDict,k,v)50 return copytargetDict51 52 53 #测试程序54 u2 = createPWtestcase.utils2()55 allvalues=dictd.values()56 allkeys = dictd.keys()57 58 finallist = u2.dictzip(allkeys,allvalues,2)59 u2.pprint(finallist)
CTF2.py

 

 

 

CTF2.py需要依赖的py文件:

1 # -*- coding: utf-8 -*-  2 from datetime import *  3 import random,os,copy,time  4 import logging  5 import itertools  6 '''  7 #Author:Kuzaman  8 #Time:2017-07-18  9 ''' 10 class utils2 : 11     #1、笛卡尔积 对参数分组全排列 12     def product(self,allparams): 13         newlist=[] 14         for x in eval('itertools.product'+str(tuple(allparams))): 15             newlist.append(x) 16         print (len(newlist)) 17         return newlist     18      19     #2、对笛卡尔积处理后的二维原始数据进行N配对处理,得到Pairwise计算之前的数据 20     def get_pairslist(self,productedlist,pairlen): 21         pwlist = [] 22         for i in productedlist: 23             subtemplist = [] 24             for sublista in itertools.combinations(i,pairlen): 25                 subtemplist.append(sublista) 26             pwlist.append(subtemplist) 27         return pwlist 28      29     #3、进行Pirwise算法计算 30     def pairwise(self,allparams,pairlen): 31         productedlist=self.product(allparams)   #productedlist笛卡尔积全排列组合的测试用例 32         # self.pprint(productedlist)   33         # print ('笛卡尔积全排列组合数量:',len(productedlist),'--'*11)         34         listb = self.get_pairslist(productedlist,pairlen)   #listb:对测试用例结对拆分后的二维列表         35         sublistlen = len(listb[1])  #sublistlen:每个测试用例拆分后一维列表长度 36         flag = [0]*sublistlen       #一条测试用例拆分后,每个结对在二维列表同位置上是否有相 37                                     #同值,其标识列表为flag,flag长度根据sublistlen改变         38         templistb = copy.deepcopy(listb)#【有效组】的原始值与listb相同 39         delmenu = []    #无效测试用例编号列表 40         holdmenu=[]     #有效测试用例编号列表 41         # self.pprint (listb) 42         # print ('--'*7,'有效测试用例计算结果','--'*7) 43         for cow in listb:           #一维遍历,等同于二维数组按照行遍历 44             for column in cow:      #二维遍历,等同二维数组中任意一行按照‘列’横向遍历 45                 for templistbcow in templistb:      #【有效组=templistb】中按照行,从上至下遍历 46                     Xa = cow.index(column)          #待校验元素的横坐标 47                     Ya = listb.index(cow)           #待校验元素的纵坐标 48                     #有效组中行不能是当前要对比元素所在的行, 49                     #且带对比元素与【有效组】的行templistbcow中的坐标Xa元素相同, 50                     #则认为对比成功,跳出第三层for循环。 51                     if templistbcow != cow and column == templistbcow[Xa]: 52                         # print (column,'===>' ,templistbcow[Xa],'相等了。。。') 53                         flag[Xa] = 1   #1表示对比成功 54                         break 55                     else: #对比不成功,需要继续第三层for循环对比 56                         # print (column,'===>' ,templistbcow[Xa],'不不不等了。。。') 57                         flag[Xa] = 0   #0表示对比不成功 58             # print ('下标%d,子元素 %s 双匹配对比结果flag:%s'%(listb.index(cow),cow,flag)) 59             if 0 not in flag:    #如果对比列表中都是1,表明该行的所有结对都在同列的对应位置找到了 60                 num = listb.index(cow)  61                 delmenu.append(num)     #记录该无用用例所在总列表listb中的位置 62                 templistb.remove(cow)   #有效组中删除该无用用例,保持有效性 63                 # print ('下标为%d行应删除,内容=%s,'%(num,cow)) 64                 # print ('delmenu:',delmenu) 65             else:  #如果有0出现在对比列表flag中,则表示该行所有结对组并未全在同列对应位置找到,此用例为有效用例应保留 66                 num2 = listb.index(cow)   67                 holdmenu.append(num2)     #记录有效用例在总列表listb中的坐标 68                 # print ('---------------下标为%d行应保留,内容=%s'%(num2,cow)) 69                 # print('holdmenu=',holdmenu) 70             # print ('***'*20) 71         print ('保留元素列表:%s \n匹配重复元素列表:%s'%(holdmenu,delmenu)) 72         return self.pwresult(productedlist,holdmenu) 73  74     def pwresult(self,slist,holdmenu): 75         holdparamslist = [] 76         for  item in holdmenu: 77             holdparamslist.append(slist[item]) 78         return holdparamslist 79  80     def pprint(self,list): 81         for item in list: 82             print ('line %d:'%(list.index(item)+1),item) 83             # print (item) 84     def dictzip(self,listkeys,allparams,pairlen): 85         twoLevellistvalues = self.pairwise(allparams,pairlen) 86         list_dict = [] 87         for listvalues in twoLevellistvalues: 88             list_dict.append(dict(zip(listkeys,listvalues))) 89         return list_dict 90  91 if __name__ == '__main__': 92     u2 = utils2() 93     # allparams=[['M','O','P'],['W','L','I'],['C','E' 94     # allparamsdict={'os':['M','O','T'],'Brow':['L','I','T'],'top':['s','T','E','K'],'Level':[1,3],'flag':['Yes','No'],'is666':['666','']} 95  96     dictd={
'ACID': ['999','appchina'], 'Ver': [['IOS_5.0.0_1.0', 'IOS_5.0.0'],['Android2.0.0']], 'CInf': [100],'TID': ['df22839322dfceb0622b5c6be5879ed852d594d5'] 97 ,'Type': ['LP','PH'], 'Name': ['15806666690'],'Pwd': ['123456'], 'ForToken': ['1'], 'IMSI': ["460029636249253"], 'IMEI': ['666666'], 98 'AndroidID': ['ed93e839f67279df'], 'Mac': ['68: 3e: 34: 14: 61: e7'], 'NetType': ['Wifi','4G'], 'Model': ['m2note'], 'OsVer': [['4.4'],['6.0'],['5.1']], 99 'AppVer': ['4.0.0','4.0.1'], 'TT': ['kAEBLgABABQzMjAxMTcwNjA1MTcyM']} 100 101 102 103 104 allvalues=dictd.values()#[['M','O','T'],['L','I','T'],['s','T','E','K'],[1,3],['Yes','No'],['666','']]105 allkeys = dictd.keys()106 u2.product(allvalues)107 # finallist = u2.dictzip(allkeys,allvalues,2)108 # print('最终保留测试用例个数:%d 个'%(len(finallist)))109 # u2.pprint(finallist)
createPWtestcase.py

 

转载于:https://www.cnblogs.com/kuzaman/p/7252991.html

你可能感兴趣的文章
HashMap就是这么简单【源码剖析】
查看>>
伽玛分布
查看>>
hibernate.hbm2ddl.auto配置详解
查看>>
HTML5QQ登录cav demo
查看>>
ASP.NET MVC学习之母版页和自定义控件的使用
查看>>
交互式学习资源
查看>>
16位汇编第九讲汇编指令以及逆向中的花指令
查看>>
【Win10 应用开发】集成语音命令
查看>>
SPI 方式初始化 SD 卡总流程图(V2.0)
查看>>
杭电 2854Central Meridian Number 完全不懂的数论
查看>>
继承的实现原理
查看>>
Springboot整合druid
查看>>
监控本机CPU内存及IO 发邮件
查看>>
vue中a的href写法
查看>>
关于HTML中文乱码
查看>>
[bzoj2561]最小生成树_网络流_最小割_最小生成树
查看>>
网站设计中常犯的错误
查看>>
2、Ext.NET 1.7 官方示例笔记-按钮
查看>>
基于androidstudio3.0的build文件配置问题
查看>>
jQuery中的filter和find函数
查看>>