为了进行压力测试需要做几份大数据文件,根据表定义不同生成的文件的列数和类型也不同,分为
RandomName:随机长度的字符串最大长度通过参数指定
RandomIndex:打乱顺序的自增长序列
RandomInt:随机整数值最大值通过参数指定
RandomUF:随机浮点数最大值通过参数指定
RandomDay,RandomTime:随机日期和日期时间,起始和截止通过参数指定.
RandomChoice:随机指定CodeList值
详细代码如下:
1 import time 2 import binascii 3 import os 4 import sys 5 from random import shuffle 6 from numpy import random 7 8 # Code Value 9 COD3 = ['AED', 'AFN', 'ALL', 'AMD', 'ANG', 'AOA'] 10 11 class RandomObject: 12 intCount = 10000 13 __listRand = [] 14 __genRandFun = object 15 16 def __init__(self, fun): 17 self.__genRandFun = fun 18 19 def __str__(self): 20 if len(self.__listRand) == 0: 21 self.__listRand = self.__genRandFun() 22 return self.__listRand.pop() 23 24 def __int__(self): 25 if len(self.__listRand) == 0: 26 self.__listRand = self.__genRandFun() 27 return self.__listRand.pop() 28 29 def __float__(self): 30 if len(self.__listRand) == 0: 31 self.__listRand = self.__genRandFun() 32 return self.__listRand.pop() 33 34 35 class RandomName(RandomObject): 36 def __init__(self, intLen=1): 37 self.__intLen = intLen 38 RandomObject.__init__(self, self.__genRandomValue) 39 40 def __genRandomValue(self): 41 randList = [] 42 for rand in random.randint(1, self.__intLen + 1, RandomObject.intCount): 43 randList.append(binascii.hexlify(os.urandom(rand)).decode()[0:rand]) 44 return randList 45 46 47 class RandomChoice(RandomObject): 48 def __init__(self, list): 49 self.__list = list 50 RandomObject.__init__(self, self.__genRandomValue) 51 52 def __genRandomValue(self): 53 return random.choice(self.__list, RandomObject.intCount).tolist() 54 55 56 class RandomInt(RandomObject): 57 __intLen = 0 58 59 def __init__(self, intLen): 60 self.__intLen = intLen 61 RandomObject.__init__(self, self.__genRandomValue) 62 63 def __genRandomValue(self): 64 return random.randint(1, self.__intLen + 1, RandomObject.intCount).tolist() 65 66 67 class RandomUF(RandomObject): 68 def __init__(self, intLen): 69 self.__intLen = intLen 70 RandomObject.__init__(self, self.__genRandomValue) 71 72 def __genRandomValue(self): 73 return random.uniform(1, self.__intLen + 1, RandomObject.intCount).tolist() 74 75 76 class RandomDay(RandomObject): 77 def __init__(self, startDay=20000101, endDay=20200108): 78 self.__startDay = startDay 79 self.__endDay = endDay 80 RandomObject.__init__(self, self.__genRandomValue) 81 82 def __genRandomValue(self): 83 randList = [] 84 mDate = random.randint(self.__startDay, self.__endDay, RandomObject.intCount) 85 for i in range(0, len(mDate) - 1): 86 y, m = divmod(mDate[i], 10000) 87 m, d = divmod(m, 100) 88 randList.append("%04d%02d%02d" % (y, (m % 12) + 1, (d % 28) + 1)) 89 return randList 90 91 92 class RandomTime(RandomObject): 93 __startDay = 0 94 __endDay = 0 95 96 def __init__(self, startDay=20000101, endDay=20200108): 97 self.__startDay = startDay 98 self.__endDay = endDay 99 RandomObject.__init__(self, self.__genRandomValue) 100 101 def __genRandomValue(self): 102 randList = [] 103 mHrs = random.randint(0, 23, RandomObject.intCount) 104 mMints = random.randint(0, 59, RandomObject.intCount) 105 mSends = random.randint(0, 59, RandomObject.intCount) 106 107 mDate = random.randint(self.__startDay, self.__endDay, RandomObject.intCount) 108 for i in range(0, len(mDate) - 1): 109 y, m = divmod(mDate[i], 10000) 110 m, d = divmod(m, 100) 111 randList.append( 112 "%04d/%02d/%02d" % (y, (m % 12) + 1, (d % 28) + 1) + " %02d:%02d:%02d" % ( 113 mHrs[i], mMints[i], mSends[i])) 114 return randList 115 116 117 class RandomIndex(RandomObject): 118 def __init__(self, startCount, ranCount): 119 self.__startCount = int(startCount) 120 self.__ranCount = int(ranCount) 121 RandomObject.__init__(self, self.__genRandomIndex) 122 123 def __genRandomIndex(self): 124 ranList = range(self.__startCount, self.__startCount + self.__ranCount) 125 ranList = list(ranList) 126 shuffle(ranList) 127 return ranList 128 129 130 def genDataBase1(fileName='default.csv', iStart=1, dataCount=10): 131 # Inital Random Class 132 randIdx = RandomIndex(iStart, dataCount) 133 randNm19 = RandomName(19) 134 randDay_20120601_20170629 = RandomDay(20120601, 20170629) 135 randUF999999999999999 = RandomUF(999) 136 randINT = RandomInt(2147483647) 137 randChr_COD3 = RandomChoice(COD3) 138 randTime_20160101_20171231 = RandomTime(20160101, 20171231) 139 140 outp = open(fileName, 'w') 141 iStart = int(iStart) 142 dataCount = int(dataCount) 143 i = iStart - 1 144 while i < dataCount + iStart - 1: 145 # Format String 146 m_format = "'%05i','%s','%i','%0.5f','%s','%s','%s'\n" 147 # Value Expression 148 m_value = ( 149 randIdx, randNm19, randINT, randUF999999999999999, randDay_20120601_20170629, randTime_20160101_20171231, 150 randChr_COD3) 151 mLine = m_format % m_value 152 outp.write(mLine) 153 i += 1 154 outp.close() 155 156 157 if __name__ == "__main__": 158 random.seed() 159 start = time.time() 160 if len(sys.argv) == 4: 161 genDataBase1(sys.argv[1], sys.argv[2], sys.argv[3]) 162 else: 163 genDataBase1() 164 end = time.time() 165 print('use time:%d' % (end - start))
其中#Codelist #Intial Class #Format #Expression List可根据表定义不同自行更改
生成测试数据样式如下:
'00007','348a19be800a10b','1346619294','688.98200','20140214','2016/04/13 19:48:38','AOA'
'00002','f0','739566893','521.15793','20120708','2016/01/07 14:43:36','AFN'
'00009','ff09deb3d7368d2c509','1066446464','35.11855','20131124','2017/02/09 12:33:06','ALL'
'00005','e','1609587893','852.05709','20160303','2016/08/15 13:02:22','ALL'
'00008','b8ea04f21b414','1369157176','122.26536','20120107','2016/02/11 17:57:54','AFN'
'00003','e5bb989508afca6e4b5','1249235396','695.97509','20140610','2016/11/23 01:12:15','AFN'
'00006','5bbcefa3','143724217','751.23029','20140606','2016/06/02 01:43:51','AMD'
'00004','5aa1e19d3cfedb2','1802189343','174.93201','20150616','2016/09/07 10:34:18','ANG'
'00010','a9e40e481535fa04','752374554','716.81998','20120123','2017/01/09 22:22:51','AOA'
'00001','eafbb5ed8','1437209638','637.82241','20150204','2016/11/13 00:34:35','ANG'
浙公网安备 33010602011771号