Перейти к содержимому

Фотография

Selenium Grid - как начать?


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 43

#1 DedMorozz

DedMorozz

    Новый участник

  • Members
  • Pip
  • 19 сообщений
  • ФИО:Сергей

Отправлено 27 сентября 2010 - 19:38

Добрый день.
Не нашёл на форуме ответов на свои вопросы, и решил начать новую тему.
Начал разбираться с этим тулом и сразу же наткнулся на проблемы:
1. Как нужно изменить тесты Selenium RC для Grid, чтобы запускать их через build файд при помощи ant? (где то видел подобную тему, но когда оказалось нужно, не могу найти её или даже вспомнить где я это видел). Находил похожее для Ruby, но меня интересует применительно к Java коду.
2. Где можно найти описание работы ant применительно к Selenium Grid? Просто передаётся много параметров, пока не совсем понимаю большинство из них :(
3. Обязательно ли использование библиотек TestNG для запуска тестов параллельно, или же достаточно только самого Selenium RC?
4. На ресурсе selenium-grid.seleniumhq.org для проверки правильности настройки Selenium Grid используются несколько демо тестов (например com.thoughtworks.selenium.grid.demo.WebTestForASingleBrowser), но там только откомпилированные классы :( не знаете, где можно найти исходники? Половина вопросов отпала бы автоматически.

Буду признателен за любые советы и ответы.
  • 0

#2 vitorg

vitorg

    Опытный участник

  • Members
  • PipPipPipPip
  • 408 сообщений

Отправлено 28 сентября 2010 - 09:27

1. Менять тесты не надо, надо просто написать этот ANT'овый скрипт и пользоваться им. В ANT'е это будет просто запуск Java-классов.
2. ANT и Selenium Grid никак не связаны между собой. Просто Selenium Grid для сборки и запуска использует ANT, команда запуска "launch-hub". Если интересны внутренности того как она работает, то можно посмотреть файлик GRID_HOME/build.xml.
3. Использование TestNG необязательно, можно взять любую другую запускалку, умеющую запускать тесты параллельно. Сам RC только выполняет уже запущенные тесты параллельно, но запускать их не умеет. Прежде чем использовать TestNG лучше 10 раз подумать, т.к. он кривоват и косоват, можно столкнуться с множеством трудноразрешимых проблем.
4. Исходники примеров есть в GRID_HOME/examples/java-testng/src/com/thoughtworks/selenium/grid/examples/java.
  • 1

#3 DedMorozz

DedMorozz

    Новый участник

  • Members
  • Pip
  • 19 сообщений
  • ФИО:Сергей

Отправлено 28 сентября 2010 - 10:06

....
3. Использование TestNG необязательно, можно взять любую другую запускалку, умеющую запускать тесты параллельно. Сам RC только выполняет уже запущенные тесты параллельно, но запускать их не умеет. Прежде чем использовать TestNG лучше 10 раз подумать, т.к. он кривоват и косоват, можно столкнуться с множеством трудноразрешимых проблем.
....


Спасибо большое за ответы!
А подскажите альтернативу TestNG, раз уж он кривоват :)
  • 0

#4 mcreature

mcreature

    Активный участник

  • Members
  • PipPip
  • 88 сообщений

Отправлено 28 сентября 2010 - 11:13

Спасибо большое за ответы!
А подскажите альтернативу TestNG, раз уж он кривоват :)


JUnit
  • 0

#5 vitorg

vitorg

    Опытный участник

  • Members
  • PipPipPipPip
  • 408 сообщений

Отправлено 28 сентября 2010 - 11:20

JUnit


Только вот он, насколько знаю, не имеет средств для параллельного запуска тестов. Или уже научился?
  • 0

#6 mcreature

mcreature

    Активный участник

  • Members
  • PipPip
  • 88 сообщений

Отправлено 28 сентября 2010 - 12:26


JUnit


Только вот он, насколько знаю, не имеет средств для параллельного запуска тестов. Или уже научился?


Сам по себе нет, вы правы.
Но существует библиотечка parallel-junit, правда сам я ее не смотрел, так что конкретно ничего сказать не смогу.
https://parallel-junit.dev.java.net/
  • 0

#7 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 28 сентября 2010 - 12:53

parallel-junit -- так себе, нужно тесты переделывать.

Есть два более правильных варианта:
-- использовать нестандартный запускатель ConcurrentJunitRunner : http://www.junit.org/node/589
-- использовать maven для запуска тестов, там есть плагин surefire, который умеет распараллеливать junit-тесты : http://incodewetrust...ently-with.html
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#8 Demetri

Demetri

    Активный участник

  • Members
  • PipPip
  • 143 сообщений
  • ФИО:Дмитрий
  • Город:Podgorica, MNE


Отправлено 01 октября 2010 - 11:44

1) По первому пункту есть еще что добавить. Изменение тестов все же может потребоваться, и вот в каком случае: если селениум инициализируется единожды.
Для параллельного выполнения тестов в GRID'е потребуется инициализация одного экземпляра Selenium на каждый класс/метод (в зависимости от метода распараллеливания тестов по классам или методам)

3) Не обязательно, но это весьма простой способ. И по моему личному опыту, работает все вполне сносно (для связки Hudson_CI + Selenium-GRID + TestNG + ANT)
  • 0
Hi! I'm a signature virus. Copy me into your signature to help me spread.

#9 DedMorozz

DedMorozz

    Новый участник

  • Members
  • Pip
  • 19 сообщений
  • ФИО:Сергей

Отправлено 01 октября 2010 - 12:06

А что такое Hudson_CI, и какова его роль в данной связке?

По поводу альтернативных "запускалок" тестов - я так понял, что Grid, который описан на их официальном сайте основан на использовании TestNG. А насколько я понял, весь смысл Grid заключается в том, что мы можем запустить hub и несколько remote controls, с которых и будут запускаться нужные тесты. А вот чем именно мы будет "распаралеливать" выполнение тестов (TestNG или другая библиотека или инструмент), это уже всё равно и зависит от наших предпочтений. Я правильно всё понял? Поправьте меня пожалуйста, если я не прав где-то.

Начал пытаться запускать тесты, которые нормально отрабатывают и запускатся из Eclipse, и понял что мне не хватает элементарных знаний того, как запускать их без использования IDE, а просто командами ant - постоянно ему чего-то не хватает или не может найти нужный класс :)
Если не тяжело, подскажите, где можно посмотреть примеры работы Selenium RC + ant?

Спасибо!
  • 0

#10 Demetri

Demetri

    Активный участник

  • Members
  • PipPip
  • 143 сообщений
  • ФИО:Дмитрий
  • Город:Podgorica, MNE


Отправлено 01 октября 2010 - 16:24

По поводу Hudson CI: Hudson (wiki)
Роль довольно простая: периодически забирает из SVN'а свежайшую версию проекта авто-тестов, компилирует, а потом ant-командами их запускает, собирает и рассылает результаты на e-mail.

По воводу GRID. GRID-Hub выступает в роли selenium-сервера, получая команды, он определяет ID selenium-сессии и перенаправляет команду в зарезервированный под этот ID Selenium-RC. Диспетчер своего рода.

Искать примеры работу Selenium+ANT надо, отталкиваясь от того, какой тестовый фреймворк собираетесь использовать.
Для TestNG:
http://testng.org/doc/ant.html
Google: selenium+ant+testng
  • 1
Hi! I'm a signature virus. Copy me into your signature to help me spread.

#11 DedMorozz

DedMorozz

    Новый участник

  • Members
  • Pip
  • 19 сообщений
  • ФИО:Сергей

Отправлено 11 октября 2010 - 19:40

Продолжаю изучать SeleniumGrid + TestNG.

Прошу помочь с моими новыми проблемами :)
Не стартуют тесты.

Консоль ругается:
java.lang.RuntimeException: Could not start Selenium session: Failed to start new browser session: Error while launching browser
	at com.thoughtworks.selenium.DefaultSelenium.start(DefaultSelenium.java:89)
...

Код тестового метода в Selenium RC:

@Test(groups = {"gmailTest"}, description = "Test sends a mail")
    @Parameters({"seleniumHost", "seleniumPort", "browser", "webSite"})    
    public void testSendMail(String seleniumHost, int  seleniumPort, String browser, String webSite) throws Exception{
    	startSeleniumSession(seleniumHost, seleniumPort, browser, webSite);	
    	session().open("/");
    ....
}

Запускающая часть из build.xml

...
    <property name="webSite" value="http://www.gmail.com"/> 
    <property name="seleniumHost" value="localhost"/> 
    <property name="seleniumPort" value="5555"/> 
    <property name="browser" value="*firefox"/> 
...

<target name="test" description="Run Selenium tests one by one" depends="jar">
<java classpathref="classpath" classname="org.testng.TestNG" failonerror="false">
  <sysproperty key="webSite" value="${webSite}" /> 
  <sysproperty key="seleniumHost" value="${seleniumHost}" /> 
  <sysproperty key="seleniumPort" value="${seleniumPort}" /> 
  <sysproperty key="browser" value="${browser}" />  
  <arg value="-suitename" /> 
  <arg value="GmailSuite" /> 
  <arg value="-d" /> 
  <arg value="${basedir}/target/reports" /> 
  <arg value="-testclass" /> 
  <arg value="com.google.test.GmailProj" /> 
  <arg value="testng.xml" /> 
</java>
  </target>


Подскажите, где я облажался и куда копать?
Чувствую, что "Истина где-то рядом" © :) но не могу понять где именно.
  • 0

#12 Demetri

Demetri

    Активный участник

  • Members
  • PipPip
  • 143 сообщений
  • ФИО:Дмитрий
  • Город:Podgorica, MNE


Отправлено 12 октября 2010 - 03:35

RC-шки запущены? Покажи содержимое консоли GRID-Hub'a:
http://localhost:5555/console

  • 0
Hi! I'm a signature virus. Copy me into your signature to help me spread.

#13 DedMorozz

DedMorozz

    Новый участник

  • Members
  • Pip
  • 19 сообщений
  • ФИО:Сергей

Отправлено 12 октября 2010 - 05:01

Да, одна RC запущена
Available Remote Controls
Host Port Environment 
localhost 5555 *firefox

Кстати, посмотрел что выдает её консоль:
07:55:12.001 INFO - Command request: getNewBrowserSession[*firefox, http://www.gmail.com, ] on session null
 07:55:12.001 INFO - creating new remote session
 07:55:12.004 INFO - Allocated session b98d2f39a01b408ca732dcf8b8b4bc50 for http://www.gmail.com, launching...
 07:55:12.004 ERROR - Failed to start new browser session, shutdown browser and clear all session data
 java.lang.RuntimeException: java.io.FileNotFoundException: D:\ (The system cannot find the path specified)
    at org.openqa.selenium.server.browserlaunchers.FirefoxChromeLauncher.launch(FirefoxChromeLauncher.java:103)

Не совсем понимаю, почему он ругается на диск D. У меня нигде нет никаких обращений к нему.
  • 0

#14 Demetri

Demetri

    Активный участник

  • Members
  • PipPip
  • 143 сообщений
  • ФИО:Дмитрий
  • Город:Podgorica, MNE


Отправлено 12 октября 2010 - 06:53

Да, одна RC запущена

Available Remote Controls
Host Port Environment 
localhost 5555 *firefox
...

Так, стоп. У тебя Hub и RC на одном порту запущены? Такого быть не может :)
При инициализации сессии браузера в коде надо указывать адрес и порт не RC, а Hub'a. По-умолчанию, он на 4444 порте запускается
  • 1
Hi! I'm a signature virus. Copy me into your signature to help me spread.

#15 DedMorozz

DedMorozz

    Новый участник

  • Members
  • Pip
  • 19 сообщений
  • ФИО:Сергей

Отправлено 12 октября 2010 - 07:06

А... вот оно чё...
Я Hub на 4444 запускаю, а RC на 5555. Во блин, а я думал, что надо указывать порт RC.
Спасибо большое! Чуть позже попробую.
  • 0

#16 DedMorozz

DedMorozz

    Новый участник

  • Members
  • Pip
  • 19 сообщений
  • ФИО:Сергей

Отправлено 12 октября 2010 - 20:17

Попробовал, всё получилось.
Кстати, java.io.FileNotFoundException выплёвывал всё равно, пока не переписал Selenium Grid на диск C.

Новая порция вопросов :)
Не могу задать порядок выполнения тестов такой, как мне нужен с использованием xml файлика описания suite.
В доке по TestNG указан такой параметр, как preserve-order. Если он равен true, то тесты будут выполнятся в том порядке, какой указан в xml файле.
Но у меня почему то не получается :)

Собственно описание методов:
    @Test(groups = {"sendTest"}, description = "Test sends a mail.")
    @Parameters({"seleniumHost", "seleniumPort", "browser", "webSite"})    
    public void testSendMail(String seleniumHost, int  seleniumPort, String browser, String webSite) throws Exception{
    	startSeleniumSession(seleniumHost, seleniumPort, browser, webSite);	
    	session().open("/");
      ...

   }
    
   @Test(groups = {"receiveTest"} description = "Test verifies a mail.")
   @Parameters({"seleniumHost", "seleniumPort", "browser", "webSite"})    
   public void testVerifyMail(String seleniumHost, int  seleniumPort, String browser, String webSite) throws Exception{
	   startSeleniumSession(seleniumHost, seleniumPort, browser, webSite);	
 	   session().open("/");
...
   }

Вот кусок моего xml
<test name="gmailTest" preserve-order="true">
<classes>
<class name="com.google.test.GmailProj" /> 
<methods> 
<include name="testSendMail" /> 
<include name="testVerifyMail" /> 
</methods>
</classes>
</test>

Что надо указывать в качестве name у methods? я уже пробовал и группы по разному обзывать и их указывать. Всё равно выполняет тесты в порядке, обратном тому который мне нужен.

Пока обошёл проблему использованием параметра dependsOnGroups у теста, который должен идти вторым, т.е. получилось:
@Test(groups = {"receiveTest"}, dependsOnGroups ={"sendTest"}

  • 0

#17 Demetri

Demetri

    Активный участник

  • Members
  • PipPip
  • 143 сообщений
  • ФИО:Дмитрий
  • Город:Podgorica, MNE


Отправлено 13 октября 2010 - 04:11

Собственно, dependsOnGroups - это и есть решение:
http://testng.org/do...pendent-methods

Есть более жесткий способ задания очередности: dependsOnMethods - в этом случае, если тест свалится, то выполнение всех зависимых от него тестов будет пропущено (в отчете они будут отмечены как skipped)
  • 0
Hi! I'm a signature virus. Copy me into your signature to help me spread.

#18 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 13 октября 2010 - 17:58

Не могу задать порядок выполнения тестов такой, как мне нужен с использованием xml файлика описания suite.
В доке по TestNG указан такой параметр, как preserve-order. Если он равен true, то тесты будут выполнятся в том порядке, какой указан в xml файле.
Но у меня почему то не получается :)

Параметр preserve-order работает до уровня классов, а не отдельных методов.

Упорядочить методы можно используя одну из вариаций dependsOn, но не стоит этим злоупотреблять, потому что это жёсткая зависимость -- пытаясь запустить даже один тестовый метод вы потянете за собой рекурсивно всё, от чего у него указаны зависимости.
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#19 DedMorozz

DedMorozz

    Новый участник

  • Members
  • Pip
  • 19 сообщений
  • ФИО:Сергей

Отправлено 13 октября 2010 - 18:28

Да, обидно.
А параллельно запускаются тоже только методы из разных классов?
  • 0

#20 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 13 октября 2010 - 18:47

Да, обидно.
А параллельно запускаются тоже только методы из разных классов?

Нет, с параллельностью всё по-честному :)
Но если нужна параллельность -- тогда я ещё более настойчиво не рекомендую делать зависимости с использованием dependsOn!
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных