Тесты для пользовательского интерфейса приложения-мастера - PullRequest
0 голосов
/ 21 февраля 2012

Я работал над приложением-мастером со Spring Web Flow и JSP / Tiles в качестве технологии просмотра. Мы написали приемочные тесты пользовательского интерфейса с webDriver / Selenium, чтобы протестировать определенные страницы, но попали в точку показа.

Вот текущая стратегия ...

  1. Войти один раз
  2. Перейти на 1-ю страницу, запустить все тесты на ней
  3. Нажмите далее, используя Selenium
  4. Зайдите на 2-ю страницу и запустите весь тест на 2-й странице

Как видите, проблема этой стратегии в том, что порядок тестов имеет значение (то есть вы не можете тестировать 2-ю страницу, пока не пройдете 1-ю страницу). Если бы мы тестировали каждую страницу отдельно, нам пришлось бы начать с экрана входа в систему каждый раз, и это означает, что время для запуска всех тестов будет экспоненциально увеличиваться.

На странице, какой тест запускается первым, также имеет значение (то есть, если успешно щелкнуть какую-либо ссылку (если она доступна), вы должны увидеть всплывающее окно)

Также с помощью Junit testSuite мы можем запускать только ВСЕ тесты внутри класса, а не выбирать несколько.

Итак, мой вопрос:

  1. Есть ли способ выбрать только несколько тестов из тестового класса и запустить их в заданном порядке?

Заранее спасибо за помощь ...

Ответы [ 3 ]

0 голосов
/ 21 февраля 2012

Вы также можете использовать подход PageObject, где каждая страница будет новым объектом.Пример

public class FirstPage{
private WebDriver driver; 
public FirstPage(){
  driver = new FirefoxDriver();
}

public WebDriver getDriver(){
return driver;
}

public void testSomething(){
// some test on first page
}

public SecondPage goToSecondPage(){
return new SecondPage(this)
}

}


public class SecondPage{
private FirstPage firstPage //that way you can access all variables in first page

public SecondPage(FirstPage first){
this.firstPage = first;
}

public void testSometingElse(){
firstPage.getDriver().findElement // thats how you access to the driver for instance
}
}

В двух словах - каждый WebElement of First page должен быть внутри класса FirstPage и так далее.Вы все еще можете получить доступ к водителю через публичные звонки.Я использую подобный подход, и таким образом я знаю, где я нахожусь в тесте, и уверен, что всякий раз, когда я использую метод SecondPage класса, я на второй странице.

0 голосов
/ 22 февраля 2012

Как насчет того, чтобы сделать каждую группу независимой?

  • Page1-suite
    • Единовременная настройка для suiet: перейдите на страницу 1
    • Выполнить всетесты
  • Page2-suite
    • Однократная настройка: перейдите на страницу Page1, затем Page2
    • Выполните все тесты

Таким образом, вы можете поменять независимость уровня теста на время выполнения.Теперь, если я хочу запустить один конкретный тест page2 X, время = время для [Перейти к Page1, затем Page2] + [TestX]

Похоже, вы используете JUnit, должно работать.Мы делаем это с NUnit для наших приемочных испытаний.Если вы пишете юнит-тесты, каждый тест ДОЛЖЕН быть независимым и быстрым.

0 голосов
/ 21 февраля 2012

Я не знаю, какие тестовые рамки вы используете для прохождения теста Selenium.Если вы используете TestNG , это может соответствовать вашим требованиям, например

<test name="test_one" preserve-order="true">
    <classes>
        <class name="org.your.test.testclass">
            <methods>
                <include name="base_login" />
                <include name="navigate_page_one" />
                <include name="test_one" />
            </methods>
        </class>
    </classes>
</test>

<test name="test_two" preserve-order="true">
    <classes>
        <class name="org.your.test.testclass">
            <methods>
                <include name="base_login" />
                <include name="navigate_page_one" />
                <include name="test_two" />
            </methods>
        </class>
    </classes>
</test>

. Между тем, вы можете добиться этого, улучшив организацию тестового кода.Это не имеет ничего общего с Selenium ....

  • Извлечение каждого шага в отдельные методы
  • Вызов этих методов ...
...