zoukankan      html  css  js  c++  java
  • BJQA-IIATF1.0框架之《自动生成有效请求Json串》

    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": 1
    16         },
    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 copytargetDict
    47 
    48     for k,v in sourceList_dict.items():#遍历替换列表,使多测试用例同时生成
    49         recursionReplace(copytargetDict,k,v)
    50     return copytargetDict
    51 
    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 
    匹配重复元素列表:%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
  • 相关阅读:
    JVM之内存区域
    记录Spring Boot小项目的一些坑
    JVM之编译OpenJDK
    Java容器之HashMap源码分析1
    IO流(1)--文件流及其原理
    IO流(0)
    Java中的字节和字符
    整理全网优秀的API接口设计及相关优秀的接口管理、在线文档生成工具
    关于智慧城市的建设方案和资料,相关内容大多来源于互联网,收集整理方便项目经理、产品经理、相关交通领域公司的使用
    整理可视化大屏设计教程与相关资源,大屏设计,可视化
  • 原文地址:https://www.cnblogs.com/kuzaman/p/7252991.html
Copyright © 2011-2022 走看看