Псст, хочешь автоматизировать проверку почты? |
14.10.2024 00:00 |
Автор: Пол Гриззаффи (Paul Grizzaffi) Терминатор 2: Судный День, наверное, самый лучший из всех фильмов про Терминатора. Он по большей части сохранил дух оригинального Терминатора, но добавил более качественные спецэффекты и шикарную песню Guns ‘N Roses. ПО, о котором я буду говорить, Mailinator, всегда напоминает мне одну из самых запоминающихся фраз из Т2: «Идем со мной, если хочешь жить». Но для начала немного контекста. В моей прошлой компании нам нужно было создать «достаточно уникальную» учетную запи сь, чтобы автоматизированное создание учетки не требовало вмешательства человека; на проде «вмешательство человека» требовалось для предотвращения мошенничества и работы со сценарием «тот же человек, другая информация». Для завершения автоматизированного тестирования создания учетной записи процесс требовал получения письма о создании учетки. В то время Google Mail, то есть Gmail, позволял это через синтаксис «емейл-адрес с плюсом». Для реализации автоматизации мы создали исключительно рабочий аккаунт Gmail, на который отправляли все письма о создании учетной записи через синтаксис «плюс». Общий формат такого сгенерированного емейла был myworkgmail+randomstringandtimestamp@gmail.com. Это подходило для наших задач, так как почтовый адрес был привязан к «чисто рабочей» учетной записи, и мы могли создавать достаточно уникальные адреса. Эти адреса позволяли создавать учетки без вмешательства людей, и у нас было заранее известное место для управления письмами о создании учетной записи. Конечно, возникли проблемы. Во-первых, мы направляли информацию о создании учетной записи на Gmail-аккаунт, созданный одним из нас; Gmail требует от создателя предоставить некую личную или рабочую информацию. Да, мы использовали это только на препроде, но не во всех случаях это так же безопасно. К тому же логин и пароль для этой учетной записи должны были быть достаточно широко известными, чтобы все тест-скрипты могли потенциально получить туда доступ – как и люди для дебага. Люди, обладающие этими данными, могли достаточно анонимно выполнить противозаконные или неэтичные действия; к счастью, и по своей природе, наша команда состояла из достойных доверия, этичных людей. Мы признавали эти риски безопасности и выбрали смириться с ними. Повторно, не во всех случаях это сработает. Несмотря на беспокойство о вредоносных действиях, нам нужно было, чтобы автоматизация нашла и получила доступ к конкретному письму, чтобы смог сработать специальный сценарий, отвечающий за добавление определенной информации к учетной записи. Благодаря доступному на тот момент Gmail API понадобился дополнительный код, отвечающий как за ожидание письма, так и за фильтрацию писем. Это было вполне посильно, но код был хрупким из-за того, как нам нужно было обращаться с API и с «плюс»-адресами. Вернемся в наше время. Недавно меня познакомили с приложением Mailinator. Внимание! Как правило, я не пишу про функциональность конкретного продукта, но тут сделаю исключение, потому что в вышеописанной ситуации он бы нас отлично устроил. Как консультант, я должен уметь работать во множестве окружений с множеством различных инструментов, но также должен быть способен посоветовать продукты и инструменты моим клиентом. Мои комментарии и опыт работы с этим ПО основаны на моем рабочем опыте, возможном наличии клиента, которому это приложение поможет, и создании прототипа с ним. Если бы я знал о нем раньше, мы, конечно, создали бы такой прототип, чтобы оценить, подходит ли нам это. Для описанной выше ситуации у Mailinator есть полезная опция «виртуальных почтовых ящиков». Если у меня есть учетная запись Mailinator, и я посылаю почту на voivod@myaccount.testinator.com, то могу использовать REST API для перехвата всех писем, отправленных на ящик voivod учетной записи myaccount.testinator.com. Эта опция делает поиск проще и требует меньше кода, потому что я могу перехватить только письма, пришедшие во входящие ящика voivod – мне не нужно отфильтровывать сообщения, отправленные другими скриптами на helloween@myaccount.testinator.com, потому что так работают эти ящики. Погодите, вы хотите получить все сообщения для всех ящиков вашего аккаунта? API умеет и это. Вернемся к моему давешнему сценарию использования. Из-за вышеупомянутых требований к уникальности, при создании учетной записи наши сценарии генерировали достаточно уникальную информацию, включая почтовый адрес. В Gmail-варианте нам нужно было перехватывать пачку сообщений из Gmail-аккаунта и проверять, пришло ли искомое – то есть шерстить адреса всех свежепришедших писем. Если бы мы работали в условиях высокой нагрузки, то попали бы в ситуацию гонки – мы упускали бы ожидаемые нами письма, потому что их прибытие не попадало бы в ожидаемые временные рамки. У Mailinator мне нравится то, что я могу написать свой REST-запрос для доступа к конкретному ящику, с которого я хочу получить почту; в моем случае не было бы необходимости проверять адрес получателя в каждом письме. Да, в Mailinator мне все еще нужно внедрять код, ожидающий прибытия письма, но такова суть асинхронного программирования; иногда надо ждать, чтобы что-то пришло или произошло. Подходит ли Mailinator для каких угодно задач? Если вы работаете «по маленькой», несколько скриптов и одна учетная запись позволят вам быть «ответственным лентяем», получая и обрабатывая почту. Если у вас высокоразвитая параллельная автоматизация с множеством одновременно запускающихся скриптов, обработка почты через Mailinator сэкономит ваши силы. О, погодите, я забыл про двухфакторную аутентификацию, то есть 2FA! На моей предыдущей должности проблемы с 2FA почти не было, если ее вообще внедряли. Возвращаемся в наши дни. Сегодня я везде и всюду использую 2FA в почте. Если мы сольем воедино уведомление о создании учетной записи и 2FA в один тест-сценарий, то у нас потенциально выйдет два разных письма на один и тот же адрес, связанных с тестом первичного создания учетки. Для небольших объемов Gmail-подход все еще может быть удобным, но для команд и организаций, параллельно запускающихся в CI/CD/CT, программирование работы с письмами потребует значительно больших усилий. Возможно, вы иного мнения. Хотите увидеть мое демо на C#? Это можно сделать тут: демо. Постойте! Вашим сценариям нужна 2FA через SMS/текст? Недавно я выяснил, что Mailinator умеет и это, но, как говорит Элтон Браун, «Об этом – в следующем представлении». Оставайтесь на линии! |