2009-03-24 2 views
13

Мне нужен лучший способ проверки заголовков HTTP-ответов с помощью Selenium. Я просмотрел документы Selenium и не видел простых способов сделать это. Помощь высоко ценится.Лучший способ проверить заголовки ответов HTTP с помощью Selenium

+0

Что именно вы пытаетесь сделать? Selenium работает в браузере. Есть ли какая-то конкретная информация, которая вам нужна? – Ben

ответ

7

Я ответил на этот вопрос пару раз на StackOverflow. Найдите мои предыдущие ответы, чтобы выкопать его. Ключ, в котором вам нужно написать какой-то пользовательский код Java, который расширяет ProxyHandler и SeleniumServer. Вам также необходимо использовать выпуск AFTER 1.0 beta 2.

Что касается людей, которые спрашивают , почему вы хотите сделать это: есть много причин. В моем случае мы тестируем тяжелое приложение AJAX, и когда все идет не так, одна из первых вещей, которую мы отлаживаем, - это сетевой провод. Это помогает нам увидеть, произошел ли звонок AJAX, и если да, то каков был ответ.Мы фактически автоматизировали сбор этой информации и фиксировали ее (вместе с скриншотом) с каждым тестом Selenium.

+0

Я отмечаю этот ответ как тот, который мне нравится, поскольку он фактически решает мою проблему. :) У нас есть причины и для проверки заголовков. Я согласен с вышеуказанными сообщениями, но нам очень полезно попасть в заголовки. – globulus

+0

Ну, так как это сам г-н Селен, не может спорить;). Я знал, что вы также можете расширить классы Java на сервере. –

+2

Я просмотрел ваши ответы и не могу найти тот, на который вы ссылаетесь. Какой ответ был? Есть ли у вас примеры расширения этих двух классов Java? – nzpcmad

1

Что я сделал с этим, используя Selenium (а не Selenium RC), было преобразование тестов HTML в JSP, а затем использование Java, где необходимо читать заголовки, или делать все, что JavaScript (селен - это просто Javascript) не мог сделать ,

Возможно, вы можете сообщить несколько сведений о том, как вы планируете использовать Selenium?

+0

Я использую драйвер Ruby для Selenium RC. Я не уверен, что я следую тому, что вы подразумеваете в преобразовании тестов HTML в JSP. Сайт, который я тестирую, написан на .Net, хотя я не могу себе представить, что это повлияло бы на подход. Итак, есть способ перехватить заголовки, что вы говорите? – globulus

3

Я бы не использовал Selenium для этого типа теста и предлагаю вам решить множество проблем с различными инструментами. что мы делаем:

  • Использование модульных тестов для тестирования кода: методы и классы

  • Интеграционные тесты, чтобы проверить, как компоненты приложения висят вместе

  • Простой функциональный тест рамки, как Canoo WebTest (или некоторый эквивалент), чтобы утверждать такие вещи, как заголовки кэша Http, базовая структура страницы, простое перенаправление и настройки/значения файлов cookie

  • Напольные тесты для обеспечения достоверности страниц до Стандарты W3C

  • JsUnit протестировать классы и методы, которые мы создали

  • Селена для тестирования пользовательского интерфейса функциональности/поведения Javascript и интеграцию Javascript в этих страницы

Его стоит тратить время вспыхивает ответственность за тестирование различных аспектов системы с использованием этих различных инструментов, поскольку использование только селена может вызвать проблемы:

  • Чем больше сюита, ​​тем медленнее они бегают. Действительно Селен неотъемлемо медленнее по сравнению с другими инструментами упоминалось
  • Он обрабатывает поведение/функциональное тестирование, но тем не менее XPaths может быть хрупким и может потребовать увеличения количества времени и усилий, чтобы поддерживать
  • Обычно требуется вам настроить «как если бы -действительная жизнь» данных с вашим приложением для пошаговых пользовательских сценариев (который может быть грязными и занять много времени)

есть также некоторые методы - которые вы можете или не сталкивались - что вы можете использовать для проведения тестов Selenium more resilient.

7

API-интерфейс captureNetworkTraffic() в DefaultSelenium захватывает заголовки HTTP-запроса/ответа, и вы можете получить к ним доступ в формате html/xml/plain.

Вот пример кода:

Selenium s = new DefaultSelenium(...); 
s.start("captureNetworkTraffic=true"); 
s.open("http://www.google.com"); 
String xml = s.captureNetworkTraffic("xml"); // html, plain 
s.stop(); 
+1

этот метод не поддерживается в селене 2 .. я получаю 'java.lang.UnsupportedOperationException: captureNetworkTraffic' –

1

Мне кажется, что это может быть очень полезно, чтобы проверить заголовки ответа HTTP с селеном. Не в 100% случаев, возможно ... но, конечно же, есть некоторые. Если вы проверяете последовательность страниц, кажется, было бы полезно протестировать некоторые заголовки ответов как часть этого тестирования (тип Content-Type и Pragma).

0

Ну, я надеялся выяснить, содержит ли свойство Accept-Encoding из HTTP-заголовка «gzip», потому что в нашей компании мы сжимаем CSS и JS-файлы в нашем веб-приложении gzip, и мы хотим проверить его Selenim после каждого фиксации.

2

Я придумал обходное решение, которое использует встроенный прокси-сервер, любезно предоставленный проектом Proxoid.

Его легкий, в отличие от практически любой другой альтернативы там (как BrowserMob или даже LittleProxy)

Смотрите HOWTO, с кодом, здесь: http://www.supermind.org/blog/968/howto-collect-webdriver-http-request-and-response-headers

0

Читать сессионные куки с селеном, а затем использовать реальный HTTP-библиотеку за пределами Selenium для запроса конкретной страницы.

Вот код Python:

# get session cookies from Selenium 
cookies = {} 
for s_cookie in self.selenium.get_cookies(): 
    cookies[s_cookie["name"]]=s_cookie["value"] 

# request the pdf using the cookies: 
response = requests.get(self.full_url('/vms/business_unit/2002/operational_unit/200202/guest/40/bill/pdf/'), cookies = cookies) 
self.assertEqual(response.headers["content-type"], "application/pdf")