Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Скачивание прикрепленного к письму файла

email
downloadfile
robot-framework
testng
Теги: #<Tag:0x00007f7b6d633b08> #<Tag:0x00007f7b6d6339c8> #<Tag:0x00007f7b6d633888> #<Tag:0x00007f7b6d633748>

(Necrosium) #1

imap library к сожалению не умеет скачивать приаттаченый к письму файл. Я написал issue на гитхабе на этот счет, но разработчик уже довольно долгое время так и не реализовал данную функцию. https://github.com/rickypc/robotframework-imaplibrary

я пошел другим путем, который помог решить мне одну из необходимых задач: достать содержимое приаттаченного файла и тела письма, выбрать необходимый мне id и потом сравнить id из тела письма с id из файла. Благо содержимое приаттаченного к письму файла можно получить не скачивая сам файл.

Но вопрос о скачивании приаттаченного файла остается открытым, поскольку мне нужно проверять, что: а) файл таки действительно скачивается и сохраняется на компьютер. б) проверять вес файла.

Может кто-то сталкивался с необходимостью скачивания файлов прикрепленных к письму и поделится, как это можно сделать?
p.s. прямую ссылку на файл нет никакой возможности получить.


(rmerkushin) #2

А подробнее про тестовый случай? Возможно вам проще будет поставить smtp заглушку и из неё доставать письма. Но это зависит от того что вы проверяете.


(Necrosium) #3

юзер делает покупку лицензии для продукта, получает письмо с лицензией, и может скачать файл лицензии, который в последующем будет использован для активации десктопного ПО. Моя задача убедиться что:

  1. пользователь после успешной покупки получил письмо с файлом лицензии.
  2. id лицензии в теле письма соответствует id лицензии в приаттаченном файле и соответствует id лицензии на сайте в личных данных аккаунта.
  3. И в идеале убедиться, что пользователь может скачать и сохранить локально файл лицензии (а заодно и проверить вес файла). Т.к. в последующем мне нужно будет этот файл скармливать десктопному ПО.
    Но, этот сценарий актуален для тестового сервера, т.к. на тестовом серваке файл лицензии содержит id лицензии.
    На продакшине файл лицензии содержит зашифрованную информацию, соответственно никакой id из него достать не получится. Поэтому, для продакшина мне куда важнее иметь возможность скачать/сохранить файл и проверить его вес. (+ в последующем опять таки, скармливать этот файл десктопному ПО). Единственное, что я сейчас делаю для продакшина - это проверяю, что содержимое приаттаченного файла на продакшине не пустое и не содержит данные, как в файле на тестовом сервере.

Такие дела… ну и в общем, мне что на тестовом, что на продакшине, в дальнейшем, нужно будет кормить ПО этим файлом, поэтому, так или иначе, его нужно будет скачивать. Так что, текущая моя реализация, можно сказать - дополнительная проверка + временная заглушка вместо скачивания.

вот кейворд, выполняющий это:


Check license from email
[Arguments] ${my_email} ${environment}
Open Mailbox server=${mail_server} user=${mail_server_username} password=${mail_server_password}
${latest_mail}= Wait for Email fromEmail=${cr_email} toEmail=${my_email} status=UNSEEN timeout=300
${parts} = Walk Multipart Email ${latest_mail}

ignore part null

Walk Multipart Email ${latest_mail}
${part_null} = Get Multipart Payload decode=True

body

Walk Multipart Email ${latest_mail}
${email_license_id} = Get Multipart Payload decode=True
${email_license_id} = Fetch From Right ${email_license_id} ${l_marker_body}
${email_license_id} = Fetch From Left ${email_license_id} ${r_marker_body}
log ${email_license_id}

attachment

Walk Multipart Email ${latest_mail}
${file_license_id} = Get Multipart Payload decode=True
${file_license_id} = Fetch From Right ${file_license_id} ${l_marker_file}
log ${file_license_id}

Run Keyword if “${environment}” == “test_environment” Run Keywords Should be equal ${email_license_id} ${file_license_id} AND Should be equal ${email_license_id} ${account_license_id}
Run Keyword if “${environment}” == “production” Run Keywords Should not be empty ${email_license_id} msg=Mail is empty AND Should not be empty ${file_license_id} msg=License file is empty AND Should not Contains ${file_license_id} TEST_MODE license msg=WARNING! Staging License on production! AND Should be equal ${email_license_id} ${account_license_id}
Close mailbox


Проблему можно решить деревянным способом - открывать почту в браузере, а не коннектится напрямую к почтовому серваку, и кликать по приаттаченному файлу, чтобы скачать его. Но, я не хочу идти таким путем. Это увеличит время выполнения теста (а с учетом того, что тестов на покупку сотни, то это очень сильно увеличит время выполнения)


(rmerkushin) #4

В таком случае, ставьте smtp заглушку, настраивайте на неё сервер и проверяйте почту как файлы


(Bolatbek) #5

Почему нельзя скачать файл, приаттаченный к письму?
Погуглил - на том же stackoverflow много решений на эту тему.