для этого использую PageObject, тоесть в логике теста (сам класс теста) у меня нет передачи драйвера, ввода данных, сложных конструкций и локализации элементов - все выводится в методы соответствующих страниц-классов. Это удобно и нареканий нет.
НО у "правильных" тестов должно быть две особенности:
1. Тестируя и выполняя какое-то действия, они должны возвращать систему в исходное положение (убирать за собой).
2. Они должны быть независимы от предыдущих тестов. (каждый тест можно запустить отдельно и он сам делает подготовку нужного состояния)
Поэтому у меня два вопроса.
первый вопрос: Если я тестирую отправку письма, то тогда я должен буду за собой "убрать" тоесть удалить письмо из отправленных ( как вариант можно еще адресную книгу подчистить и удалить из удаленных писем тоже неплохо бы) Мой код:
public class MainFunctions extends BasicTestCase { private LoginPage loginPage; private HomePage homePage; private IncomingPage incomingPage; private SentPage sentPage; private WriteLetterPage writeLetter; @Test public void testSendMail(){ loginPage = new LoginPage(driver); loginPage.open(); homePage = loginPage.loginAs(); assertTrue(homePage.isLoggedIn()); incomingPage = homePage.enterIncomingPage(); writeLetter = incomingPage.clickWriteLetterBtn(); writeLetter.writeAndSendLetter(); assertTrue(writeLetter.isLetterSent()); sentPage = incomingPage.enterSentPage(); assertTrue(sentPage.isThereSentLetters()); sentPage.deleteLetter(); assertTrue(sentPage.isLetterDeleted()); } }В итоге я делаю в два раза больше кода. Надо ли? Почтовый ящик ведь безграничен (практически) и к тому же, возможно, будут тесты в которых убрать за собой будет в несколько раз сложней чем добавить туда, если вообще будет такая возможность...
Вопрос второй: Допустим я тестирую базовую функциональность почты:
- Залогиниться
- Написать и отправить письмо
- Проверить сохранилось ли это письмо в отправленных
- Проверить можно ли удалить это письмо из отправленных.
получается если следовать правилу "все тесты должны быть независмыми" мне каждый тест кейс прийдется увеличивать на код предыдущего теста, тоесть чтобы в итоге проверить удалилось ли письмо из отправленных я должен залогиниться, написать письмо, увидеть его в отправленных, удалить от туда и еще все это ассертить после каждого шага.
Почему бы не использовать аннотации которые подвязывают тесты между собой чтобы каждый тест подготавливал состояние для исполнения следующего?
и завязывать бы как-то эти методы зависмые в отдельные группы.У аннотаций TestNG есть следующие параметры:
dependsOnMethods — методы, от которых зависит, сначала будут выполнены они, а затем данный метод
dependsOnGroups — группы, от которых зависит
Таким образом я протестировал возможность залогиниться, не выходя из теста я тестирую возможность отправки письма, после чего сразу тестирую сохранилось ли оно в отправленых и, опять же, не выходя из браузера тестировать удаление из отправленых. Все это одной цепочкой.
Что вы скажете, как оно на практике удобней и "правильней"? Хочу просто сразу научиться правильно тесты писать...