Всем привет! Возникла такая потребность как автоматизация пользовательских действий в telegram. По сути это тестирование бота. Необходимо описать некоторое количество тестовых сценарий, а так же протестировать оплату.
Но все тут же упирается в то, что перед входом в вебверсию месенджера, необходимо ввести номер телефона и затем код, который высылается на этот номер телефона. Так же код высылается в твой аккаунт на других устройствах где учетная запись уже авторизована.
Никакой информации в документации о настройках тестовых учетных записей я не нашел.
Может кто-то встречался с подобным? Подскажите как быть? По идеи такая же проблема должна возникать и при авторизации в других соцсетях Vk, facebook, twitter, odnoklassniki.
Да, как решить проблему с вводом login code. Каждый раз когда вызывается браузер, создается новая сессия, в которой приходится авторизироваться через подтверждение login code. Но когда мы просто пользуемся вебверсией, то у нас сохраняется кука для аккаунта и сессия живет, пока мы ей пользуемся. Можно ли как-то в Pytest создать фикстуру, которая будет хранить сессию нужную или типа того?
Фикстура ничего не хранит. Это функция, которая готовит стенд для тестирования. В вашем случае вы можете создать фикстуру для получения уже авторизованного пользователя
Это и есть основное свойство автотестов - быть независимыми друг от друга. Это значит что вы обязаны хотябы авторизоваться перед тестом. Не говоря уже о пересоздании пользователя.
Мой стенд подразумевает наличие precondition - залогиненный пользователь или запуск теста с определенной активной сессией. Разве нельзя сделать такую фикстуру? А есть может пример фикстуры с залагониненным пользователем или вы имеете ввиду, что просто данная фикстура будет содержать в самом начале действия по вводу учетных данных?
Да, фикстура в себе содержит общие для всех/нескольких тестов начальные/конечные шаги. В вашем случае фикстура может начинаться с перехода на страницу логина, затем вводятся учетные данные, пользователь логинится и его редиректит на какую то страницу. Вот куда он пришел после логина - так и назовите фикстуру. Потом при ее вызове вы будете понимать что там в ней произошло. Ну и в фикстуре верните класс страницы, на которую пришел пользователь либо ретурном, либо используйте yield_fixture.
Конкретно в моем случае, мне нужно тестить бота в веб версии телеграм. С вероятностью 99% тестировщики телеграм протестировали всю кросбраузерность и т.д. Поэтому я могу взять любой браузер (я взял chrome) и из selenium импортнуть Options для данного браузера
from selenium.webdriver.chrome.options import Options
Затем нам нужно настроить chrome на сохранение кеша и указать путь, где он будет храниться.
Как вы можете быть уверенны что бажина не в UI клиенте, а у вас? Откуда набрать кучу тестовых юзеров - каждому ведь нужна своя симка? А если юзер один, то как паралелить тогда? Как сбрасывать состояние бота?
Зачем вам вообще браузер для тестирования бота? Этих юаек для телеграмма - уже больше 9000 и официальных и неофициальных, по какому принципу тогда выбирать? На CI системах прийдется устанавливать и питон, и селениум стенделон, и хром драйвер, и хром, а еще и обновлять это все. Запуск получается тяжелым и медленным.
Все ваши проблемы можно решить просто эмуляцией событий от телеграмм сервера, и чтением состояния бота и проверки что он корректно реагирует на события сервера. Тогда все скатывается в граммотный моккинг, и эдакое подобие юнит тестов.
Боты это не сложно. Городить селениум там где он не нужен - вот это сложно
Я попробую отбиться от ваших вопросов, но я конечно понимаю, что вы правы скорее всего. Я просто пока не секу в другом тестировании, кроме как selenium и page object (и то на уровне нуба). Может вы мне сможете показать простой пример тестсьюита, где например ожидаемый результат одного теста используется как предусловия следующего теста.
Например 1) пользователь вошел в телеграм - ожидаемый результат - он залогинен (проверить можно как угодно), 2) пользователь залогинен - пользователь добавляет любого бота через отправку команды /start - ожидаемый результат - бот появляется в списке conversation слева. 3) пользователь залогинен, бот с в списке conversation слева - пользователь удаляет бота из списка conversation через меню бота - ожидаемый результат - бот удален.
Попробую на ваши вопросы ответить)
ui телеграма тестирует телеграм. Я пишу тесты для функционального end to end тестирования бота.
нам не нужно куча пользователей. Достаточно иметь 3-5 пользователей, чтобы проверить весь функционал очень быстро (обычно боты телеги не обладают таким большим функционалом). Номера можете брать тут для телеги 3 рубля номер.
Состояние бота сбрасывается удаением бота и конверсейшн, так же можно удалять пользователя из базы бота. (мне кажется я не правильно понял вопрос).
юайки для телеграмм, вы имеете ввиду приложения и веббраузеры. Нас не волнует как работает приложение приложение. Мы тестируем функционал бота, нам нужно просто выполнить юзеркейсы от точки А до точки Б (например оплата).
Мы используем CI TeamCity, бот на питоне и так. Собирать в проекте ничего не надо. Мы просто ловим тригер о том что что-то попало на гит в такую-то ветку и через ssh запускаем тесты.
поставить библиотеку slenium не проблема
следить за дравйвером гемор, согласен.
ну поддерживать и обновлять придется в любом случае.
Он прав.
Действительно выдергивай куку сессии webDriver.manage().getCookieNamed("JSESSIONID"), храни и пользуйся.
Только не заканчивай сессию (do not log out), или она, кука, умрет.