热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

批量造数据程序

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

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

 

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

 

 

MrNeo Chen (netkiller)陈景峰(BG7NYT)


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

摘要

 

下面是我多年积累下来的经验总结,整理成文档供大家参考:

 

Netkiller Architect 手札Netkiller Linux 手札Netkiller Developer 手札Netkiller Database 手札
Netkiller Debian 手札Netkiller CentOS 手札Netkiller FreeBSD 手札Netkiller Shell 手札
Netkiller Web 手札Netkiller Monitoring 手札Netkiller Storage 手札Netkiller Mail 手札
Netkiller Security 手札Netkiller Multimedia 手札Netkiller Writer 手札Netkiller Version 手札
Netkiller PostgreSQL 手札Netkiller MySQL 手札Netkiller Cryptography 手札Netkiller Cisco IOS 手札
Netkiller LDAP 手札Netkiller Intranet 手札

 

 

主程序

 

 

Python代码  收藏代码
  1. #!/usr/bin/env python3  
  2. #-*- coding: utf-8 -*-  
  3. ##############################################  
  4. # Home  : http://netkiller.sourceforge.net/  
  5. # Author: Neo   
  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 &#61; n &#43; 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 &#61; 1, thread &#61; 1, count &#61; 1):  
  93.         n &#61; 0  
  94.         while n < process :  
  95.             try:   
  96.                 pid &#61; os.fork()   
  97.                 if pid > 0:  
  98.                     # exit first parent  
  99.                     sys.exit(0)   
  100.                 else:  
  101.                     main &#61; Main()  
  102.                     start &#61; 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 &#61; n &#43; 1  
  110. if __name__ &#61;&#61; &#39;__main__&#39;:  
  111.   
  112.     """ 
  113.     main &#61; Main() 
  114.     start &#61; time.time() 
  115.     main.threading(5) 
  116.     main.run(5) 
  117.     print ("Elapsed Time: %s" % (time.time() - start)) 
  118.     """  
  119.   
  120.     try:  
  121.         loop &#61; Loop(510010000)  
  122.     except KeyboardInterrupt:  
  123.         print ("Crtl&#43;C Pressed. Shutting down.")  
  124.         os.exit()  

 

 

 

Python代码  收藏代码
  1. $ cat table.py  
  2. #-*- coding: utf-8 -*-  
  3. import random,string  
  4. def "background-color: #ffffff;">test0():  
  5.     sql &#61; """ 
  6.     INSERT INTO test0 
  7.     VALUES( 
  8.         &#39;%s&#39;, 
  9.         &#39;%s&#39;, 
  10.         &#39;%s&#39;, 
  11.         &#39;%s&#39;,    
  12.         &#39;%s&#39;, 
  13.         &#39;%s&#39;, 
  14.         &#39;%s&#39;, 
  15.         &#39;%s&#39;, 
  16.         &#39;%s&#39;, 
  17.         &#39;%s&#39;,  
  18.         &#39;%s&#39;,  
  19.         &#39;%s&#39;, 
  20.         &#39;%s&#39;,    
  21.         &#39;%s&#39;, 
  22.         &#39;%s&#39;, 
  23.         &#39;%s&#39;, 
  24.         &#39;%s&#39; 
  25.     ); 
  26.     """  
  27.   
  28.     chinese_name &#61; &#39;test&#39;   
  29.     sex &#61; random.choice(("male""female"))  
  30.     id_name     &#61; random.choice(("身份证","护照","军人证"))  
  31.     id_number   &#61; random.randint(000000000000000000999999999999999999)  
  32.   
  33.     city        &#61; 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     &#61; city &#43; random.choice(("XXXX""XXXX""XXXX"))  
  69.   
  70.     mobile_prefix &#61; random.choice(("131""133""134"&#39;135&#39;&#39;136&#39;&#39;137&#39;,&#39;138&#39;&#39;139&#39;&#39;186&#39;))  
  71.     mobile_suffer &#61; random.randint(0000000099999999)  
  72.     mobile      &#61; &#39;086-&#39;&#43;mobile_prefix &#43; str(mobile_suffer)  
  73.   
  74.     bankname    &#61; random.choice((  
  75.         "中国工商银行",   
  76.         "招商银行",   
  77.         "中国农业银行",  
  78.         "中国建设银行",  
  79.         "中国银行",  
  80.         "中国民生银行",  
  81.         "中国光大银行",  
  82.         "中信银行",  
  83.         "交通银行",  
  84.         "兴业银行",  
  85.         "上海浦东发展银行",  
  86.         "中国人民银行",  
  87.         "华夏银行",  
  88.         "深圳发展银行",  
  89.         "广东发展银行",  
  90.         "国家开发银行",  
  91.         "中国邮政储蓄银行",  
  92.         "中国进出口银行",  
  93.         "中国农业发展银行"  
  94.         ))  
  95.     bankaddr    &#61; city &#43; bankname  
  96.     bankno      &#61; random.randint(0000000000009999999999999)  
  97.   
  98.     createtime  &#61; random.randint(00000000009999999999)  
  99.   
  100.     amount      &#61; str(random.randint(50999999)) &#43; &#39;.00&#39;  
  101.     add_amount  &#61; &#39;0.00&#39;  
  102.   
  103.     question    &#61; &#39;question&#39;  
  104.     answer      &#61; &#39;answer&#39;  
  105.   
  106.     browser     &#61; random.choice(("Mozilla/4.0""Firefox 3.5""MSIE 7""MSIE 8""Chrome 3.0""Opera 7.1""Safer 5.0"))  
  107.   
  108.     country     &#61; &#39;中国(大陆)&#39;  
  109.   
  110.     username &#61; string.join(random.sample([&#39;a&#39;,&#39;b&#39;,&#39;c&#39;,&#39;d&#39;,&#39;e&#39;,&#39;f&#39;,&#39;g&#39;,&#39;h&#39;,&#39;i&#39;,&#39;j&#39;], 3)).replace(" ","")  
  111.   
  112.     return(sql % (chinese_name &#43; 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 &#61; """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 &#61; 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 &#61; string.join(random.sample([&#39;a&#39;&#39;b&#39;&#39;c&#39;&#39;d&#39;&#39;e&#39;&#39;f&#39;&#39;g&#39;&#39;h&#39;&#39;i&#39;&#39;j&#39;&#39;k&#39;&#39;l&#39;&#39;m&#39;&#39;n&#39;&#39;o&#39;&#39;p&#39;&#39;q&#39;&#39;r&#39;&#39;s&#39;&#39;t&#39;&#39;u&#39;&#39;v&#39;&#39;w&#39;&#39;x&#39;&#39;y&#39;&#39;z&#39;,  
  127. &#39;A&#39;&#39;B&#39;&#39;C&#39;&#39;D&#39;&#39;E&#39;&#39;F&#39;&#39;G&#39;&#39;H&#39;&#39;I&#39;&#39;J&#39;&#39;K&#39;&#39;L&#39;&#39;M&#39;&#39;N&#39;&#39;O&#39;&#39;P&#39;&#39;Q&#39;&#39;R&#39;&#39;S&#39;&#39;T&#39;&#39;U&#39;&#39;V&#39;&#39;W&#39;&#39;X&#39;&#39;Y&#39;&#39;Z&#39;  
  128. ], 6)).replace(" ","")  
  129.     sex &#61; random.choice(("male""female"))  
  130.     mobile_prefix &#61; random.choice(("131""133""134"&#39;135&#39;&#39;136&#39;&#39;137&#39;,&#39;138&#39;&#39;139&#39;&#39;186&#39;))  
  131.     mobile_suffer &#61; str(random.randint(0000000099999999))  
  132.     mobile      &#61; mobile_prefix &#43; str(mobile_suffer)  
  133.     qq          &#61; str(random.randint(0000000099999999))  
  134.     email       &#61; &#39; &#39;  
  135.     other_contact &#61; &#39; &#39;  
  136.     username    &#61; str(random.randint(0000000099999999))  
  137.     password    &#61; str(random.randint(0000000099999999))  
  138.     createtime  &#61; str(random.randint(000000000999999999))  
  139.     ad_from     &#61; &#39; &#39;  
  140.     ad_keyword  &#61; &#39; &#39;  
  141.     area        &#61; &#39;cn&#39;  
  142.     browser     &#61; random.choice(("Mozilla/4.0""Firefox 3.5""MSIE 7""MSIE 8""Chrome 3.0""Opera 7.1""Safer 5.0"))  
  143.     sms_status  &#61; random.choice((&#39;succeed&#39;,&#39;failed&#39;,&#39;mobilesucceed&#39;,&#39;emailsucceed&#39;,&#39;unsend&#39;))  
  144.   
  145.     values &#61; """(&#39;%s&#39;,&#39;%s&#39;,&#39;%s&#39;,&#39;%s&#39;,&#39;%s&#39;,&#39;%s&#39;,&#39;%s&#39;,&#39;%s&#39;,&#39;%s&#39;,&#39;%s&#39;,&#39;%s&#39;,&#39;%s&#39;,&#39;%s&#39;,&#39;%s&#39;,&#39;%s&#39;,&#39;%s&#39;,&#39;%s&#39;,&#39;%s&#39;,&#39;%s&#39;,&#39;%s&#39;,&#39;%s&#39;)""" % (name, sex, nationality, mobile,qq,email,username,password, createtime,browser)  
  146.     return(values);   
 

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



推荐阅读
author-avatar
U友50140862
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有