Проблема при выполнении модульного тестирования производительности кода

Я тестировал свой код, чтобы проверить, как он будет себя вести, если мы подумаем, что 100 пользователей представили свою регистрацию сразу!

Мой код находится в PHP Laravel 5.2 и JQuery Ajax ниже.

for (i = 0; i < 100; i++) {
    var 
     data={'Role' : "Role"+i},
     request = $.ajax({
        url:                'http://localhost:1234/Practise/public/api/SaveRoleApi',
        type:               "POST",
        data:               JSON.stringify(data),
        contentType:        "application/json; charset=utf-8",
        async:  true,
        success: function(d){ console.log(d); }
     });
}

Из 100, мне не удается отправить более 88 записей.

Я использую базу данных MySQL.

, если мой выше код будет добавлять записи последовательно... id есть способ проверить 1000 одновременных запросов с одного компьютера?

Ответ 1

Попытка нескольких запросов из одного браузера с использованием JavaScript для создания всех соединений не является хорошей идеей, вы действительно не тестируете concurrency очень хорошо.

Рассмотрите возможность использования реального инструмента тестирования нагрузки, такого как JMeter (я определенно рекомендую это) или, по крайней мере, параллельных запросов на завивки в пакете script.

for n in {1..1000}; do
    for i in `eval echo {$n..$((n+999))}`; do
            echo "club $i..."
            curl -X POST -H "Content-Type: application/json" -d '{"param1":"xyz","param2":"xyz"}' -s "http://localhost:1234/Practise/public/api/SaveRoleApi" >> log.txt
    done &
    wait
done

Ответ 2

Я бы предложил использовать специальный инструмент для этой цели, например loader. Имейте в виду, что ваше веб-приложение должно быть доступно из внешнего мира.

Ответ 3

Возможно, вы захотите изучить возможности использования PHP curl multi. http://php.net/manual/en/function.curl-multi-init.php

$mh = curl_multi_init();
$ch = [];
for ($i = 1; $i < 100; $i++) {
    $data = "Role=Role$i";
    $ch[$i] = curl_init();
    curl_setopt($ch[$i], CURLOPT_URL, 'http://localhost:1234/Practise/public/api/SaveRoleApi');
    curl_setopt($ch[$i], CURLOPT_POST, 1); // Number of post fields, in this case just one.
    curl_steopt($ch[$i], CURLOPT_POSTFIELDS, $data);
    curl_multi_add_handle($mh, $ch[$i]);
}
$active = null;
do {
    $mrc = curl_multi_exec($mh, $active);
} while ($mrc = CURLM_CALL_MULTI_PERFORM);
while ($active and $mrc == CURLM_OK) {
    if(curl_multi_select($mh) !== -1) {
        do {
            $mrc = curl_multi_exec($mh, $active);
        } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    }
}
for($i = 0; $i < 100; $i++){
    curl_multi_remove_handle($mh, $ch[$i]);
}
curl_multi_close($mh);