пятница, 11 ноября 2011 г.

Как получить код страницы средствами TestComplete

Йоли-хоу всем кто меня читает..

Итак, хочу поделиться со всеми своим маленьким опытом работы с Тест Комплитом, а вернее тем как я нашел способ получать код ошибки при тестировании 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. Простите за грамматику ))

3 комментария:

  1. Минус конечно что работает только в ИЕ. А не пробовали использовать для тестов Selenium + FireFox например? Кстати драйвера для Selenium есть и под другие браузеры. + Для улучшения функционала блога посмотрите вот эту статейку - http://mlawire.blogspot.com/2009/07/blogger-syntax-highlighting.html

    ОтветитьУдалить
    Ответы
    1. Могу сказать что это работает и в других браузерах, так как ТС, сцука, умный

      Удалить