利用 php 連 MySQL 實作寫入測試資料進行壓力測試

壓力測試的軟體很多,有免費的 apache bench 也有要付費的,MySQL 則有 mysqlslap 壓力測試工具指令,但問題來了,如何驗證長期間資料不斷的寫入,系統的穩定性?在測試環境下常常很難找10個人或很很多人不斷的去新增資料創造流量來檢測,或許寫支 PHP 程式來讓資料可以不斷的慢慢寫入,然後再使用 apache bench 及 mysqlslap 同時來作壓力測試,或許才能有比較的檢測數據,於是自行寫了非常簡單的程式來做這件事情,簡單的欄位驗證、資料寫入、刪除、秒數延遲,來模擬現實中系統有可以在多人上線時同時寫入資料的效能問題,或許比起利用檢測工具一次批量的寫入資料,或者是短期間內產生大量資料,更有意義,因此自行寫了支程式,當然欄位、参數都可以隨意的去調整,這邊就不在多加贅述。

PHP 程式設計如下:
表單頁
submit.php
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript">
        function check()
        {
                if(reg.num.value == "")
                {
                        alert("未輸入資料筆數");
                }
                else if(reg.second.value == "")
                {
                        alert("未輸入延遲秒數,至少輸入0秒");
                }
                else reg.submit();
         }
</script>
</head>
<body></br></br>
<div style="text-align:center;">MySQL資料庫壓力測試</br>新增測試資料,每次新增延遲一秒直到新增完資料為止。
    <form name="reg" action="insert2.php" method="post"></br></br>
    新增筆數: <input type="text" name="num"></br></br>
    延遲秒數: <input type="text" name="second"></br></br>
    <input type="button" value="新增" onClick="check()"/>
    </form>
    <form action="delete.php" method="post"></br></br>
    <input type="submit"  value="刪除全部資料"/>
    </form>
    </br></br>
<?php  
$con = mysql_connect('localhost','root', 'password');
    if (!$con)
      {
      die('Could not connect: ' . mysql_error());
      }
mysql_select_db("my_db", $con);
$result = mysql_query("SELECT * FROM Persons");
$row = mysql_num_rows($result);
echo "目前總共有".$row."筆資料";
mysql_close($con);
?>  
</div>
</body>
</html>

新增資料頁
insert2.php
<?php
$k=$_POST["num"];
$j=$_POST["second"];
header('Content-Type: text/html; charset=utf8');
$link = mysql_connect('localhost','root', 'password');
mysql_select_db('my_db');
    for($i=0;$i<$k;$i++){
        $sql="INSERT INTO Persons (FirstName, LastName, Age) VALUES ('Peter', 'Griffin', '35')";
        sleep($j);
        $result = mysql_query( $sql);
    }
mysql_close($link);  
header( "location:submit.php");

刪除資料頁
delete.php
<?php
$con = mysql_connect('localhost','root', 'password');
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("my_db", $con);

mysql_query("DELETE FROM Persons WHERE LastName='Griffin'");

mysql_close($con);
header( "location:submit.php");


MySQL
CREATE TABLE IF NOT EXISTS `persons` (
  `FirstName` text NOT NULL,
  `LastName` text NOT NULL,
  `Age` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


當然你也可以自行定義資料庫名稱、欄位名稱、資料型態等等,至於系統環境就不再多加贅述,提供參考。

留言

這個網誌中的熱門文章

c語言-關於#define用法

CMD常用網管指令

使用windows CMD 時間自動校正