Перейти к содержимому

Фотография

Загрузка документа


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 19

#1 Ded_Mazzai

Ded_Mazzai

    Новый участник

  • Members
  • Pip
  • 14 сообщений

Отправлено 21 июня 2018 - 19:48

Всем доброго времени суток. Тестирую сервис для работы с документами, один из основных его функционалов это выгрузка готового документа пользователю. Подскажите, пожалуйста где можно почитать как в Seleniume + Python правильно и стабильно реализовать проверку того, что документ скачался. А точнее, при нажатии кнопки скачать, документ начинает загрузку не сразу, и скачивается по времени по разному, вот эти ожидания и нужно победить. После чего просто сравнивать количество файлов до загрузки в папке и после(это не проблема). Заранее всем спасибо.
  • 0

#2 Noksa

Noksa

    Активный участник

  • Members
  • PipPip
  • 117 сообщений
  • ФИО:Александр

Отправлено 21 июня 2018 - 20:05

Что мешает запомнить количество файлов до какого-то действия, а после него ждать пока количество файлов изменится на +1 и проверять ещё что файл скачан до конца?
  • 0

#3 Ded_Mazzai

Ded_Mazzai

    Новый участник

  • Members
  • Pip
  • 14 сообщений

Отправлено 22 июня 2018 - 04:08

Ничего не мешает, кроме того что файл может быть не скачен
  • 0

#4 Noksa

Noksa

    Активный участник

  • Members
  • PipPip
  • 117 сообщений
  • ФИО:Александр

Отправлено 22 июня 2018 - 05:12

Ничего не мешает, кроме того что файл может быть не скачен

 

В каком смысле он может быть не скачан?

 

Я использую такой вариант:

 

После нажатия кнопки/ссылки начинается скачивание файла (в течении 2-3 сек).

Сам файл может качаться при этом любое время.

 

Ждём условные 2-3 секунды изменения количества файлов в директории загрузки.

Если по истечении 2-3 секунд количество файлов не изменилось - значит что-то пошло не так и скачивание не началось.

Если же началось, то количество файлов уже изменилось, даже если файл ещё не скачался.

 

Вычитаем из одной коллекции другую, получаем одно вхождение - это наш новый файл.

 

Далее ждём, пока он скачается целиком.

Здесь вариантов может быть много:

1)  Ждём пока у файла расширение изменится с .download/.temp/ещё какого-то на любое другое кроме этих

2) Ждём пока у файла будет конкретное расширение, если вы знаете, каким оно должно быть после скачивания.

3) Ждём пока у файла будет ожидаемый размер.

4) Итд.


  • 0

#5 Ded_Mazzai

Ded_Mazzai

    Новый участник

  • Members
  • Pip
  • 14 сообщений

Отправлено 22 июня 2018 - 05:59

Александр спасибо за ответ.

В том то и дело что файл может быть не скачан. Кликаем на download а в ответ тишина. 

 

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

 

В любом случае, спасибо что отозвались.


  • 0

#6 Noksa

Noksa

    Активный участник

  • Members
  • PipPip
  • 117 сообщений
  • ФИО:Александр

Отправлено 22 июня 2018 - 06:31

Александр спасибо за ответ.

В том то и дело что файл может быть не скачан. Кликаем на download а в ответ тишина. 

 

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

 

В любом случае, спасибо что отозвались.

 

Ну здесь по-другому не получится.

Да и это не совсем в лоб.

Вы же не будете ждать каждый раз 10 секунд. Если файл начал качаться за 1 секунду - то ожидание прервется и начнется другое - ожидание завершения скачивания файла.

 

Если у вас файлы начинают качаться спустя 10 секунд после клика по кнопке - это проблема разработки, надо идти к ним/к начальству и просить оптимизировать. 

 

Предполагаю, что после нажатия кнопки "Скачать" начинается формирование файла, и после того как он сформируется - начинается скачивание, отсюда и различие в ожидании.


  • 1

#7 Ded_Mazzai

Ded_Mazzai

    Новый участник

  • Members
  • Pip
  • 14 сообщений

Отправлено 22 июня 2018 - 09:36

 

Александр спасибо за ответ.

В том то и дело что файл может быть не скачан. Кликаем на download а в ответ тишина. 

 

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

 

В любом случае, спасибо что отозвались.

 

 

Вы же не будете ждать каждый раз 10 секунд. Если файл начал качаться за 1 секунду - то ожидание прервется и начнется другое - ожидание завершения скачивания файла.

 

 

 

Опять же, а если файл не стал скачиваться? Сколько его ждать? И если ждать то получается нужно опять принудительно выставлять максимальное время ожидания... 


  • 0

#8 Spock

Spock

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 22 июня 2018 - 09:59

 

 

для каждого моего документа (а их около 200)

саму генерацию файлов надо проверять не через Е2Е тесты, а например на уровне юнит тестов. тогда всё будет быстро и надёжно

 

а на верхнем уровне Е2Е тестов достаточно проверить что скачивание работает, просто один тест скачивает один файл


  • 1

#9 Noksa

Noksa

    Активный участник

  • Members
  • PipPip
  • 117 сообщений
  • ФИО:Александр

Отправлено 22 июня 2018 - 11:11

Опять же, а если файл не стал скачиваться? Сколько его ждать? И если ждать то получается нужно опять принудительно выставлять максимальное время ожидания... 

 

 

Если файл не стал скачиваться, то это дефект, со всеми вытекающими. Сколько ждать его - это вам должно быть известно, у меня на проекте скачивание начинается в пределах 3 секунд, я это время и жду.

Если файл начал качаться позже - это уже дефект.

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

 

У вас в любом случае при почти любых проверках, где результат появляется не моментально есть неявные ожидания. Почему же вас это ожидание смущает именно при скачивании файла, ведь это такая же абсолютно проверка?

 

Либо воспользуйтесь советом человека выше.


  • 1

#10 Ded_Mazzai

Ded_Mazzai

    Новый участник

  • Members
  • Pip
  • 14 сообщений

Отправлено 22 июня 2018 - 12:23

Спасибо за советы, в принципе картина ясна. Мне самое главное было понять как сделать правильно, и не городить огородов.   


  • 0

#11 Noksa

Noksa

    Активный участник

  • Members
  • PipPip
  • 117 сообщений
  • ФИО:Александр

Отправлено 22 июня 2018 - 12:30

Спасибо за советы, в принципе картина ясна. Мне самое главное было понять как сделать правильно, и не городить огородов.   

 

Роман правильно написал - проверять генерацию и содержимое файла лучше через юнит-тесты - это должны делать разработчики.

Если такие юнит-тесты не написаны, значит разработчики забивают на юнит-тесты.


  • 1

#12 Ded_Mazzai

Ded_Mazzai

    Новый участник

  • Members
  • Pip
  • 14 сообщений

Отправлено 22 июня 2018 - 12:59

 

Спасибо за советы, в принципе картина ясна. Мне самое главное было понять как сделать правильно, и не городить огородов.   

 

Роман правильно написал - проверять генерацию и содержимое файла лучше через юнит-тесты - это должны делать разработчики.

Если такие юнит-тесты не написаны, значит разработчики забивают на юнит-тесты.

 

Да нет, в проверку именно генерации файла и его содержимого я и не лезу, просто периодически от поддержки приходят жалобы на не скачивание документа, да и сам я это отлавливаю...


  • 0

#13 Spock

Spock

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 22 июня 2018 - 13:22

 

 

Да нет, в проверку именно генерации файла и его содержимого я и не лезу, просто периодически от поддержки приходят жалобы на не скачивание документа, да и сам я это отлавливаю...

"жалоба на скачивание" в основном может происходить из-за двух разных багов: 

1. файл не сгенерился в бэкенде, но функция загрузки работает

2. файл сгенерился, но функция загрузки сломана

 

для тестирования функции загрузки достаточно одного теста, не надо делать их сотни, они будут медленные хрупкие и бесполезные

а тесты на генерацию должны быть юнит-тестами, вот там их надо создать по одному тесту на каждый тип файла-отчёта


  • 1

#14 BadMF

BadMF

    Специалист

  • Members
  • PipPipPipPipPip
  • 809 сообщений
  • ФИО:Dmitry Petrov

Отправлено 02 июля 2018 - 07:30

 

Ничего не мешает, кроме того что файл может быть не скачен

 

В каком смысле он может быть не скачан?

 

Я использую такой вариант:

 

После нажатия кнопки/ссылки начинается скачивание файла (в течении 2-3 сек).

Сам файл может качаться при этом любое время.

 

Ждём условные 2-3 секунды изменения количества файлов в директории загрузки.

Если по истечении 2-3 секунд количество файлов не изменилось - значит что-то пошло не так и скачивание не началось.

Если же началось, то количество файлов уже изменилось, даже если файл ещё не скачался.

 

Вычитаем из одной коллекции другую, получаем одно вхождение - это наш новый файл.

 

Далее ждём, пока он скачается целиком.

Здесь вариантов может быть много:

1)  Ждём пока у файла расширение изменится с .download/.temp/ещё какого-то на любое другое кроме этих

2) Ждём пока у файла будет конкретное расширение, если вы знаете, каким оно должно быть после скачивания.

3) Ждём пока у файла будет ожидаемый размер.

4) Итд.

 

 

Чем меньше вы работаете с окружением, а не с тестируемым приложением тем лучше. В вашем случае, я бы брал ссылку на файл и качал его напрямую питоном сверяя хеш полученного и эталонного файла, обрабатывая исключения стандартной для 3 его питона http библиотекой.


  • 0

#15 Noksa

Noksa

    Активный участник

  • Members
  • PipPip
  • 117 сообщений
  • ФИО:Александр

Отправлено 02 июля 2018 - 08:11

Чем меньше вы работаете с окружением, а не с тестируемым приложением тем лучше. В вашем случае, я бы брал ссылку на файл и качал его напрямую питоном сверяя хеш полученного и эталонного файла, обрабатывая исключения стандартной для 3 его питона http библиотекой.

 

 

 

 

К сожалению, установка заказчика - проверять скачивание файла через сам сайт и сверять его содержимое после этого с БД. 


  • 0

#16 BadMF

BadMF

    Специалист

  • Members
  • PipPipPipPipPip
  • 809 сообщений
  • ФИО:Dmitry Petrov

Отправлено 02 июля 2018 - 08:16

 

Чем меньше вы работаете с окружением, а не с тестируемым приложением тем лучше. В вашем случае, я бы брал ссылку на файл и качал его напрямую питоном сверяя хеш полученного и эталонного файла, обрабатывая исключения стандартной для 3 его питона http библиотекой.

 

 

 

 

К сожалению, установка заказчика - проверять скачивание файла через сам сайт и сверять его содержимое после этого с БД. 

 

ну моё предложение не нарушает установки заказчика.


  • 0

#17 Noksa

Noksa

    Активный участник

  • Members
  • PipPip
  • 117 сообщений
  • ФИО:Александр

Отправлено 02 июля 2018 - 08:28

 

 

Чем меньше вы работаете с окружением, а не с тестируемым приложением тем лучше. В вашем случае, я бы брал ссылку на файл и качал его напрямую питоном сверяя хеш полученного и эталонного файла, обрабатывая исключения стандартной для 3 его питона http библиотекой.

 

 

 

 

К сожалению, установка заказчика - проверять скачивание файла через сам сайт и сверять его содержимое после этого с БД. 

 

ну моё предложение не нарушает установки заказчика.

 

 

Ну как же не нарушает - скачивание файла по ссылке != скачивание файла по клику кнопки


  • 0

#18 BadMF

BadMF

    Специалист

  • Members
  • PipPipPipPipPip
  • 809 сообщений
  • ФИО:Dmitry Petrov

Отправлено 02 июля 2018 - 09:27

 

 

 

Чем меньше вы работаете с окружением, а не с тестируемым приложением тем лучше. В вашем случае, я бы брал ссылку на файл и качал его напрямую питоном сверяя хеш полученного и эталонного файла, обрабатывая исключения стандартной для 3 его питона http библиотекой.

 

 

 

 

К сожалению, установка заказчика - проверять скачивание файла через сам сайт и сверять его содержимое после этого с БД. 

 

ну моё предложение не нарушает установки заказчика.

 

 

Ну как же не нарушает - скачивание файла по ссылке != скачивание файла по клику кнопки

 

Не буду вас переубеждать в этом.

Добавлю лишь, что реализуя проверку локального диска вы получаете совершенно не контролируемую систему, так как вы не знаете о том, что ответил сервер при нажатии на кнопку, были ли в процессе скачивания какие либо проблемы, как долго ждать до завершения скачивания и тому подобные проблемы которые от вас потребуют такое кол-во костылей, что полагаться на результат теста станет невозможно.

 

Вы не понимая проблемы пытаетесь автоматизировать условия её воспроизведения, вместо того, чтобы разобраться в сути и автоматизировать каждую часть процесса необходимым инструментарием.


  • 0

#19 Noksa

Noksa

    Активный участник

  • Members
  • PipPip
  • 117 сообщений
  • ФИО:Александр

Отправлено 02 июля 2018 - 09:42

Добавлю лишь, что реализуя проверку локального диска вы получаете совершенно не контролируемую систему, так как вы не знаете о том, что ответил сервер при нажатии на кнопку, были ли в процессе скачивания какие либо проблемы, как долго ждать до завершения скачивания и тому подобные проблемы которые от вас потребуют такое кол-во костылей, что полагаться на результат теста станет невозможно.

 

Не буду вас переубеждать в этом.

 

Вы не понимая проблемы пытаетесь автоматизировать условия её воспроизведения, вместо того, чтобы разобраться в сути и автоматизировать каждую часть процесса необходимым инструментарием.

 

 

Очень странное у вас мышление, честно говоря.

У меня кейс E2E. А вы мне предлагаете зачем-то тестировать саму возможность скачивания. Похоже это вы не понимаете о чем речь идёт.

 

Как я могу не знать, что ответил мне сервер, нажимая на кнопку, если я после нажатия этой кнопки вполне конкретно ожидаю начала скачивания файла и заведомо знаю, что должно быть внутри него, включая его размер?

 

Покрывать юнит-тестами саму возможность скачивания должен разработчик, это он разработал эту функцию. Не надо переваливать это на плечи автоматизатора.

 

Интересно, а "Как долго ждать до завершения скачивания по клику" чем-то отличается от "Как долго ждать до завршения скачивания по прямой ссылке"?

 Так-то это вообще не константа, может у вас вообще интернета не будет в момент скачивания. 

 

У меня нет ни одной проблемы пока что со скачиванием файлов через клик по кнопке, и я ни секунды лишней не жду.

Все тесты прекрасно могут хоть в 100 потоков параллельно качать файлы в одну и ту же папку и не мешать друг другу.

Если для вас это проблема и нужно городить костыли, то не надо это проецировать на других.

 

А вот если скачивание по кнопке отломается, но будет работать по прямой ссылке, о которой пользователь естественно не знает - что вы будете говорить в этом случае? Что само скачивание работает? Ну так а толку от этого, если пользователь это скачивание запустить не может?

 

Как выше уже писали - проверить что скачивание по кнопке работает - достаточно один раз, если оно вызывается из одного и того же места.


  • 1

#20 BadMF

BadMF

    Специалист

  • Members
  • PipPipPipPipPip
  • 809 сообщений
  • ФИО:Dmitry Petrov

Отправлено 02 июля 2018 - 09:59

Воу-воу! Полегче!

Лично вас, я задеть не хотел.

 

Тяжело просто бороться с поверхностными знаниями. Ну да кто я такой, даже не айтишник... . Мне уже не интересны бои в интернет пространстве. Так что желаю вашим тестам быть безотказными и покладистыми всегда и везде! =)


  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных