利用 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;
當然你也可以自行定義資料庫名稱、欄位名稱、資料型態等等,至於系統環境就不再多加贅述,提供參考。
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;
當然你也可以自行定義資料庫名稱、欄位名稱、資料型態等等,至於系統環境就不再多加贅述,提供參考。
留言
張貼留言