通过使用 bash 脚本生成的动态 url 使用 siege 进行基准测试

Bench test using siege by using dynamic url generated using bash script

我想使用 siege 对我的网站进行 100 万个不同 url 请求的基准测试,我需要知道我可以创建一个 bash 脚本来执行随机循环还是 php 脚本从数据库中读取 urls 并创建动态 urls 并将此 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",
    }
]

而且我还有这些 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 基准测试?

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

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

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

php 创建 url 的代码:

        $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