Вопрос по использованию WebTestCase SimpleTest'a (на сервер не отсылаются cookies)

Galex

Новичок
Вопрос по использованию WebTestCase SimpleTest'a (на сервер не отсылаются cookies)

В скрипте эмулируются действия пользователя.
(Типа) пользователь (в лице SimpleTest'a) заходит на главную страницу сайта, затем кликает по ссылке "Мультимедиа", затем по ссылке "Наушники", выбирает наушники, затем жмёт "В корзину".
На этой странице проверяется наличие выбранного товара.
...
PHP:
$this->assertTrue ($this->clickLink ("Мультимедиа"), "Unable to click link 'Мультимедиа'");
$this->assertTrue ($this->clickLink ("_Наушники"), "Unable to click link '_Наушники'");
$this->assertTrue ($this->clickLink ("Наушники Philips SBC-HC8520"), "Unable to click link 'Наушники Philips SBC-HC8520'");
$this->assertTrue ($this->clickLink ("в корзину",0), "Unable to click link 'в корзину'");
$this->assertPattern("/Philips/i", "Philips not found");
...
Затем я смотрю содержание страницы с помощью
PHP:
$this->showSource();
Оказывается, что корзина пустая.
PHP:
$this->assertPattern("/Philips/i", "Philips not found");
естественно, ничего не находит и выдаёт ошибку.
По всей видимости, SimpleTest не отсылает серверу выставленные сервером cookies (в cookies, как удалось установить опытным путём, хранится номере сессии).
А теперь вопрос!
Как сделать так, чтобы SimpleTest нормально эмулировал действия пользователя?
Специалисты по SimpleTest, откликнитесь!
 

syfisher

TDD infected!!
Galex По крайней мере когда мы использовали его - проблем не было. Не мог бы проверить этот функционал на другой странице, чтобы убедиться, что проблема именно в SimpleTest, а не в странице?.

Посмотри http://www.lastcraft.com/browser_documentation.php , а частности getCookieValue($host, $path, $name)

Больше ничего сказать про правильность работы WebTestCase не могу, такие моменты лучше спрашивать в листе рассылки на сам SimpleTest.

OT: Для себя лично я предпочел Selenium, так как он позволяет тестировать функционал прямо в браузере, что гарантирует почти 100% адекватность. Selenium развивается очень быстро, его ведет Thoughtworks - очень сильная компания. Единственная проблема - это фикстуры. Я как-то слышал на форуме SitePoint.com, что для Selenium сделали php-driven-mode, то есть режим, когда php-скрипт отсылает браузеру команды одну за одной, в этом случае все проблемы с фикстурами были бы решены. Но сам еще не разбирался.
 

Galex

Новичок
Посмотри http://www.lastcraft.com/browser_documentation.php , а частности getCookieValue($host, $path, $name)
Посмотрел. И всё-таки непонятно, где SimpleTest хранит cookies своего внутреннего браузера и как заставить его отправить их серверу. Функции sendCookies() ведь нигде нету.
 

pachanga

Новичок
Автор оригинала: Galex
Посмотрел. И всё-таки непонятно, где SimpleTest хранит cookies своего внутреннего браузера и как заставить его отправить их серверу. Функции sendCookies() ведь нигде нету.
За формирование cookies в запросе к серверу отвечает класс SimpleUserAgent Это происходит в SimpleUserAgent :: _createRequest(). Так что "копай" примерно там.

На самом деле, SimpleUserAgent - верхушка айсберга, т.к в этом процессе вовлечены много дополнительных классов(такие как SimpleCookie, SimpleCookieJar, SimpleHttpRequest), поэтому найти sendCookies может показаться сложным на первый взгляд.

Кстати, я бы не списывал пока со счетов web тестер от SimpleTest, т.к. Selenium далеко не идеален:

1) довольно часто просто вылетает браузер под windows(особенно FireFox, причем, в новом FireFox 1.5 "глючит" чаще)
2) проблемы запуска в batch режиме во время развертывания проекта на удаленном сервере(я вообще не знаю, такое возможно ли)
3) трудности гибкой организации тестируемого кода(без изменений из вне). Все тесты представляют из себя набор html сценариев, написание которых может показаться удовольствием для непрограммистов, однако это нельзя даже близко сравнить с объектно-ориентированными тестами.
 

syfisher

TDD infected!!
pachanga Согласен конечно, но JavaScript-ов на страничках с каждым днем все больше и больше... Проблемы из 1) решены в SVN (многие), 3) решается driven-режимом, жаль что под php никто этим пока серьезно не занимается. Насчет 2) - не знаю, скорее всего нет.

ОТ. Интересно, для php будет ли что-нибудь ал-я Fitnesse?
 

Galex

Новичок
Автор оригинала: svetasmirnova
А вообще он автоматом это делает. С сессиями, во всяком случае
Суть вопроса в том и заключается. Я тоже по наивности думал, что он делает это автоматически, но жизнь доказала обратное. :)
Я же потому, собственно, и написал, что оказалось, что не делает.
 

pachanga

Новичок
Автор оригинала: syfisher
pachanga Проблемы из 2) решены в SVN (многие),
Многие, но не все. Я подозреваю, что это даже проблема не Selenium, а FireFox под windows, т.к. народ говорит, что под *nix все работает замечательно. По сути, проблема клиентского софта все еще остается крайне актуальной - к примеру, после перехода на FF 1.5 многие ассерты на сравнение строк просто слетели(я не говорю уж про фатальные вылеты браузера).

3) решается driven-режимом
Что такое driven режим? Можно ли его использовать на удаленном сервере? Для этого требуется компонент от браузера?(я просто себе не представляю работу иначе)
 

Galex

Новичок
Всем большое спасибо за участие в обсуждении!
Проблема была решена добавлением в текст скрипта следующей строчки:
PHP:
$this->getBrowser()->addHeader("User-agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0; .NET CLR 1.0.3705)");
То есть "надо представляться броузером до конца".
А куки и всякие прочие сессии тут не причём, их СимлпТест обрабатывает автоматически (если, конечно, представить серверу СимплТест как реальный броузер).
Всем спасибо!
 

syfisher

TDD infected!!
Автор оригинала: pachanga
Что такое driven режим? Можно ли его использовать на удаленном сервере? Для этого требуется компонент от браузера?(я просто себе не представляю работу иначе)
Это использование традиционного языка, например, Java или PHP для отправки команд браузеру. Я серьезно не разбирался. Кое-что есть тут: http://openqa.org/selenium/driven.html

Тесты получают вид схожий с тем, что создается для SimpleTest WebTest-ера.
 
Сверху