Skip to content

Instantly share code, notes, and snippets.

@yashaka
Last active May 15, 2020 14:04
Show Gist options
  • Select an option

  • Save yashaka/55e47e730cee6734ec35c03b2fa46947 to your computer and use it in GitHub Desktop.

Select an option

Save yashaka/55e47e730cee6734ec35c03b2fa46947 to your computer and use it in GitHub Desktop.
Программа Курса "Искусство Автоматизации Тестирования с Selene + Python"

Программа курса "Искусство Автоматизации Тестирования с Selene + Python"

  • Введение в Selene
    • Быстрый Старт. Исходные условия, зависимости, первые шаги и документация
    • Selene в действии
    • Задание 1: Selene и CSS
      • "Строгие, но хрупкие" или "слабые, но стабильные" локаторы?
      • Локаторы, автоматически сгенерированные в инспекторе, или подобранные вручную?
      • Когда выносить локаторы в отдельные переменные и/или классы?
      • Как найти элемент из списка однотипных элементов по нужному тексту его внутреннего элемента (CSS)?
      • Структурная информация в именах тест-сьюта и тестов, которая не несет пользы с точки зрения тестирования
      • Установка пути к chromedriver в коде?
      • Хрупкие строгие локаторы
        • Избыточность в путях - привязка к тегу
        • Избыточность в путях - привязка к точному пути
        • Привязка к полному значению аттрибута class либо его начала или конца
        • Хрупкие гибкие локаторы. Привязка к частичному значению атрибута class
      • Построение локатора с помощью менее читабельных и понятных аттрибутов либо их значений
      • Слишком краткие и потому менее информативные, неочевидные локаторы
      • Неконсистентные селекторы
    • Задание 2: Selene и XPATH
      • Как в XPATH искать по одному CSS классу а не по всему значению соответствуеющего аттрибута?
      • Как найти элемент из списка однотипных элементов по нужному тексту его внутреннего элемента (XPath)
    • Задание 3: Рефакторинг сложных XPath-селекторов
      • Где лучше сохранить вспомогательные функции для построения сложных XPath-селекторов? (Стратегия сохранения функций)
        • Важность имен
      • Какую именно часть длинного сложного XPath селектора стоит выносить в отдельные функции, а какие нет?
      • Избыточность имен
      • Неясные неполные имена вспомогательных функций
    • Задание 4: XPath DSL [не обязательное]
  • I Начало. Проверка Концепции
    • Шаблон первого теста
    • "Быстрые в реализации" тесты. Читабельность, очевидность и лаконичность
    • "Быстрые в выполнении" тесты. Уровень сложности тестовых данных
    • Более быстрый ввод текста с помощью Javascript
    • Проверки (Assertions)
    • Полнота проверок
    • "Флоу" End-to-End-теста. Упрощенный тест-план
    • Задание 5: POC-тест
      • Изначальные условия и приоритеты
      • Изучение функционала и основных сценариев пользователя
      • Уточнение приоритетов. Поиск и игнорирование низкоприоритетных операций
      • Определение сценария для автоматизации
      • Декомпозиция локаторов. Альтернатива нечитабельным XPath
      • Оптимизация локаторов по скорости выполнения поиска
      • Типичная проблема: локатор верный но элемент "не тот"
      • Типичная проблема: Локатор находит невидимого "клона" элемента. Недостаточно строгие локаторы для однотипных элементов
      • Работа с "клонами": фильтр элемента по видимости
      • Подбор уникального селектора через сужение поиска до поиска внутри родителя с уникальными атрибутами
      • Относительные локаторы, менее лаконичные, но более информативные, и следовательно очевидные и читабельные
      • Подсказываем тест-логику с помощью подбора более информативных тестовых данных
      • Неявные проверки в End-to-End-тестах
      • Проверяем "все что осталось" а не только "то что изменилось"
      • Акцент на функциональных проверках
      • Информативные локаторы
      • Типичная проблема: элемент не готов к действию
      • Базовое структурирование теста
      • Комментарии как оглавления
      • Самодокументируемый код
      • Именование Тестов
      • Ревью покрытия. Учитываем "побочные эффекты". Пропущенные операции
  • II Пересмотр. Рефакторинг Теста - Часть 1
    • Принципы DRY и KISS
      • DRY и структурирование кода с помощью сложных конструкций языка. KISS против
      • DRY для более легкого набора повторяющегося кода с помощью переменых/функций
      • Переменные или функции?
      • Переменные. Refactoring>Extract>Variable
      • Анализ частей повторяющегося кода с точки зрения вероятности изменений
      • Переменные в тест-методе или за его границами?
      • Скоуп определения абстракций
      • Refactoring>Extract>Field
      • Переменные с локаторами против переменных с элементами
      • Функции?
      • Refactor>Extract>Function. Функции с "зашитыми данными" (hardcoded data)
      • Функции с параметрами
      • Функции со встроенными проверками?
      • Функции + переменные. Вынесение "всех локаторов" в переменные?
      • Самодокументируемый код - функции вместо комментариев
      • Послабление KISS при сокрытии сложности в реализациях функций
      • KISS и тест-шаги: переменные/функции в тестах "ради полной читабельности" против "ради DRY"
    • Задание 6: Примени принцип DRY
    • Задание 7: Примени принцип KISS ради читабельности
    • Задание 8: Найди баланс между KISS и DRY
    • Сокрытие технических деталей. Контекст
    • Задание 9: Скрой настройку базового URL
    • День Независимости Тестов
      • Больше тестов
      • Независимые тесты через упрощение тест-логики
      • Независимые тесты с помощью контроля их окружения через управление данными в базе
      • Предпочтение явным предусловиям следуя KISS перед их сокрытием для DRY
    • Задание 10: Допиши тест на фильтрование задач и сделай тесты независимыми следуя принципу DRY
    • Задание 11: Упрости реализацию независимости тестов следуя принципу KISS используя явные пред-условия
  • III Закалка. Расширение покрытия. Атомарные тесты
    • Задание 12: Расширь покрытие действий на фильтре "All"
  • IV Структура и переиспользование. Рефакторинг Тестов - Часть 2
    • Код с Запашком: Большой Модуль/Класс
    • Ретроспектива на базовые принципы в начале построения автоматизации
    • Рефакторинг: Извлечение модуля/класса
      • Cтруктура
      • Замена наследования композицией
      • Имена в контексте
    • Снова о DRY и переиспользовании кода
    • Шаблон PageObject
    • Задание 13: Расширь покрытие действий на фильтре "Active" и "Completed"
    • Виджеты (Применяем PageObject к компонентам на странице)
    • Задание 14: Выдели виджет представляющий текстовую метку редактируемую по двойному клику
  • Общие частые вопросы и ответы
    • Тестовая логика
    • Рекомендации и общепринятые договоренности в подборе имен
      • Рекоммендации к улучшению читабельности имен
        • Шаблон построения имени функции или метода
        • Шаблон построения имени переменной
        • Использование общепринятой терминологии
        • Не злоупотреблять сокращениями
        • Терминология в контексте
        • Говорим на языке местных
        • Недвусмысленность
        • Лаконичность
        • Не повторять то, что уже задано контекстом
        • Простота
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment