Йоли-хоу всем кто меня читает..
Итак, хочу поделиться со всеми своим маленьким опытом работы с Тест Комплитом, а вернее тем как я нашел способ получать код ошибки при тестировании Web проэкта.
Сразу хочу оговорить что я не супер-пупер-мега автоматизатор, но все же шишки набил )) и если вы тоже молоды и юзаете данную прогу вам эта статейка будет полезна.
Итак меня назначили на проэкт и я сразу, ответственно стал педалить тонны кода автотестов, стараясь покрыть ими (тестами) как можно больше функционала. Что бы было покрытие даже больше чем когда вы наступили на ногу матерому, старому боцману, и он тоже начал вас покрывать ))... Правда не тестами...
Со временем тестов становилось больше, они начали падать, их начинали фиксить пока в один прекрасный миг я не осознал, что я не знаю почему тесты упали, была ли страница доступна, или может меня вообще послали на 3 веселых... Я не про буквы, а про цифры и это - 500.
Первым решением бало парсить страницу на текст: 404 или 500, используя или метод Find() или NativeWebObject. Самое смешное что это работало, но функцию проверки надо было вставлять чуть ли не после каждого нажатия на линку. Я уверен кто-то сейчас засмеялся, потыкал пальчиком в монитор и сказал: - "Во дыбил", для таких повторюсь: я не супер-пупер-мега автоматизатор.
Наверное пора о главном.
Была найдена маленькая фича под названием MSXML2.XMLHTTP которая делает запрос, а потом сама понимает какой ответ ей пришел, сразу хочу оговориться что работает это только в IE, хотя я уверен что многие его использую как паттерн для тестирования Web приложений. Вот эта фунция с коментариями на языке Jscript:
function checkPageForError()
{
//определяем переменные для работы с броузером
var ie, page;
ie = Sys.Process("iexplore");
page = ie.Page("*");
//обьявляем переменную которая и будет кидать запросы и делаем ее новым ActiveX обьектом
var HTTPrequest = new ActiveXObject("MSXML2.XMLHTTP");
//формируем запрос на текущую страницу
HTTPrequest.open("GET", page.URL, false);
//посылаем его
HTTPrequest.Send();
//и сравниваем (надеюсь тут все очивидно)
if(HTTPrequest.Status == 404 || HTTPrequest.Status == 500)
{
Log.Error(page.URL + " -page status: " + HTTPrequest.Status);
}
}
Но эту функцию тоже "не кошерно" втыкать в каждый модуль тестов. И тут нам на помощь приходят - Events, а именно Web Testing Events с событием OnWebPageDownloaded во всей красе.
Надо просто втавить имя выше написаной процедуры в этот обработчик и вуаля, как только страница загрузиться и если (не дай Боже, конечно) она поломана, мы в логе получим извещение...
Дам еще код фунции которая проверяет страницу по пути к ней:
function checkPageForErrorAtAddress(addressLink, linkName)
{
var ie, page;
ie = Sys.Process("iexplore");
page = ie.Page("*");
var HTTPrequest= new ActiveXObject("MSXML2.XMLHTTP");
HTTPrequest.open("GET", addressLink, false);
HTTPrequest.Send();
if(HTTPrequest.Status == 404 || HTTPrequest.Status == 500)
{
Log.Error(linkName + " -page status: " + HTTPrequest.Status);
}
else
{
Log.Message(linkName + " -page status: " + HTTPrequest.Status);
}
}
На этом, всем спасибо, все свободны... Жду коментов...
P.S. Простите за грамматику ))
круто
ОтветитьУдалитьМинус конечно что работает только в ИЕ. А не пробовали использовать для тестов Selenium + FireFox например? Кстати драйвера для Selenium есть и под другие браузеры. + Для улучшения функционала блога посмотрите вот эту статейку - http://mlawire.blogspot.com/2009/07/blogger-syntax-highlighting.html
ОтветитьУдалитьМогу сказать что это работает и в других браузерах, так как ТС, сцука, умный
Удалить