julia_v_iluhina

Untitled

Nov 8th, 2016
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.80 KB | None | 0 0
  1. public class SendAndReceiveMailTest {
  2. /*
  3.     имя тест-класса - формулируй в общем  - что мы тестируем
  4.     GmailTest - было бы правильнее
  5.  
  6.     было бы несколько тест-классов - можно было бы детальнее имя тест-класса делать
  7.  
  8.      а вот уточняться до тестируемых действий - будем в имени тест-метода
  9.  
  10.    https://docs.google.com/document/d/13dNyFGbI7mV22UUhH8E0LJ7SzabAmX7Bw7VCHScYfiU/edit#heading=h.xbzelgj7l3up
  11. */
  12. *******************************
  13.     public void testLogin()
  14.     ...
  15.     public void testSendEmail()
  16. /*
  17.     в задании - Automate the following gmail scenario
  18.     делаем - один сценарий
  19.  
  20.     еще момент
  21.     тест-методы - должны быть независимыми
  22.     в твоей реализации - метод testSendEmail() зависит от testLogin()
  23.     testLogin() - должен отработать первым
  24.  
  25.     не стоит реализовывать тест-методы - зависимыми
  26.  
  27.     да и JUnit  - реализован так, что порядок запуска тест-методов - случаен
  28.     https://github.com/junit-team/junit4/wiki/test-execution-order
  29.  
  30.     можно конечно - и задать порядок запуска
  31.     но - это bad practice - т к это  - не эффективно, да и ненадежно
  32.  
  33.     https://youtu.be/yyzGP2CyMRM
  34.     вот это видео Николая Алименкова - советую смотреть и пересматривать
  35.     думаю, все
  36. */
  37. ***************************************************
  38.   /*
  39.     делаем - один тест-метод
  40.  
  41.     что тестируем
  42.     Login
  43.     Send
  44.     Receive
  45.     Search
  46.  
  47.     можно - оттолкнувшись от этого - и имя метода сформулировать
  48.   */
  49.     @Test
  50.     public void testLogin() {
  51.  
  52.         loginPage.navigateToGoogle();
  53.         loginPage.clickSignIn();
  54.         /*
  55.             вместо этого - можно сразу зайти на http://gmail.com
  56.         */
  57.         loginPage.setEmail();
  58.         loginPage.setPassword();
  59.  
  60.         /*
  61.             а это - можно объединить в один метод - login
  62.         */
  63.     }
  64.  
  65.     @Test
  66.     public void testSendEmail() {
  67.  
  68.         gmailPage.navigateToInbox();
  69.         /*
  70.             мы уже в инбоксе
  71.             нам не нужно туда переходить
  72.         */
  73.         gmailPage.clickCompose();
  74.         gmailPage.setAdress(emailAddress);
  75.         gmailPage.setSubject("TestGmail");
  76.         gmailPage.send();
  77.         /*
  78.             эти действия - как раз send
  79.             мы же не будем по отдельности это делать
  80.             послать письмо = нажать Compose + ввести - кому письмо + ввсести тему письма + нажать send
  81.             все это - send
  82.  
  83.             если запустить этот тест дважды
  84.             то проверка
  85.             ensure only 1 is present in search results
  86.             не пройдет
  87.             т к таких писем - будет два
  88.  
  89.             значит - нужно использовать уникальный Subject
  90.             это можно сделать разными способами
  91.             хоть бы и добавить к тексту - дату-время в миллисекундах
  92.             есть много вариантов
  93.         */
  94.  
  95.         gmailPage.navigateToInbox();
  96.         /*
  97.             перед такой проверкой хорошо бы принудительно получить почту
  98.                         почта обновляется согласно настройке аккаунта
  99.                         не факт - что таймаута хватит - чтобы отправленное нами письмо отразилось в Inbox
  100.  
  101.                         перед проверкой - что письмо пришло
  102.                         хорошо выполнить действие - принудительно получить почту = обновить -
  103.                         нажать на кнопку - http://joxi.ru/V2VBQLqf05vL92
  104.  
  105.              кстати, в тест-классе - не вижу установки нового значения для таймаута
  106.              в задании -
  107.              Gmail loads pretty long time… You can increase selenide timeouts used in “shoulds”
  108.              E.g.: Configuration.timeout = 15000;
  109.             мне вообще понадобилось 20 секунд
  110.         */
  111.         gmailPage.assertLetterIsIn("TestGmail");
  112.         /*
  113.             будем считать, что мы контролируем поток входящих и исходящих для этого аккаунта
  114.             потому - нам нужно проверить - что самое верхнее письмо в списке писем - с таким-то текстом
  115.         */
  116.  
  117.         gmailPage.navigateToSent();
  118.         gmailPage.assertLetterIsIn("TestGmail");
  119.         /*
  120.             также и тут
  121.             нужно проверить самое верхнее письмо
  122.         */
  123.  
  124.         /*
  125.             не реализовал вот этот кусок задания
  126.             search the arrived mail by topic and ensure only 1 is present in search results
  127.  
  128.             т к ищем arrived mail - значит нужно перейти в Inbox
  129.             и затем - с помощью строки поиска - отфильтровать список мейлов
  130.             и убедиться - что в списке - единственное письмо + с правильным текстом (Subject-ом)
  131.         */
  132.     }
  133. }
  134. **********************************************
  135. src/main/java/com/gmail/config/Config.java
  136.  
  137. public class Config {
  138. /*
  139.     Это - тестовые данные
  140.     тестовые данные  - располагай только в ветке проекта src / test
  141.  
  142.     ниже еще коснусь темы структуры проекта
  143.  
  144.     еще важно - пейджи никогда не используют напрямую тестовые данные
  145.     (в том смысле - что из пейджа нелься обращаться к такому классу Config )
  146.     ниже еще будет про это
  147. */
  148. *****************************************
  149.     public void setEmail() {
  150.         $("#Email").setValue(emailAddress).submit();
  151.     }
  152.  
  153.     public void setPassword() {
  154.         $("#Passwd").setValue(password).submit();
  155.     }
  156. /*
  157.     в методах пейджа - не работай с конкретными тестовыми данными
  158.     не "зашивай" какие-то конкретные значения
  159.     и не обращайся к объявленным переменным - тестовым данным
  160.  
  161.     пусть методы пейджа будут иметь параметры
  162.     и именно через параметры - получают тестовые данные
  163.  
  164.     при такой реализации - получишь универсальные инструменты
  165.     и прозрачную тестовую логику в тест-классах
  166.     (ведь там при вызове методов пейджа - мы явно укажем тестовые данные в качестве параметров)
  167. */
  168. ******************************
  169.     public void navigateToInbox() {
  170.         open("https://mail.google.com/mail/#inbox");
  171.     }
  172.  
  173.     public void navigateToSent() {
  174.         open("https://mail.google.com/mail/#sent");
  175.     }
  176. /*
  177.     реализуй эти действия - как действия на UI
  178.     мы это тоже тестируем)
  179.  
  180.     а реальный пользователь - он переходит в инбокс или сент - не через ввод нужного урла
  181.     а кликая на соответветствующих элементах
  182. */
  183. ********************************
  184.  public void assertLetterIsIn(String subject) {
  185.         $(byText(subject)).should(exist);
  186.  }
  187. /*
  188.     это слишком неточно
  189.  
  190.     оперируй коллекцией - списком мейлов
  191.  
  192.     тут проверь - что в самом верхнем элементе - содержится такой-то текст
  193.  
  194.     и тебе еще одна проверка понадобится - для реализации
  195.     search the arrived mail by topic and ensure only 1 is present in search results
  196.     так что - надо будет оперировать списком мейлов)  
  197. */
  198. *************************************
  199. /*
  200.     http://joxi.ru/nAyqEx7HXvxQoA
  201.    
  202.     вот пример хорошей структуры проекта
  203.    
  204.     в src \ main
  205.    
  206.       core - универсальное, что можно переиспользовать в разных проектах
  207.       pages - пейджи тоже можно переиспользовать для других тестов этого же приложения
  208.    
  209.    
  210.     в src \ test
  211.    
  212.       testdata - тестовые данные (если такие есть и они вынесены в отдельный класс)
  213.       testconfigs - предки тест-класса (так можно их изолировать от  собственно тест-классов - чтоб легче было ориентироваться
  214.    
  215.    
  216.     про пекеджи еще немного)
  217.     если GroupID = com.somesite
  218.     а проект todomvctest
  219.     то пакет корневой должен быть com.somesite.todomvctest
  220.    
  221.     логика  - чтобы "не смешивались имена сущностей"
  222.    
  223.     внутри одной компании - может быть несколько проектов)
  224.     и у всех у них один com.somesite  - базовый пекедж
  225.     но для каждого проекта должен быть свой  “базовый пекедж проекта"
  226.     иначе все смешается)
  227.     важно то, что когда этот проект выльется в отдельную библиотеку,
  228.     то не будет конфликтов при его подключении
  229. */
Advertisement
Add Comment
Please, Sign In to add comment