我想用围城测试我的网站有1百万个不同的urls请求,我需要知道我可以创建一个bash脚本来做一个随机循环或php脚本来从数据库中读取urls并创建动态urls,并将这个urls给围城命令来执行台测试?
例如,我有这样一种banner_sizes:
[
{
"id": 1,
"size": "normal_x970h90",
},
{
"id": 2,
"size": "normal_x234h60",
},
{
"id": 3,
"size": "normal_x468h60",
},
{
"id": 4,
"size": "normal_x300h600",
},
{
"id": 5,
"size": "normal_x120h600",
},
{
"id": 6,
"size": "normal_x160h600",
},
{
"id": 7,
"size": "normal_x120h240",
},
{
"id": 8,
"size": "normal_x300h250",
},
{
"id": 9,
"size": "normal_x250h250",
},
{
"id": 10,
"size": "normal_x600h300",
},
{
"id": 11,
"size": "normal_x728h90",
},
{
"id": 12,
"size": "normal_x300h100",
},
{
"id": 13,
"size": "normal_x125h125",
}
]我还有这些id:
[
0 => array:1 [
"_id" => MongoDB\BSON\ObjectID {#915}
]
1 => array:1 [
"_id" => MongoDB\BSON\ObjectID {#926}
]
2 => array:1 [
"_id" => MongoDB\BSON\ObjectID {#924}
]
3 => array:1 [
"_id" => MongoDB\BSON\ObjectID {#913}
]
4 => array:1 [
"_id" => MongoDB\BSON\ObjectID {#929}
]
5 => array:1 [
"_id" => MongoDB\BSON\ObjectID {#862}
]
6 => array:1 [
"_id" => MongoDB\BSON\ObjectID {#863}
]
7 => array:1 [
"_id" => MongoDB\BSON\ObjectID {#864}
]
8 => array:1 [
"_id" => MongoDB\BSON\ObjectID {#865}
]
9 => array:1 [
"_id" => MongoDB\BSON\ObjectID {#928}
]
10 => array:1 [
"_id" => MongoDB\BSON\ObjectID {#927}
]
11 => array:1 [
"_id" => MongoDB\BSON\ObjectID {#917}
]
12 => array:1 [
"_id" => MongoDB\BSON\ObjectID {#918}
]
13 => array:1 [
"_id" => MongoDB\BSON\ObjectID {#899}
]
14 => array:1 [
"_id" => MongoDB\BSON\ObjectID {#898}
]
]我需要使用上面的信息创建这些类型的url:
www.example.come/api/is/normal_x234h60/899
www.example.com/api/is/normal_x600h300/898更像这样。
有没有办法创建此urls并将其放入txt文件中,然后运行我的围城命令:
siege -c10000 -b -t30m -f urls.txt或者使用apache ab工作台测试?
发布于 2017-07-06 14:16:56
我已经找到了解决这个问题的办法,我创建了一个php文件,它连接到mysql和mongodb数据库并读取数据,然后在一个嵌套的for循环中,我创建了我需要的urls,并将它们存储在txt文件中。然后我只需要运行围攻命令:
siege -c10000 -b -t30m -f urls.txt但由于大请求的围攻问题,我创建了一个bash脚本,它将读取urls.txt文件的每一行,并使用每个url运行apache ab测试,以对我的应用程序的动态url进行压力测试。
创建urls的php代码:
$seats = Seat::where('status', 'ACTIVE')->get();
$s_count = Seat::where('status', 'ACTIVE')->count();
$bs = Banners::where('status', 'enable')->get();
$bs_count = Banners::where('status', 'enable')->count();
$url = Config('conf.APP_PATH') . "/api/is/";
$url_array = array();
for ($i = 0; $i < $s_count; $i++) {
for ($j = 0; $j < $bs_count; $j++) {
$url_array[] = $url . $bs[$j]['size'] . "/" . $seats[$i]['_id']."\n";
}
}
File::put('./url.txt',$url_array);运行多个工作台测试的bash脚本:
while read LINE; do
cmnd="./ab -n10000 -c100 "
cmnd=${cmnd}"$LINE"
eval $cmnd
cmnd=''
done < urls.txthttps://stackoverflow.com/questions/44916899
复制相似问题