Велосипед почтальона Печкина, или aвтоматическое...
TRANSCRIPT
1
Велосипед почтальона ПечкинаАвтотестирование email-нотификаций
27/04/2013
Олеся Баранова, Align Technology, Inc.
2
• Старший инженерв отделе ручного тестирования,по счастью занимающийсяавтоматизацией :)
- Align Technology, Inc. – с сентября 2011
Обо мне
3
Автотестирование email-нотификаций – Что?
• Email-нотификации –
- Сообщения электронной почты, отправляемые при наступлении определенного события
• Сабмит формы
• Тестирование нотификаций заключается в проверке того, что сообщения:
- Приходят!• Куда нужно
• Когда нужно
- Приходят в ожидаемом виде
- НЕ приходят куда / когда не нужно
4
Автотестирование email-нотификаций – Что?
• Этапы тестирования
1. Подготовительный – набор действий, приводящих к отправке нотификации
- Автоматически + фиксация проделанных действий
2. Основной – проверка сообщений
3. Итоговый – запись результатов тестирования
4. Повторить пункты 1-3 N раз
5
Автотестирование email-нотификаций – Зачем?
• Зачем автоматически?
- Нотификаций много!• 278 уникальных по контенту сообщений, в зависимости от опций, выбранных на форме
- Человеческий фактор
- Не всегда удобно «программно»
6
Автотестирование email-нотификаций – Как?
• Доступ к почте через веб-интерфейс, используя WebDriver
• Доступ к почтовому ящику, работающему через IMAP
- Python
- библиотека imaplib
- методы работы с Message()’ами из модуля email
7
• Чтобы проверить нотификации, нужно:
1. «Достучаться» до почтового ящика
2. Найти нужную папку и считать с нее сообщения
3. Распарсить их, чтобы найти нужное- Если условие поиска простое, можно фильтровать
сообщения сразу по нему, не анализируя весь контент
4. Выполнить необходимые проверки
5. Зафиксировать результат
6. Выйти из почтового ящика
Автотестирование email-нотификаций – Как?
8
• Пример
1. «Достучаться» до почтового ящика
import imaplibm = imaplib.IMAP4_SSL(‘imap.gmail.com’)m.login(‘[email protected]’, ‘************’)
Автотестирование email-нотификаций – Как?
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
• Пример
3. Распарсить их, чтобы найти нужное
import emailfor 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
• Пример
4. Выполнить необходимые проверки
• Поля «Тема», «Кому», «Копии»mail[‘Subject’]mail[‘From’]mail[‘Cc’]
4.Текст контентаbody = mail.get_payload()
• Наличие строк определенного цвета / шрифта / стиля (по html-тэгам)
if ‘<b>’ in body: …
Автотестирование email-нотификаций – Как?
12
• Пример
4. Выполнить необходимые проверки
• Наличие / тип вложенийfor part in email.walk(): if part.get_content_type() in [‘image/jpeg’, ‘application/msword’]: …
4.Имена файлов вложенийpart.get_filename()
Автотестирование email-нотификаций – Как?
13
• Пример
4. Выполнить необходимые проверки
• Отсутствие «лишних» писем
- Уникально идентифицировать сообщение, которое ищем (тема, слова в теле и т.д.)
- Найти все сообщения, удовлетворяющие условиям- Убедиться, что их количество = 1
Автотестирование email-нотификаций – Как?
14
• Пример
5. Зафиксировать результат• Записать в файл или БД
6. Выйти из почтового ящикаm.logout()
Автотестирование email-нотификаций – Как?
15
• Экономия времени
- Затраченное время – 6 часов• Чтение документации, написание скрипта, применение его для тестирования
- Сэкономленное время – 14 часов / прогон• 278 сообщений, 3 мин / сообщение (залезть в почтовый ящик, найти письмо, сверить с ожидаемым результатом, зафиксировать проверку)
Автотестирование email-нотификаций – Результат
16
• Баги
- в сообщениях на определенные комбинации• отсутствие рисунков
• неправильные ссылки на вложения
• неправильное форматирование
• опечатки
• проблемы с кодировкой
Автотестирование email-нотификаций – Результат
17
• То, что осталось за кадром:
- Все решает...• IMAP!
- Не «светите»…• Пароли!
- Учите мат.часть – ...• Работу с Unicode’ом!
- Меняйте / не меняйте…• Состояние Inbox’а
- Думайте – ...• Что вручную, что – автоматически!
- Не изобретайте...• Велосипед!
Автотестирование email-нотификаций – Напоследок
18
• Ресурсы
- imaplib – http://docs.python.org/2/library/imaplib.html
- emal.message – http://docs.python.org/2/library/email.message.html
- Internet Message Format – http://tools.ietf.org/html/rfc2822.html
Автотестирование email-нотификаций – Напоследок
19
Автотестирование email-нотификаций – Вопросы
• Спасибо!