#testing #selenium #phpunit
#тестирование #selenium #phpunit
Вопрос:
Мне нужно протестировать веб-приложение с использованием Selenium. Приложение довольно распространено в своей настройке: для раскрытия большей части функциональности требуется вход в систему. При загрузке страницы, если пользователь не аутентифицирован, он перенаправляется на форму входа, а затем обратно на запрошенную страницу, как только будут предоставлены учетные данные.
Каков обычный способ обойти это с помощью Selenium? Я так понимаю, что люди не входят в систему при каждом отдельном тестировании, поскольку это привело бы к значительным накладным расходам на большие наборы тестов. Есть ли способ настроить сеанс в тесте, а затем использовать информацию cookie для последующих тестов или выполнить условный вход (без массового повторения кода!)?
Я использую PHPUnit с Selenium ATM.
Спасибо!
Gonzalo
Ответ №1:
(Я использую C # NUnit Selenium RC)
Большую часть времени каждый тест проходит через форму входа. Однако, если я пишу серию тестов, которые очень короткие (< 10 секунд каждый) и их много, я обычно использую один и тот же экземпляр браузера для всех тестов, перемещая вызовы selenium start close из методов SetUp TearDown в методы Test Fixture SetUp TearDown. Это позволяет избежать затрат на повторную аутентификацию, а также затрат на каждый раз запуск нового браузера. Я уверен, что вы можете сделать что-то подобное с PHPUnit.
Комментарии:
1. Как вы думаете, это более простой способ создать профиль для ваших тестов, а затем выполнить аутентификацию вручную в этом профиле перед запуском тестов? Так что, когда ваши тесты запускаются и вызывают этот профиль, вы уже вошли в систему?
2. @AJ77 Я действительно не знаю, я использую Selenium почти исключительно для автоматизации IE, и, насколько я знаю, IE не поддерживает функцию «профиль», как вы предлагаете. Большинство веб-сайтов используют какой-либо файл cookie для хранения сеанса ASP.NET Сеансовые cookie-файлы (я тестирую приложение веб-форм) истекают довольно быстро, поэтому, даже если бы мы могли хранить cookie-файлы в разных экземплярах браузера, срок их действия истек бы слишком быстро, чтобы быть действительно полезными.
Ответ №2:
Если это обычная http-аутентификация, вы можете использовать имя пользователя / пароль с запросом URL, как описано в Selenium FAQ: http://wiki.openqa.org/display/SEL/Selenium Core FAQ#SeleniumCoreFAQ-HowdoIuseSeleniumtologintositesthatrequireHTTPbasicauthentication(wherethebrowsermakesamodaldialogaskingforcredentials)?
Как мне использовать Selenium для входа на сайты, требующие базовой аутентификации HTTP (где браузер создает модальное диалоговое окно с запросом учетных данных)?
Используйте имя пользователя и пароль в URL, как описано в RFC 1738: тестовый тип openhttp://myusername:myuserpassword@myexample.com/blah/blah/blah
Обратите внимание, что в Internet Explorer это не сработает, поскольку Microsoft отключила имена пользователей / пароли в URL-адресах в IE. Однако вы можете добавить эту функциональность обратно, изменив свой реестр, как описано в связанной статье KB. Установите «iexplore.exe » DWORD равен 0 в HKEY_CURRENT_USERSoftware Microsoft Internet Explorer Main FeatureControl FEATURE_HTTP_USERNAME_PASSWORD_DISABLE.
Если вы не хотите изменять реестр самостоятельно, вы всегда можете просто использовать Selenium Remote Control, который автоматически устанавливает для вас этот раздел реестра начиная с версии 0.9.2.
Комментарии:
1. Нет, я имел в виду стандартный механизм сеанса на основе файлов cookie, используемый в настоящее время практически на каждом веб-сайте.