热门标签 | 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需要根据你的实际情况定制



推荐阅读
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍了如何在BackTrack 5中配置和启动SSH服务,确保其正常运行,并通过Windows系统成功连接。涵盖了必要的密钥生成步骤及常见问题解决方法。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 本文详细介绍了VMware的多种认证选项,帮助你根据职业需求和个人技能选择最合适的认证路径,涵盖从基础到高级的不同层次认证。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 在Ubuntu 16.04 LTS上配置Qt Creator开发环境
    本文详细介绍了如何在Ubuntu 16.04 LTS系统中安装和配置Qt Creator,涵盖了从下载到安装的全过程,并提供了常见问题的解决方案。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 本文探讨了MariaDB在当前数据库市场中的地位和挑战,分析其可能面临的困境,并提出了对未来发展的几点看法。 ... [详细]
  • 本文详细介绍了Linux系统中init进程的作用及其启动过程,解释了运行级别的概念,并提供了调整服务启动顺序的具体步骤和实例。通过了解这些内容,用户可以更好地管理系统的启动流程和服务配置。 ... [详细]
  • 解决网站乱码问题的综合指南
    本文总结了导致网站乱码的常见原因,并提供了详细的解决方案,包括文件编码、HTML元标签设置、服务器响应头配置、数据库字符集调整以及PHP与MySQL交互时的编码处理。 ... [详细]
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社区 版权所有