Блог вебразработчика
  • ГЛАВНАЯ
  • ПОДПИСКА

SeleniumDriver + JUnit4

Май18
2012
Написал Tatyana

JUnit — библиотека для модульного тестирования программного обеспечения на языке Java. В основном используется для модульного тестирования Java проектов, однако может быть использована с Selenium WebDriver для автоматизации тестирования веб-приложений.

Преимущества JUnit:

  • Представляет из себя тестовую среду.
  • Не требует контроля со стороны пользователя во время исполнения.
  • Возможность запускать несколько тестов одновременно.
  • Сообщения обо всех ошибках в ходе тестирования.

Тестовые классы JUnit 4 можно исполнять как с помощью интегрированной среды разработки, например, Eclipse, так и с помощью интерфейса командной строки.

Поддержка аннотаций Java 5 существенно отличает JUnit 4 от предшествующих версий.

Аннотация @Test
Объявление теста в JUnit 4 сводится к простой маркировке тестового метода аннотацией @Test и отсутствию необходимости в наследовании от какого-либо специального класса. Можно организовать тестирование с ограничением по времени  – для этого достаточно после аннотации @Test указать значение параметра timeout.

@Test(timeout=60)
public void testSimple() {
    WebDriver driver = new FirefoxDriver();
    driver.get("http://www.google.com");
    assertTrue("Page is not google.com",
            driver.getCurrentUrl().equals("http://www.google.com"));
}

Тестирование того, что код корректно работает в исключительных ситуациях, не менее важно, чем тестирование реальной функциональности кода. Можно искусственно поставить свой код в контролируемую исключительную ситуацию и проверить выбрасывается ли ожидаемое исключение. Вместо использования блока try catch можно в аннотации @Test указать ожидаемое исключение:

/**
 * JUnit отловит AssertionError и тест не завершиться ошибкой
 */
@Test(expected=AssertionError.class)
public void testSuccessExpected() {
    driver.get("http://internetka.in.ua");
    assertTrue("Url is not correct", 
         driver.getCurrentUrl().equals("http://www.google.com"));
}

Аннотация @Ignore
Эта аннотация позволяет игнорировать выполнение тестового метода.

@Ignore("ignored for now because ...")
@Test
public void ignoredTestMethod() {
    assertTrue("ignored test method is executed", false);
}

Также, если поместить эту аннотацию на класс, то все тесты в этом классе будут отключены.

Аннотации @BeforeClass, @AfterClass, @Before, @After
Благодаря использованию аннотаций в JUnit 4 используется гибкая фикстурная модель. Аннотации позволяют исполнять одну и ту же фикстуру для каждого теста или всего один раз для всего класса, или не исполнять ее совсем. Предусмотрено четыре аннотации фикстур: на уровне класса — @BeforeClass и @AfterClass и на уровне теста — @Before и @After.

@Before используется для выполнения множества предварительных условий перед выполнением теста. Например, если есть необходимость записать данные в БД или создать пользователя перед выполнением теста. Метод, помеченный @Before будет выполняться перед выполнением каждого теста в классе.

Метод, помеченный @After запускается после выполнения каждого теста. Например, если нужно очищать переменные после выполнения каждого теста, то этой аннотацией можно маркировать метод, имеющий необходимый код.
Более того, можно маркировать одновременно несколько методов аннотациями @Before и @After. Однако, следует иметь в виду, что эти методы могут запускаться в различном порядке.

package org.openqa.selenium.example;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;

public class SeleniumJUnitExample  {
    public WebDriver driver;

    @Before
    public void setUp() {
        driver = new FirefoxDriver();
    }

    @Test
    public void someSimpleTest() {
        driver.get("http://www.google.com");
        WebElement element = driver.findElement(By.name("q"));
        element.sendKeys("Cheese!");
        element.submit();
        System.out.println("Page title is: " + driver.getTitle());
    }

    @Ignore("ignored for now because ...")
    @Test
    public void ignoredTestMethod() {
        assertTrue("ignored test method is executed", false);
    }

    @After
    public void tearDown() {
        driver.quit();
    }
}

Аннотация @BeforeClass обозначает методы, которые будут вызваны до создания экземпляра тест-класса, методы должны быть public static void. Аннотация @AfterClass связана по смыслу с @BeforeClass, но выполняет методы после теста, как и в случае с @BeforeClass, методы должны быть public static void.
В версии JUnit 4 наборы тестов реализуются также с помощью аннотаций.

@RunWith — позволяет для прогона тестового класса применять других «исполнителей» вместо исполнителей, встроенных в инфраструктуру тестирования. В комплект JUnit 4 входит исполнитель наборов тестов — класс под названием Suite, который и указывается в этой аннотации.

@SuiteClasses - параметром аннотации является список классов, представляющих набор тестов.

 @RunWith(Suite.class)
 @SuiteClasses({ATest.class, BTest.class, CTest.class})
 public class ABCSuite {

 }
  • Нравится
  • Tweet

Опубликовано в JUnit, Selenium - Помечено Java, JUnit4, Selenium WebDriver
Рассказать всем Twitter Facebook Delicious StumbleUpon E-Mail
← Selenium 2: ожидание событий
Selenium: поиск элемента по составному имени класса →

Warning: count(): Parameter must be an array or an object that implements Countable in /var/www/u0420283/data/www/internetka.in.ua/wp-includes/class-wp-comment-query.php on line 405

18 комментариев

  1. Антон's Gravatar Антон
    29.10.2012 at 07:52 | Permalink

    Здравствуйте! Интересует такой вопрос: можно ли параметризовать Suite, и есть ли для для Suite аналоги @Before или @BeforeClass как для Test?

    • Tatyana's Gravatar Tatyana
      29.10.2012 at 11:41 | Permalink

      @BeforeClass и @AfterClass работают в пределах Suite, т.е. один раз перед запуском всех тестовых классов и один раз при завершении. Все остальное решается написанием кастомного расширенного Suite runner.

      • Антон's Gravatar Антон
        29.10.2012 at 11:46 | Permalink

        То есть, если при использовании @BeforeClass и @AfterClass внутри Suite, методы помеченные этими аннотациями будут выполнять до и после всего Suite’а?

        • Tatyana's Gravatar Tatyana
          29.10.2012 at 12:04 | Permalink

          Именно так.

          • Антон's Gravatar Антон
            29.10.2012 at 12:14 | Permalink

            Большое спасибо!

  2. Антон's Gravatar Антон
    30.10.2012 at 10:30 | Permalink

    Добрый день!
    В самом начале поста написано: «Возможность запускать несколько тестов одновременно». Не подскажете, где можно про это почитать?

    • Tatyana's Gravatar Tatyana
      30.10.2012 at 10:57 | Permalink

      Конкретно не подскажу, но можно покопать в сторону использования RunnerScheduler, хороший пример — http://www.junit.org/node/589.
      Или если используется maven, то там есть surefire плагин, им можно запустить junit-тесты параллельно.

  3. Антон's Gravatar Антон
    01.11.2012 at 17:57 | Permalink

    Добрый вечер! Подскажите пожалуйста как можно запустить SuiteClass через консоль.

    • Tatyana's Gravatar Tatyana
      03.11.2012 at 17:06 | Permalink

      С помощью maven Suite запускается также, как и обычный тест:
      mvn test -Dtest=SuiteCase

      Для скомпилированного Java проекта:
      java -cp library/junit-4.10.jar;tests org.junit.runner.JUnitCore example.SuiteCase
      library/junit-4.10.jar — путь к библиотеке JUnit;
      tests — output folder, в котором находятся скомпилированные тестовые классы;
      example.SuiteCase — полное имя тестового класса

      • Кирилл's Gravatar Кирилл
        31.03.2014 at 13:49 | Permalink

        Пробую так сделать — выдаётся ошибка:
        Error: Could not find or load main class JUnitTest
        Из NetBeans запускается без ошибок.

        Вы не подскажите, может, есть какая-нибудь программа для запуска тестов?
        Мне кажется, через консоль не совсем кошерно, а инфы толком в инете не могу найти.

        • Tatyana's Gravatar Tatyana
          01.04.2014 at 09:43 | Permalink

          Запуск тестов через консоль не только кошерный, но и в большинстве случаев наиболее предпочтительный вариант. Он позволяет использовать для тестирования различные Continuous Integration сервера и не привязываться к программному обеспечению. Можете использовать любую IDE для java разработки, если консоль Вам не подходит.

          Какой именно вариант запуска выдает ошибку?

  4. Юрий's Gravatar Юрий
    06.05.2013 at 08:44 | Permalink

    Здравствуйте, Татьяна!
    А не могли бы Вы подсказать, что я делаю не так.
    У меня есть maven-проект.
    Запускаю тест в командной строке из директории, где лежит pom.xml с помощью команды mvn test. Тест запускается.
    Но вот с помощью jUnit никак не могу.
    Моя библиотека jUnit лежит в C:\Users\User\.m2\repository\junit\4.9\junit-4.9.jar
    Насколько я понимаю, проект maven скомпилированные файлы складывает в target.
    То есть путь такой: C:\Users\User\workspace\seleniumproject\target\test-classes\com\selenium\LoginTest.class
    Пишу в консоли:
    java – cp C:\Users\User\.m2\repository\junit\4.9\junit-4.9.jar; C:\Users\User\workspace\seleniumproject\target\test-classes org.junit.runner.JUnitCore com.selenium.LoginTest
    Получаю ошибку «Exception in thread «main» java.lang.NoClassDefFoundError: org/openqa/selenium/MoSuchElementException”
    OS – Windows7.
    Заранее спасибо.

    • Tatyana's Gravatar Tatyana
      07.05.2013 at 08:43 | Permalink

      Здравствуйте, помимо JUnit Вам нужно использовать и все остальные библиотеки, в частности selenium. Соберите все необходимые библиотеки в одну папку и используйте что-то вроде lib/*

  5. abrakadabr's Gravatar abrakadabr
    09.09.2013 at 04:06 | Permalink

    Добрый день! а вот вопрос по выполнению аннотаций, в режиме Debug — @After отрабатывает корректно, а в режиме Run — @After не выполняется. Всё это происходит в IDEA 11. Пока не представляю в чём именно может быть причина — может есть идеи?? Спасибо

    • abrakadabr's Gravatar abrakadabr
      09.09.2013 at 05:03 | Permalink

      точнее в @After не отрабатывает selenium.close();

      • Tatyana's Gravatar Tatyana
        09.09.2013 at 11:06 | Permalink

        Добрый день, попробуйте вывести что-нибудь в консоль из метода @After, чтобы проверить запускается ли метод на выполнение.

        Если selenium — это WebDriver, то лучше использовать selenium.quit();

        • abrakadabr's Gravatar abrakadabr
          10.09.2013 at 02:44 | Permalink

          Tatyana, да, всё прочее из @After выполняется, например System.out.println(«тра-та-та») и до selenium.close(), и после.
          Selenium — это WebDriver и, признаться, quit() хотел испробовать, но не испробовал. Сейчас и затестим, отпишусь, спасибо!!

        • abrakadabr's Gravatar abrakadabr
          10.09.2013 at 02:52 | Permalink

          да, Tatyana, quit решил вопрос!) Вопрос оказался простым, разочаровался в своём опыте, надо учиться. Спасибо!!

Свежие записи

  • WebDriver и SSL Untrusted certificate
  • Видеозапись выполнения тестов Selenium
  • Selenium WebDriver: basic авторизация
  • BrowserMob Proxy + Selenium: автоматизация сбора данных о производительности
  • Hibernate 4: UserType пользовательский тип данных (часть 2)

Поиск

Рубрики

  • Hibernate ORM
  • SEO
  • Разное
  • Тестирование
    • JUnit
    • Selenium
    • Thucydides

Метки

Actions AJAX Alert AutoIt ChromeDriver Exceptions ExpectedConditions FindElement FirefoxDriver Hibernate InternetExplorerDriver Java Javascript Jenkins JUnit4 Maven PageFactory Page Object RemoteWebDriver Select Selenium IDE Selenium Server Selenium WebDriver switchTo Thucydides WebDriverWait XPath Автоматизированное тестирование база данных заработок в сети сеть Интернет скорость продвижения сайта статейное продвижение услуги продвижения

Реклама


Donec in mi a arcu cursus commodo non ut metus. Nunc id eros ut augue consequat tempus ut non ligula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Integer pretium, erat sit amet scelerisque euismod, purus lectus convallis dui, eget imperdiet sapien est ut magna. Nullam elementum, tortor vitae pulvinar mattis, orci neque porta tortor, a feugiat nisi lacus quis diam. Ut gravida augue id est rutrum elementum. Mauris eget felis dolor. Phasellus ante ante, porttitor sit amet lobortis ut, suscipit id neque. Fusce hendrerit dolor nec odio eleifend in auctor enim cursus. Nullam fermentum pretium risus, in hendrerit nulla cursus sit amet. Fusce eu tempus elit. Ut tortor velit, aliquam in ornare vel, feugiat sed nibh. Donec fringilla est id odio lacinia vulputate. Donec nulla urna, congue sit amet pretium non, dictum at orci. Fusce neque sem, fermentum eu tempus nec, mattis venenatis sem. Proin scelerisque velit tristique urna mattis adipiscing. Proin mattis faucibus facilisis. Integer non lacus ac ligula accumsan convallis quis molestie erat. Curabitur imperdiet vestibulum vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris lacus ligula, hendrerit eget suscipit in, sollicitudin nec dui. Suspendisse euismod, lorem pretium gravida rhoncus, enim quam facilisis orci, nec volutpat nisi dolor id lacus. Proin dolor arcu, rutrum eget hendrerit vel, pharetra id elit. Nullam porta euismod suscipit. Pellentesque malesuada consequat sem, et auctor magna aliquam gravida. Nullam blandit dignissim iaculis. Suspendisse non diam nec augue scelerisque iaculis. Nam id dui sed lorem vulputate rhoncus eget eu tellus. In sit amet nisi nunc. Fusce sed aliquet sem. Aliquam sit amet metus metus.
Donec in mi a arcu cursus commodo non ut metus. Nunc id eros ut augue consequat tempus ut non ligula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Integer pretium, erat sit amet scelerisque euismod, purus lectus convallis dui, eget imperdiet sapien est ut magna. Nullam elementum, tortor vitae pulvinar mattis, orci neque porta tortor, a feugiat nisi lacus quis diam. Ut gravida augue id est rutrum elementum. Mauris eget felis dolor. Phasellus ante ante, porttitor sit amet lobortis ut, suscipit id neque. Fusce hendrerit dolor nec odio eleifend in auctor enim cursus. Nullam fermentum pretium risus, in hendrerit nulla cursus sit amet. Fusce eu tempus elit. Ut tortor velit, aliquam in ornare vel, feugiat sed nibh. Donec fringilla est id odio lacinia vulputate. Donec nulla urna, congue sit amet pretium non, dictum at orci. Fusce neque sem, fermentum eu tempus nec, mattis venenatis sem. Proin scelerisque velit tristique urna mattis adipiscing. Proin mattis faucibus facilisis. Integer non lacus ac ligula accumsan convallis quis molestie erat. Curabitur imperdiet vestibulum vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris lacus ligula, hendrerit eget suscipit in, sollicitudin nec dui. Suspendisse euismod, lorem pretium gravida rhoncus, enim quam facilisis orci, nec volutpat nisi dolor id lacus. Proin dolor arcu, rutrum eget hendrerit vel, pharetra id elit. Nullam porta euismod suscipit. Pellentesque malesuada consequat sem, et auctor magna aliquam gravida. Nullam blandit dignissim iaculis. Suspendisse non diam nec augue scelerisque iaculis. Nam id dui sed lorem vulputate rhoncus eget eu tellus. In sit amet nisi nunc. Fusce sed aliquet sem. Aliquam sit amet metus metus.
Donec in mi a arcu cursus commodo non ut metus. Nunc id eros ut augue consequat tempus ut non ligula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Integer pretium, erat sit amet scelerisque euismod, purus lectus convallis dui, eget imperdiet sapien est ut magna. Nullam elementum, tortor vitae pulvinar mattis, orci neque porta tortor, a feugiat nisi lacus quis diam. Ut gravida augue id est rutrum elementum. Mauris eget felis dolor. Phasellus ante ante, porttitor sit amet lobortis ut, suscipit id neque. Fusce hendrerit dolor nec odio eleifend in auctor enim cursus. Nullam fermentum pretium risus, in hendrerit nulla cursus sit amet. Fusce eu tempus elit. Ut tortor velit, aliquam in ornare vel, feugiat sed nibh. Donec fringilla est id odio lacinia vulputate. Donec nulla urna, congue sit amet pretium non, dictum at orci. Fusce neque sem, fermentum eu tempus nec, mattis venenatis sem. Proin scelerisque velit tristique urna mattis adipiscing. Proin mattis faucibus facilisis. Integer non lacus ac ligula accumsan convallis quis molestie erat. Curabitur imperdiet vestibulum vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris lacus ligula, hendrerit eget suscipit in, sollicitudin nec dui. Suspendisse euismod, lorem pretium gravida rhoncus, enim quam facilisis orci, nec volutpat nisi dolor id lacus. Proin dolor arcu, rutrum eget hendrerit vel, pharetra id elit. Nullam porta euismod suscipit. Pellentesque malesuada consequat sem, et auctor magna aliquam gravida. Nullam blandit dignissim iaculis. Suspendisse non diam nec augue scelerisque iaculis. Nam id dui sed lorem vulputate rhoncus eget eu tellus. In sit amet nisi nunc. Fusce sed aliquet sem. Aliquam sit amet metus metus.
Donec in mi a arcu cursus commodo non ut metus. Nunc id eros ut augue consequat tempus ut non ligula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Integer pretium, erat sit amet scelerisque euismod, purus lectus convallis dui, eget imperdiet sapien est ut magna. Nullam elementum, tortor vitae pulvinar mattis, orci neque porta tortor, a feugiat nisi lacus quis diam. Ut gravida augue id est rutrum elementum. Mauris eget felis dolor. Phasellus ante ante, porttitor sit amet lobortis ut, suscipit id neque. Fusce hendrerit dolor nec odio eleifend in auctor enim cursus. Nullam fermentum pretium risus, in hendrerit nulla cursus sit amet. Fusce eu tempus elit. Ut tortor velit, aliquam in ornare vel, feugiat sed nibh. Donec fringilla est id odio lacinia vulputate. Donec nulla urna, congue sit amet pretium non, dictum at orci. Fusce neque sem, fermentum eu tempus nec, mattis venenatis sem. Proin scelerisque velit tristique urna mattis adipiscing. Proin mattis faucibus facilisis. Integer non lacus ac ligula accumsan convallis quis molestie erat. Curabitur imperdiet vestibulum vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris lacus ligula, hendrerit eget suscipit in, sollicitudin nec dui. Suspendisse euismod, lorem pretium gravida rhoncus, enim quam facilisis orci, nec volutpat nisi dolor id lacus. Proin dolor arcu, rutrum eget hendrerit vel, pharetra id elit. Nullam porta euismod suscipit. Pellentesque malesuada consequat sem, et auctor magna aliquam gravida. Nullam blandit dignissim iaculis. Suspendisse non diam nec augue scelerisque iaculis. Nam id dui sed lorem vulputate rhoncus eget eu tellus. In sit amet nisi nunc. Fusce sed aliquet sem. Aliquam sit amet metus metus.

Блог вебразработчика
Функциональное тестирование и продвижение сайтов

Яндекс.Метрика