Каждый релиз приходится по тысячу раз кликать на одни и те же кнопки? Каждый раз тестируя новые фичи приходится проходить одни и те же сценарии вновь и вновь? Как создать себе помощника, который облегчит рутину? Ответ внутри.
Главная идея.

Представьте, что вы открываете браузер, чтобы протестировать новую фичу. Но прежде. чем добраться до новой фичи, вам нужно создать нового пользователя, авторизоваться, заполнить профиль, выполнить какие-то другие действия, чтобы добраться до новой фичи. Все эти действия повторяются из раза в раз и было бы хорошо их пропустить. Можно создать некий инструмент, который бы позволял нажать на кнопку или запустить команду, и выполнить какие-то действия в браузере за нас. Как это выглядит в итоге: Открывается браузер, мы нажимаем на кнопку «Зарегистрировать пользователя», инструмент сам регистрирует нового пользователя и отдает управление нам обратно, чтобы мы могли продолжить тестирование.

Данный инструмент не является набором тестов, в котором есть всевозможные проверки, а скорее представляет собой набор selenium скриптов для упрощения рутинных действий. В отличие от подобных готовых программ для записи сценариев, данный инструмент является более стабильной средой (на сколько это возможно так говорить в отношении selenium) и несет в себе всю силу selenium webdriver и языка python.

Такие точечные скрипты дают большую свободу в ручном тестировании: мы можем запускать данные мини-сценарии и решать что мы хотим делать дальше.

Пример сценария на примере интернет-магазина.
  1. Мы открываем браузер.
  2. Мы нажимаем на кнопку «создать пользователя и авторизоваться» в нашем инструменте
  3. Инструмент сам заполняет поля в браузере, генерирует все данные, такие как email, имя, адрес и все остальное, что есть в форме. Далее нажимает кнопку «авторизоваться», заполняет данные в форме и авторизуется в системе
  4. Мы нажимаем на кнопку в инструменте «Найти нужный товар»
  5. Инструмент делает запрос в базу данных, выбирает нужны товары и открывает нужную ссылку в браузере с найденным товаром.
  6. Мы выбираем товар или несколько товаров, которые мы хотим заказать, добавляем в корзину.
  7. Мы нажимаем на кнопку в инструменте «Создать заказ»
  8. Инструмент заходит в корзину, нажимает на кнопку «оформить заказ», далее заполняет форму доставки, нажимает на кнопку «Оплатить» и далее останавливается на странице выбора способа оплаты.
  9. Мы выбираем способ оплаты и оплачиваем товар.

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

Благодаря автоматизированному помощнику мы можем сэкономить время на многих рутинных действиях.

Как это работает?

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

Примеры реализаций.

Можно реализовать как консольный вариант с ipython, так и вариант полноценного desktop-приложения с кнопочками на pyQt. В этой статье я рассмотрю консольный вариант с ipython. Описание примера с кнопочками здесь.

Почему Ipython?

Потому что это удобная, приятная консолька, в ней есть история и «tab» и она умеет стартовать с каким-то запущенным скриптом.

Что под капотом?

Рассмотрим подробнее что из себя это все представляет внутри:

Есть набор функций, с которыми мы можем оперировать, например, таких:

def search(): 
    google.search('funny cats')

def search_with_query(search_query): 
    google.search(search_query)

Все вспомогательные сценарии, как конкретно что-то делать реализованы в «кишках» инструмента. Поэтому тут остается достаточно простой код, который легко читается.

Осталось их только импортировать в каком нибудь файле, например start.py и можно работать.
from scenarios.search_google import search, search_with_query
Три, два, один… Запуск!

Запускаем ipython с нашим стартовым скриптом:

ipython -i start.py

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

In [1]: search()

или передать какой-то параметр в другую функцию:

In [1]: search_with_query('funny dogs')

В браузере выполнится действие и, когда функция отработает, то управление вернется к нам обратно.

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

start_time = raw_input('Время начала [14]: ') or 14

Весь исходный код можно посмотреть тут

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

Please follow and like us:
error

Оставить комментарий

avatar