0

我想使用 siege 对具有不同 url 的 1M 请求进行基准测试,我需要知道我是否可以创建一个 bash 脚本来执行随机循环或 php 脚本来从数据库中读取 url 并创建动态 url 并将此 urls 提供给 siege 命令进行台架测试?

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

我需要使用上述信息创建这些类型的 url:

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 ?

4

1 回答 1

1

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

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

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

用于创建 url 的 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
于 2017-07-06T06:16:56.260 回答