понедельник, 15 апреля 2013 г.

суббота, 19 января 2013 г.

QA. Performance testing in javascript.

Иногда всает необходимость посмотреть, как реагирует хост на множественные запросы, как работает pagination, как индексирует база данных ну и так далее.

То есть необходимо заполнить базу какими нибудь фейковыми значениями. Конечно же можно использовать Selenium, но можно немножко погенерировать данные с помощью JS.

Вариант 1.


setInterval(function(){
    var n="";for(i=0;i<150;i++){n+= Math.random().toString(36).substr(2);} 
    var data={'client_name':n,'client_phone':n,'client_address':n,'client_email':n};
    var jqxhr=jQuery.get("/crm/sql/sql_insert_new_client.php",data);console.log(n);
},500);

Этот вариант плох тем, что начинает DOS на сервер. То есть просто посылается ряд запросов, независимо, успешно вставились данные или нет.

Немножко подправим, добавим callback. И вместо setInterval сделаем все это дело рекурсивным.

Вариант 2.

(function AddCustomer($) {
    var n="";for(i=0;i<150;i++){n+= Math.random().toString(36).substr(2);} 
    var data={'client_name':n,'client_phone':n,'client_address':n,'client_email':n};
    var jqxhr=$.get("/crm/sql/sql_insert_new_client.php",data,function(){console.log("[success] Send: "+n);})
        .success(function(){console.log("[success] Done.");})
        .error(function(){console.log("[error] Try Again.");AddCustomer($);})
        .complete(function(){console.log("[complete] Send Again.");AddCustomer($);});
})(jQuery);

Ну вот. Теперь можно залогинтиься, открыть файрбаг , запустить скрипт, и спойно отправиться спать. На утро миллион тестовых записей и можно строить performance reports.

Вместо "sql_insert_new_client.php" должен быть URL регистрации, поста сообщения, и вообще всего чего угодно. GET легко менятся на POST, а набор data специфичен для каждого случая.

Данный пример ни в коем случае не является руководством к DOS, и рукомендуется использовать это без TOR и только для performance testing.