skymvc网站测试之mysql数据生成

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了skymvc网站测试之mysql数据生成相关的知识,希望对你有一定的参考价值。

skymvc网站测试之mysql数据生成

使用方法:

删除数据 /index.php?m=test_mysql&a=autoDelete

重置自增ID /index.php?m=test_mysql&a=reset

插入数据: /index.php?m=test_mysql&a=autoInsert

<?php
/******
*Author 雷日锦
*本代码在skymvc中使用
*skymvc mysql数据库测试
*******/
class test_mysqlControl extends skymvc{
    public $maxrow=30;//每次最多生成多少千行
    public $maxThreads=10;
    public function __construct(){
        parent::__construct();
    }
    
    public function onDefault(){
         
    }
    
    public function onReset(){
        if(!empty($_SESSION)){
             foreach($_SESSION as $k=>$v){
                 unset($_SESSION[$k]);
             }
         }
        $this->onIncrement();
    }
    
    public function getNum($table){
        //设置表所需要的记录数
        $cf=array(
            "article"=>300000,
            "test"=>200000,
            "test2"=>200000,
        );
        if(!isset($cf[$table])){
            return 200000;
        }else{
            return $cf[$table];
        }
    }
    
    public function onAutoDelete(){
        set_time_limit(0);
        ob_implicit_flush(true);
        $res=M("article")->query("show tables");
        $data=M("article")->fetch_array(PDO::FETCH_NUM);
        $this->loadClass("spider");
        if($data){
            $uk=0;
            foreach($data as $k=>$t){
                $tables[]=$t[0];
                
                $urls[$uk][]="http://".$_SERVER[‘HTTP_HOST‘]."/index.php?m=test_mysql&a=delete&table=".str_replace(TABLE_PRE,"",$t[0]);
                
                if($k%$this->maxThreads==($this->maxThreads-1)){
                    $uk++;
                }
                
            }
            echo "删除开始<br>";
            echo<div id="aid">0</div>
<script>
    var i=0;
    var it=setInterval(function(){
        i++;
        document.querySelector("#aid").innerhtml="已经执行"+i+"秒了";
    },1000);
</script>;
                foreach($urls as $k=>$us){
                    echo "第".$k."部分<br>";
                    flush();
                        @ob_flush();
                    $this->spider->start($us,function($data){
                    
                        echo $data[‘url‘]." <br>".$data[‘content‘]."<br>";
                        flush();
                        @ob_flush();
                    },600);
                }
        }
        echo "本次删结束<br>";
            flush();
            @ob_flush();
             
        echo "<script>
    setTimeout(function(){
        window.location.reload();
    },1000);
</script>";
    }
    
    public function onDelete(){
        $table=get(‘table‘,‘h‘);
        M($table)->query("delete from ".table($table)." where 1=1 limit 50000");
        echo "delete $table success";
    }
    /*更新自增id*/
    public function onIncrement(){
        $res=M("article")->query("show tables");
        $data=M("article")->fetch_array(PDO::FETCH_NUM);
        if($data){
            foreach($data as $k=>$t){
                $table=str_replace(TABLE_PRE,"",$t[0]);
                M($table)->query("ALTER TABLE `sky_".$table."` AUTO_INCREMENT=1;");
            }
        }
        echo "update increment";
    }
    
    public function onAutoInsert(){
        set_time_limit(0);
        ob_implicit_flush(true);
        $res=M("article")->query("show tables");
        $data=M("article")->fetch_array(PDO::FETCH_NUM);
        $tables=array();
        if($data){
            $uk=0;
            foreach($data as $k=>$t){
                $tables[]=$t[0];
                
                $urls[$uk][]="http://".$_SERVER[‘HTTP_HOST‘]."/index.php?m=test_mysql&a=insert&table=".str_replace(TABLE_PRE,"",$t[0]);
                if($k%$this->maxThreads==($this->maxThreads-1)){
                    $uk++;
                }
            }
            $this->loadClass("spider");
            echo "开始<br>";
            echo<div id="aid">0</div>
<script>
    var i=0;
    var it=setInterval(function(){
        i++;
        document.querySelector("#aid").innerHTML="已经执行"+i+"秒了";
    },1000);
</script>;
             
            foreach($urls as $k=>$us){
                echo "第".$k."部分<br>";
                flush();
            @ob_flush();
                $this->spider->start($us,function($data){
                    
                    echo $data[‘url‘]." <br>".$data[‘content‘]."<br>";
                    flush();
                    @ob_flush();
                },600);
            }
            echo "结束<br>";
            flush();
            @ob_flush();
        }
          
        echo "<script>
    setTimeout(function(){
        window.location.reload();
    },1000);
</script>";
    }
    public function onInsert($table=‘‘){
        $inauto=true;
        if(!$table){  
            set_time_limit(0);
            $inauto=false;
        }
        
        $table=$table?$table:get(‘table‘,‘h‘);
        if(!$table){
            $table="article";
        }
        
        $fields=$this->getFIelds($table);
        
        //为什么只执行到266 百思不得其解
        $jnum=$this->getNum($table);
         for($j=0;$j<$this->maxrow;$j++){
            $rscount=M($table)->selectOne(array(
                "fields"=>" count(1)"
            ));
            if($rscount>$jnum){
                echo $table."测试数据已经够了<br>";
                 break;
            }
             
            if(!inauto){
                echo "正在插入第".$j."千条<br>";
                flush();
                @ob_flush();
                ob_clean();
            }
            $data=array();
            
             
            for($i=0;$i<1000;$i++){
                $data[]=$this->dbPost($table);
            }
             
            $sql=" insert into ".table($table)."(".implode(",",$fields).") values ";
            foreach($data as $k=>$v){
                if($k>0){
                    $sql.=",";
                }
                $sql.="("._implode($v).")";
            }
            $sql.=";";
            
            M($table)->query($sql);
            unset($data);
            unset($sql);
        }
        
        echo "success"; 
    }
    public function getFIelds($table){
        $fields=M($table)->getFields();
        foreach($fields as $k=>$v){
            if($k==0) continue;
            $data[]=$v[‘Field‘];
        }
        return $data;
    }
    public function dbPost($table,$msg=‘‘){
        if(isset($_SESSION["field_".$table])){
            $fields=$_SESSION["field_".$table];
        }else{
            $fields=M($table)->getFields();
            $_SESSION["field_".$table]=$fields;
        }
        
        $msg=$msg?$msg:"skymvc是".date("Ymdhis")."最贴心的".date("Ymdhis")."php开发框架,快来使用吧!";
        $data=array();
        $gid=$this->getId($table);
        foreach($fields as $k=>$v){
            if($k==0) continue;
            if(preg_match("/tinyint/i",$v[‘Type‘])){
                $data[$v[‘Field‘]]=rand(0,3);
            }elseif(preg_match("/int/i",$v[‘Type‘])){
                if($v[‘Field‘]==‘dateline‘){
                    $data[$v[‘Field‘]]=time();
                }else{
                    $data[$v[‘Field‘]]=$gid;
                }
            }elseif(preg_match("/decimal/i",$v[‘Type‘])){
                $data[$v[‘Field‘]]=rand(1,100000);
            }elseif(preg_match("/datetime/i",$v[‘Type‘]) ){
                $data[$v[‘Field‘]]=date("Y-m-d H:i:s");
            }elseif($v[‘Field‘]==‘bstatus‘){
                $data[$v[‘Field‘]]=1;
            }else{
                $data[$v[‘Field‘]]=$msg;
            }
            
        }
        return $data;
    }
    
    public function getId($table){
        if(!isset($_SESSION["autoid_$table"])){
            $_SESSION["autoid_$table"]=1;
        }else{
            $_SESSION["autoid_$table"]++;
        }
        return $_SESSION["autoid_$table"];
     
    }
    
    
    
}

?>

 

以上是关于skymvc网站测试之mysql数据生成的主要内容,如果未能解决你的问题,请参考以下文章

测试数据之自动生成

MySQL数据库基准压力测试工具之MySQLSlap使用实例

MySQL的备份与还原,非常规备份,全量备份,增量备份

vscode之快速生成vue模板

Jmeter组件之-Test Fragment(测试片段)

JMeter学习-042-JMeter BeanShell 脚本应用实例之正则应用:正则提取,批量获取测试数据