понедельник, 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.

понедельник, 2 апреля 2012 г.

Get current host (JS)

You can use it everywhere :)
(function(l){return l.protocol+"//"+l.host.split(".")[l.host.split(".").length-2]+"."+l.host.split(".")[l.host.split(".").length-1]+((l.port === "")?"":":"+l.port)+"/";})(window.location);

среда, 16 марта 2011 г.

Обновление ядра до версии 2.6.37

Решил я тут поиграться во что-нибудь...
И скачал я игру "Коммандующий Сталин!"
http://commanderstalin.sourceforge.net/cstalin_rus_index.html
Запустил и совсем забыл, что у меня стоит старая карточка ATI Radeon X1400

$ lspci -nn | grep VGA
01:00.0 VGA compatible controller [0300]: ATI Technologies Inc Radeon Mobility X1400 [1002:7145]

И как только мы пытаемся запустить миссию, как бац - ошибка.

drm:radeon_cs_ioctl] *ERROR* Failed to parse relocation -12drm:radeon_cs_ioctl] *ERROR* Failed to parse relocation -12


вторник, 15 марта 2011 г.

Reflection in python

Задача: проверить наличие произвольного класса в цепочке родительских классов базового класса.
Смотрим решение: