通过使用使用bash脚本生成的动态URL使用围攻进行基准测试

时间:2017-07-05 04:13:48

标签: php bash terminal apachebench siege

我想使用siege使用不同的网址对1M网站的1M请求进行测试,我需要知道我可以创建一个bash脚本来执行随机循环或php脚本来从数据库中读取网址并创建动态网址并提供此网址围攻命令进行台架测试?

例如我有这种类型的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",
    }
]

我也有这些内容:

 [
  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}
  ]
]

我需要使用以上信息创建这些类型的网址:

www.example.come/api/is/normal_x234h60/899
www.example.com/api/is/normal_x600h300/898

更像这样。

有没有办法创建这个url并将它们放在txt文件中然后运行我的siege命令:

   siege -c10000 -b -t30m -f urls.txt

或者使用apache ab bench test?

1 个答案:

答案 0 :(得分:1)

我已经找到了解决这个问题的方法,我创建了一个php文件,它连接到mysql和mongodb数据库并读取数据,然后在嵌套的for循环中我创建了我需要的url和将它们存储在txt文件中。 然后我只需要运行siege命令:

siege -c10000 -b -t30m -f urls.txt

但由于大尺寸请求的围攻问题,我创建了一个bash脚本,它将读取urls.txt文件的每一行,并使用每个url运行apache ab测试,以使用动态网址对我的应用程序进行压力测试。

用于创建网址的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.txt