Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Разовое открытие страницы для нескольких тестов


(Sergey356) #1

Всем доброго времени суток!:) Я усердно продолжаю продвигать автотесты в своем офисе, используя Java+WebDriver :) И столкнулся с некоторой проблемой. Поясню на примере:

Сейчас я пишу автотесты онлайн магазина. Для примера возмем http://shoptime.ru 

Я хочу написать два теста, которые буду выполненны при попадании на сайт. 

 

public class MainPageTest extends TestBase {       //в классе TestBase находяться методы setUp и tearDown
  MainPage page;
  @Override
  @Before
  public void setUp() throws Exception {
    super.setUp();
    page = new MainPage(driver);
  }
 
@Test
public void testOpenStartPage() {                                     //проверяю, открыта ли страница
assertTrue(page.isOpen(BASE_URL_SHOPTIME));
}
 
@Test                                                                                    //Тест проверяет что уже зарегистрированный пользователь, хочет подписаться на новости
public void testAlredySubscribeUser() {
assertTrue(page.isAlreadySubscribe());
}
}
 
В первом тесте в методе is.Open(...) открываеться страница: driver.get(s), затем небольшая проверка с возвратом true или false
Второй же тест должен будет с помощью метода isAlreadySubscribe() производить манипуляции на странице.
Тут я и столкнулся с препятсвием. Junit вызывает каждый тест отдельно(драйвер инициализирует, видимо) и при вызове второго теста - мне откроетсья пустая страница, т.к. в методе нету driver.get();
Хотелось бы узнать, есть ли какой то способ открыть страницу разово и выполнить на ней несколько разных тестов?

 


(Mykhailo Poliarush) #2

вам просто надо использовать BeforeClass аннотацию http://junit.sourceforge.net/javadoc/org/junit/BeforeClass.html

тогда метод setUp будет вызываться всего лишь одни раз перед прогоном всех тестов и объекты не будут перезаписываться.


(Sergey356) #3

Спасибо, помогло!:))) Так же надо не забыть использовать антоцию @AfterClass, для метода tearDown:)


(Mykhailo Poliarush) #4

да @AfterClass это тоже немало важно, 

рад что у вас получилось

удачной автоматизации :)


(Sergey356) #5

И снова добрый вечер, пришлось вернуться в эту тему. Как было решено ранее, я использовал анотации BeforeClass и AfterClass для прогона большого кол-ва тестов, не закрывая браузер.

Потом я решил создать второй подобный класс с кучей тестов и объеденить эти два класса в одном TestSuite. Мои оба класс стали быть наследованы от TestCase. Далее был создан класс:

public class AutoTestPlanShoptime extends TestSuite {

    public static Test suite() {
         TestSuite suite = new TestSuite(AutoTestPlanShoptime.class.getName());
         //$JUnit-BEGIN$
              suite.addTestSuite(MainPageTest.class);
        //$JUnit-END$
         return suite;
     }
}
 
После этого, компилятор поругался, что мои методы setUp и tearDown не должны быть static() (в классе MainPageTest). Убрав static у этих методов и запустив AutoTestPlanShoptime я снова обнаружил, что драйвер загружаеться и инициализируеться каждый раз при новом тесте. Аннотации не работают. Почему так получилось?

(Shaman) #6

Судя по всему ваши тест кейсы в сьюте считаются отдельными классами, поэтому аннотация @BeforeClass/afterClass отрабатывает перед/после каждого из этих классов.

 

для решения попробуйте несколько вариантов:

1) аннотация @BeforeSuite. Поидее должно решить сходу все проблемы, но я честно говоря ей не пользовался.( данная аннотация возможно есть только в testNG)

2) сделайте 1 класс и в него затолкайте все методы тестов с аннотацией @Test. и тогда просто можете запускать один класс с @BeforeClass/afterClass аннотациями.


(Sergey356) #7

Я думал про то, чтобы запихнуть все тесты в один класс и все это будет работать, проверил. Но хотелось бы разделить классы по некоторому признаку, например, что тестируем. Так например класс MainPage - тестирует просто доступность всех ссылок на главной странице сайта, не ведущих на 404 ошибку, а класс AuthorizationTest тестирует функционал регистрации того же сайта. Поэтому и не хочеться все тесты в общую кучу объединять. Опять таки, наглядней будет отчет. Вижу какой класс не прошел тест, открываю его и гляжу какой тест поломался.


(Shaman) #8

если ваших тестов не очень много, могу посоветовать перейти на TestNG вместо JUnit, в тестНЖ можно компоновать сьют файлы при помощи хмл(в Жюните вроде тоже можно, но я не подскажу как это делать).

 

в тестНЖ точно такие же аннотации как и в жЮните.