批量造数据程序

批量造数据程序,适用于压力测试,测试数据准备,SQL查询语句优化(需要大量数据)

 

可一定之进程数,每个进程中开启线程数,已经进程处理的数据量等

 

 

MrNeo Chen (netkiller)陈景峰(BG7NYT)

版权 © 2011, 2012 http://netkiller.github.com

摘要

 

 

 

主程序

 

 

Python代码   收藏代码
  1. #!/usr/bin/env python3  
  2. #-*- coding: utf-8 -*-  
  3. ##############################################  
  4. # Home  : http://netkiller.sourceforge.net/  
  5. # Author: Neo <openunix@163.com>  
  6. ##############################################  
  7. # vim:ts=4:sw=4  
  8.   
  9. logfile = '/tmp/loopdata.log'  
  10. ##############################################  
  11. import MySQLdb  
  12. import Queue  
  13. import threading  
  14. import time  
  15. import logging  
  16. import os,sys  
  17. import random, string  
  18.   
  19. import table  
  20.   
  21. class ThreadDB(threading.Thread):  
  22.     def __init__(self, queue):  
  23.         threading.Thread.__init__(self)  
  24.         self.queue = queue  
  25.         logging.basicConfig(level=logging.NOTSET,  
  26.                     format='%(asctime)s %(levelname)-8s %(message)s',  
  27.                     datefmt='%Y-%m-%d %H:%M:%S',  
  28.                     filename=logfile,  
  29.                     filemode='a')  
  30.         self.logging = logging.getLogger()  
  31.         self.logging.debug(self.name + ' Start')  
  32.   
  33.   
  34.     def run(self):  
  35.         db=MySQLdb.connect(host='localhost', user='neo', passwd='chen',db="neo", charset="utf8")  
  36.   
  37.         cursor=db.cursor()  
  38.         running = True  
  39.         sql = None  
  40.         while running:  
  41.             #grabs host from queue  
  42.             try:  
  43.                 sql = self.queue.get()  
  44.             except Exception as e:  
  45.                 print (e)  
  46.                 running=False  
  47.                 break  
  48.             try:  
  49.                   
  50.                 n = 0                 
  51.                 n = cursor.execute(sql)  
  52.                 log = self.name +"\t"'' +''+' '+sql  
  53.                 self.logging.debug(log.replace('\n','').replace('\t',''))  
  54.   
  55.             except NameError as e:  
  56.                 print (e)  
  57.                 break  
  58.             except Exception as e:  
  59.                 print (e)  
  60.                 break  
  61.             except:  
  62.                 break  
  63.   
  64.             self.queue.task_done()  
  65.         db.commit()  
  66.         cursor.close()  
  67.         db.close()  
  68.         self.logging.debug(self.name + ' End')  
  69.   
  70. class Main():  
  71.     def __init__(self):  
  72.         self.queue = Queue.Queue()  
  73.     def threading(self, maxconn = 100):  
  74.         for i in range(maxconn):  
  75.             t = ThreadDB(self.queue)  
  76.             t.setDaemon(True)  
  77.             t.start()  
  78.         pass          
  79.     def run(self, count = 0):  
  80.           
  81.         n = 0  
  82.         while n < count:  
  83.               
  84.             self.queue.put(table.test1())  
  85.   
  86.             n = n + 1  
  87.   
  88.         #wait on the queue until everything has been processed       
  89.         self.queue.join()  
  90.   
  91. class Loop():  
  92.     def __init__(self, process = 1, thread = 1, count = 1):  
  93.         n = 0  
  94.         while n < process :  
  95.             try:   
  96.                 pid = os.fork()   
  97.                 if pid > 0:  
  98.                     # exit first parent  
  99.                     sys.exit(0)   
  100.                 else:  
  101.                     main = Main()  
  102.                     start = time.time()  
  103.                     main.threading(thread)  
  104.                     main.run(count)  
  105.                     print ("Elapsed Time: %s" % (time.time() - start))            
  106.             except OSError, e:   
  107.                 print >>sys.stderr, "fork #1 failed: %d (%s)" % (e.errno, e.strerror)   
  108.                 sys.exit(1)           
  109.             n = n + 1  
  110. if __name__ == '__main__':  
  111.   
  112.     """ 
  113.     main = Main() 
  114.     start = time.time() 
  115.     main.threading(5) 
  116.     main.run(5) 
  117.     print ("Elapsed Time: %s" % (time.time() - start)) 
  118.     """  
  119.   
  120.     try:  
  121.         loop = Loop(510010000)  
  122.     except KeyboardInterrupt:  
  123.         print ("Crtl+C Pressed. Shutting down.")  
  124.         os.exit()  

 

 

 

Python代码   收藏代码
  1. $ cat table.py  
  2. #-*- coding: utf-8 -*-  
  3. import random,string  
  4. def <span style="background-color: #ffffff;">test0</span>():  
  5.     sql = """ 
  6.     INSERT INTO test0 
  7.     VALUES( 
  8.         '%s', 
  9.         '%s', 
  10.         '%s', 
  11.         '%s',    
  12.         '%s', 
  13.         '%s', 
  14.         '%s', 
  15.         '%s', 
  16.         '%s', 
  17.         '%s',  
  18.         '%s',  
  19.         '%s', 
  20.         '%s',    
  21.         '%s', 
  22.         '%s', 
  23.         '%s', 
  24.         '%s' 
  25.     ); 
  26.     """  
  27.   
  28.     chinese_name = 'test'   
  29.     sex = random.choice(("male""female"))  
  30.     id_name     = random.choice(("身份证","护照","军人证"))  
  31.     id_number   = random.randint(000000000000000000999999999999999999)  
  32.   
  33.     city        = random.choice((  
  34.         "黑龙江省哈尔滨市",  
  35.         "黑龙江省齐齐哈尔市",  
  36.         "黑龙江省鸡西市",  
  37.         "黑龙江省鹤岗市",  
  38.         "黑龙江省双鸭山市",  
  39.         "黑龙江省大庆市",  
  40.         "黑龙江省伊春市",  
  41.         "黑龙江省佳木斯市",  
  42.         "黑龙江省七台河市",   
  43.         "黑龙江省牡丹江市",   
  44.         "黑龙江省黑河市",  
  45.   
  46.         "广东省广州市",  
  47.         "广东省深圳市",   
  48.         "广东省珠海市",   
  49.         "广东省汕头市",  
  50.         "广东省佛山市",   
  51.         "广东省江门市",  
  52.         "广东省湛江市",  
  53.         "广东省茂名市",  
  54.         "广东省肇庆市",  
  55.         "广东省惠州市",   
  56.         "广东省梅州市",  
  57.         "广东省汕尾市",  
  58.         "广东省河源市",   
  59.         "广东省阳江市",  
  60.         "广东省清远市",  
  61.         "广东省东莞市",   
  62.         "广东省中山市",   
  63.         "广东省潮州市",   
  64.         "广东省揭阳市",  
  65.         "广东省云浮市"  
  66.         ))  
  67.   
  68.     address     = city + random.choice(("XXXX""XXXX""XXXX"))  
  69.   
  70.     mobile_prefix = random.choice(("131""133""134"'135''136''137','138''139''186'))  
  71.     mobile_suffer = random.randint(0000000099999999)  
  72.     mobile      = '086-'+mobile_prefix + str(mobile_suffer)  
  73.   
  74.     bankname    = random.choice((  
  75.         "中国工商银行",   
  76.         "招商银行",   
  77.         "中国农业银行",  
  78.         "中国建设银行",  
  79.         "中国银行",  
  80.         "中国民生银行",  
  81.         "中国光大银行",  
  82.         "中信银行",  
  83.         "交通银行",  
  84.         "兴业银行",  
  85.         "上海浦东发展银行",  
  86.         "中国人民银行",  
  87.         "华夏银行",  
  88.         "深圳发展银行",  
  89.         "广东发展银行",  
  90.         "国家开发银行",  
  91.         "中国邮政储蓄银行",  
  92.         "中国进出口银行",  
  93.         "中国农业发展银行"  
  94.         ))  
  95.     bankaddr    = city + bankname  
  96.     bankno      = random.randint(0000000000009999999999999)  
  97.   
  98.     createtime  = random.randint(00000000009999999999)  
  99.   
  100.     amount      = str(random.randint(50999999)) + '.00'  
  101.     add_amount  = '0.00'  
  102.   
  103.     question    = 'question'  
  104.     answer      = 'answer'  
  105.   
  106.     browser     = random.choice(("Mozilla/4.0""Firefox 3.5""MSIE 7""MSIE 8""Chrome 3.0""Opera 7.1""Safer 5.0"))  
  107.   
  108.     country     = '中国(大陆)'  
  109.   
  110.     username = string.join(random.sample(['a','b','c','d','e','f','g','h','i','j'], 3)).replace(" ","")  
  111.   
  112.     return(sql % (chinese_name + username , sex, id_name, id_number, address, mobile, bkname, bkaddr, bno, createtime,amount, question, answer, browser, ))  
  113.   
  114.   
  115. def test1():  
  116.   
  117.   
  118.       
  119.     insert = """INSERT INTO test1(name, sex, mobile,qq,email,username,password, createtime,type,area,,browser) VALUES %s, %s, %s, %s, %s, %s, %s, %s, %s, %s ;"""  
  120.   
  121.     sql = insert % (_demousers_value(),_demousers_value(),_demousers_value(),_demousers_value(),_demousers_value(), _demousers_value(),_demousers_value(),_demousers_value(),_demousers_value(),_demousers_value())  
  122.     #print(sql);  
  123.     return(sql)  
  124.   
  125. def _demousers_value():  
  126.     name = string.join(random.sample(['a''b''c''d''e''f''g''h''i''j''k''l''m''n''o''p''q''r''s''t''u''v''w''x''y''z',  
  127. 'A''B''C''D''E''F''G''H''I''J''K''L''M''N''O''P''Q''R''S''T''U''V''W''X''Y''Z'  
  128. ], 6)).replace(" ","")  
  129.     sex = random.choice(("male""female"))  
  130.     mobile_prefix = random.choice(("131""133""134"'135''136''137','138''139''186'))  
  131.     mobile_suffer = str(random.randint(0000000099999999))  
  132.     mobile      = mobile_prefix + str(mobile_suffer)  
  133.     qq          = str(random.randint(0000000099999999))  
  134.     email       = ' '  
  135.     other_contact = ' '  
  136.     username    = str(random.randint(0000000099999999))  
  137.     password    = str(random.randint(0000000099999999))  
  138.     createtime  = str(random.randint(000000000999999999))  
  139.     ad_from     = ' '  
  140.     ad_keyword  = ' '  
  141.     area        = 'cn'  
  142.     browser     = random.choice(("Mozilla/4.0""Firefox 3.5""MSIE 7""MSIE 8""Chrome 3.0""Opera 7.1""Safer 5.0"))  
  143.     sms_status  = random.choice(('succeed','failed','mobilesucceed','emailsucceed','unsend'))  
  144.   
  145.     values = """('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')""" % (name, sex, nationality, mobile,qq,email,username,password, createtime,browser)  
  146.     return(values);   
 

仅供参考,学习使用,不能直接运行,table.py需要根据你的实际情况定制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值