in Профессиональное

Selenium-grid quickstart

Быстрое введение в Selenium-grid.


На текущий момент grid тест отличается от “классического”, тем что он не наследуется от SelenseTestCase ( <- jUnut TestCase ), т.о. suite содержит только выполнение selenium команд (DefaultSelenium) ну и какую-то базовую логику.

Необходимые импорты (в двух словах)

package ru.XXX;
// Импорт grid компонент связанных с сессией
import static com.thoughtworks.selenium.grid.tools.ThreadSafeSeleniumSessionStorage.session;
import static com.thoughtworks.selenium.grid.tools.ThreadSafeSeleniumSessionStorage.closeSeleniumSession;
import static com.thoughtworks.selenium.grid.tools.ThreadSafeSeleniumSessionStorage.startSeleniumSession;
// Импорт TestNG аннотаций для параметров
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.AfterTest;
// Импорт вспомогательных инструментов
import ru.masterhost.utils.TestUtils;
import static junit.framework.Assert.assertEquals

Определение класса test suite

public class TestsControlPanelGrid
{
// Операции, выполняемые перед каждым тестом. В данном случае это старт сессии Selenium
@BeforeTest(alwaysRun = true)
@Parameters({"seleniumHost", "seleniumPort", "browser", "webSite"})
protected void startSession(String seleniumHost, int seleniumPort, String browser, String webSite) throws Exception {
startSeleniumSession(seleniumHost, seleniumPort, browser, webSite);
}
// Операции, выполняемые после каждого теста. В данном случае это завершение сессии Selenium
@AfterTest(alwaysRun = true)
protected void closeSession() throws Exception {
closeSeleniumSession();
}
…
}

Тестовый метод

// параметры Test:
// enabled = true | false - определяет будет ли выполнен тест или нет
// groups = {"group1", "group2"…} - группировка тестов в отчете
// description = "текст…" - описание теста для отчета
// параметры Parameters. Если используются @BeforeTest методы (как указано выше), то передавать параметры
// в каждый тест уже не нужно
@Test(enabled = true, groups = {"group1", "group2"}, description = "Тест регистрации")
public void DoRegistrationPerson () throws Exception
{
// Вместо инстанса Selenium используем session() который статически импортировали
session().open( "/" );
session().click("link=Blah-blah-blah");
// some cool test stuff ….
}

Запуск test suite

Запуск тестов осуществляется через ant. В корне проекта расположен файл ./build.xml, который по умолчанию используется ant для сборок. Использование:
# ./ant [task_name]
# ./ant sanity-check

основные таски:

  • sanity-check – проверка целостности (фактически проверка версии java и ant)
  • launch-hub – запуск hub
  • launch-remote-control – запуск отдельного экземпляра RC

Для запуска собственно класса с тестами используется runner TestNG. В build.xml проекта вносится (если еще нет) соответствующий таск. Таски могут быть двух видов: для последовательного запуска тестов и для параллельного (отличаются набором параметров).

Последовательный запуск тестов

<target name="run-demo-in-sequence" description="Run Selenium tests one by one">
<java classpathref="demo.classpath" classname="org.testng.TestNG" failonerror="true">
<sysproperty key="java.security.policy" file="${basedir}/lib/testng.policy"/>
<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="Selenium Grid Demo In Sequence" />
<arg value="-d" />
<arg value="${basedir}/target/reports" />
<arg value="-testclass"/>
<arg value="com.thoughtworks.selenium.grid.demo.WebTestForASingleBrowser"/>
</java>
</target>

Подразумевается что basedir, webSite, seleniumHost, seleniumPort, browser определены ранее например вот так:

<property file="${basedir}/project.properties" />
<property name="version" value="SNAPSHOT" />
<property name="webSite" value="http://amazon.com" />
<property name="seleniumHost" value="localhost" />
<property name="seleniumPort" value="4444″ />
<property name="browser" value="*chrome" />

Параллельный запуск тестов

<target name="run-demo-in-parallel" description="Run Selenium tests in parallel">
<java classpathref="demo.classpath" classname="org.testng.TestNG" failonerror="true">
<sysproperty key="java.security.policy" file="${basedir}/lib/testng.policy"/>
<sysproperty key="webSite" value="${webSite}" />
<sysproperty key="seleniumHost" value="${seleniumHost}" />
<sysproperty key="seleniumPort" value="${seleniumPort}" />
<sysproperty key="browser" value="${browser}" />
<arg value="-d" />
<arg value="${basedir}/target/reports" />
<arg value="-suitename" />
<arg value="Selenium Grid Demo In Parallel" />
<arg value="-parallel"/>
<arg value="methods"/>
<arg value="-threadcount"/>
<arg value="10″/>
<arg value="-testclass"/>
<arg value="com.thoughtworks.selenium.grid.demo.WebTestForASingleBrowser"/>
</java>
</target>

Write a Comment

Comment

*