камплюхтеры
August 29, 2021

💭 О тестовых фреймворках

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


❓ Что ты такое?!

  • Что такое Тестовый Фреймворк? Это набор тулзов и библиотек для автоматизации тестирования.
  • Что делает Тестовый Фреймворк? Запускает тесты, задаёт единый формат тестов, репортит результаты, удобно определяет тестовые данные (константы, датасетовы и т.д.) и объединеняет библиотеки специфичные для тестирования конкретного продукта.
  • Какие профиты от Тестового Фреймворка? Тестовый фреймворк (хорошо спроектированный, конечно) увеличивает скорость имплементация тестов, увеличивает переиспользование кода, упрощает поддержку тестов, делает тесты более читаемыми, унифицирует репортинг и упрощает запуск тестов на различных окружениях.

🔬 Слои.

Шрек: Огры как лук. Осёл: Воняют? Шрек: Да нет. Осёл: Доводят до слёз? Шрек: Да что ты!.. Осёл: О, наверное, чернеют и скукоживаются на солнце. Шрек: Нет! Многослойные. Лук многослойный, я тоже — слой за слоем. Ты усёк?! Мы многослойные!

Структуру фреймворка можно разделить на 3 слоя:

Core Layer

Основа любого тестового фреймворка.

Содержит основные и самые низкоуровневые классы, методы и функции, которые не зависят от тестируемого приложения. Например, Rest или http клиенты, коннекторы к базам данных, разнообразные парсеры, логгеры, репортеры и проч.

В идеале, этот слой может (или даже должен) храниться отдельно от остальных слоёв и иметь лимитированный доступ для изменений.

Data Layer

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

Business Layer

Конкретная имплементация конкретной бизнес-логики с использованием Core Layer. Т.е. если у нас в Core Layer, скажем, есть метод get_request(…) выполняющий GET запрос, то в Business Layer мы его оборачиваем в другой метод, который делает более конкретный GET запрос c конкретными данными к конкретному приложению.

☠ Распростарнённые ошибки.

Изобретение велосипедов :)

Ярчайший пример этой ошибки (по крайней мере в Python) применительно к тестовым фреймворкам — написание собственного логгера. Не знаю как там в Java (подозреваю, что так же), но у нас в Python есть крутейшая библиотека logging, которая покрывает нужды в 99.9% случаев. В оставшемся 0.1% вы просто не разобрались как её использовать ;)

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

One-file framework

В какой-то момент вам даже может показаться, что это хорошая идея иметь всё необходимое “под рукой”, в одном файле. Не нужно ничего импортировать, не нужно держать открытыми сразу несколько файлов. Живи да радуйся! Но, уверяю вас, вам так будет казаться только пару первых дней. Как только размер вашего кода превысит условные 500 строк вы больше всего на свете захотите удобную структуру файлов с импортами и прочим.

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

Хардкод

Бич всех начинающих. “Я сейчас добавлю здесь вот это значение, а потом обязательно поменяю”. Нет, не поменяете. Во всяком случае без подсказки. Выносите все жёстко заданные значения в отдельные *.ini, *.yaml, *.txt файлы!

Хардкод уменьшает поддерживаемость, удобство переиспользования, делает ваш код менее гибким (например, может затруднить запуск кода против разных окружений). Это неудобно, ненаглядно, непрофессионально!

🍀 Вместо заключения

Писать фреймворки интересно. Да, сложно; да, иногда непонятно куда кинуться; да, поначалу вопросов больше, чем ответов. Но профиты от написания перевешивают все возникающие проблемы. Однажды вы нажмёте одну кнопку и спокойно пойдёте домой, а тесты будут бегать сами и проверять приложение за вас. Это ли не счастье для лентяя? 😉


🔗 Useful links

» Most Popular Test Automation Frameworks With Pros And Cons Of Each

» Scriptless Test Automation Framework: Tools And Examples

» Test Automation Frameworks

» Why Do We Need Framework For Test Automation?

» 10-Step Automation Testing Process: How To Start Automation Testing In Your Org

» How To Choose The Best Automation Testing Tool

» Top 10 Test Automation Strategies And Best Practices