2. 2
• Старший инженер
в отделе ручного тестирования,
по счастью занимающийся
автоматизацией :)
- Align Technology, Inc. – с сентября 2011
- obaranova@aligntech.com
- 2olesya.baranova@gmail.com
- LinkedIn
Обо мне
3. 3
Автотестирование email-нотификаций – Что?
• Email-нотификации –
- Сообщения электронной почты, отправляемые при
наступлении определенного события
•Сабмит формы
• Тестирование нотификаций заключается в проверке
того, что сообщения:
- Приходят!
•Куда нужно
•Когда нужно
- Приходят в ожидаемом виде
- НЕ приходят куда / когда не нужно
4. 4
Автотестирование email-нотификаций – Что?
• Этапы тестирования
1. Подготовительный – набор действий, приводящих к
отправке нотификации
- Автоматически + фиксация проделанных действий
1. Основной – проверка сообщений
2. Итоговый – запись результатов тестирования
3. Повторить пункты 1-3 N раз
5. 5
Автотестирование email-нотификаций – Зачем?
• Зачем автоматически?
- Нотификаций много!
•278 уникальных по контенту сообщений, в зависимости от
опций, выбранных на форме
- Человеческий фактор
- Не всегда удобно «программно»
6. 6
Автотестирование email-нотификаций – Как?
• Доступ к почте через веб-интерфейс, используя
WebDriver
• Доступ к почтовому ящику, работающему через
IMAP
- Python
- библиотека imaplib
- методы работы с Message()’ами из модуля email
7. 7
• Чтобы проверить нотификации, нужно:
1. «Достучаться» до почтового ящика
2. Найти нужную папку и считать с нее сообщения
3. Распарсить их, чтобы найти нужное
- Если условие поиска простое, можно фильтровать
сообщения сразу по нему, не анализируя весь контент
1. Выполнить необходимые проверки
2. Зафиксировать результат
3. Выйти из почтового ящика
Автотестирование email-нотификаций – Как?
8. 8
• Пример
1. «Достучаться» до почтового ящика
import imaplib
m = imaplib.IMAP4_SSL(‘imap.gmail.com’)
m.login(‘2olesya.baranova@gmail.com’, ‘************’)
Автотестирование email-нотификаций – Как?
9. 9
• Пример
2. Найти нужную папку и считать с нее сообщения
n = int(m.select('Inbox/Travels')[1][0])
for i in range(1, n+1):
responses = m.fetch(i, ‘(RFC822)’) #(response_code, data) tuple
Автотестирование email-нотификаций – Как?
10. 10
• Пример
3. Распарсить их, чтобы найти нужное
import email
for response in responses:
data = response[1]
mail = email.message_from_string(data[0][1]) #email.message.Message
if ‘Reservation’ in mail[‘Subject’]: #mails = m.search(None, ‘(SUBJECT
“Reservation”)’)
return mail
Автотестирование email-нотификаций – Как?
11. 11
• Пример
4. Выполнить необходимые проверки
•Поля «Тема», «Кому», «Копии»
mail[‘Subject’]
mail[‘From’]
mail[‘Cc’]
4.Текст контента
body = mail.get_payload()
•Наличие строк определенного цвета / шрифта / стиля (по
html-тэгам)
if ‘<b>’ in body:
…
Автотестирование email-нотификаций – Как?
12. 12
• Пример
4. Выполнить необходимые проверки
•Наличие / тип вложений
for part in email.walk():
if part.get_content_type() in [‘image/jpeg’, ‘application/msword’]:
…
4.Имена файлов вложений
part.get_filename()
Автотестирование email-нотификаций – Как?
13. 13
• Пример
4. Выполнить необходимые проверки
•Отсутствие «лишних» писем
- Уникально идентифицировать сообщение, которое ищем
(тема, слова в теле и т.д.)
- Найти все сообщения, удовлетворяющие условиям
- Убедиться, что их количество = 1
Автотестирование email-нотификаций – Как?
14. 14
• Пример
5. Зафиксировать результат
• Записать в файл или БД
5. Выйти из почтового ящика
m.logout()
Автотестирование email-нотификаций – Как?
15. 15
• Экономия времени
- Затраченное время – 6 часов
•Чтение документации, написание скрипта, применение его
для тестирования
- Сэкономленное время – 14 часов / прогон
•278 сообщений, 3 мин / сообщение (залезть в почтовый
ящик, найти письмо, сверить с ожидаемым результатом,
зафиксировать проверку)
Автотестирование email-нотификаций – Результат
16. 16
• Баги
- в сообщениях на определенные комбинации
•отсутствие рисунков
•неправильные ссылки на вложения
•неправильное форматирование
•опечатки
•проблемы с кодировкой
Автотестирование email-нотификаций – Результат
17. 17
• То, что осталось за кадром:
- Все решает...
•IMAP!
- Не «светите»…
•Пароли!
- Учите мат.часть – ...
•Работу с Unicode’ом!
- Меняйте / не меняйте…
•Состояние Inbox’а
- Думайте – ...
•Что вручную, что – автоматически!
- Не изобретайте...
•Велосипед!
Автотестирование email-нотификаций – Напоследок