[Software-Testing.RU] Программирование на Java для тестировщиков. 2016 (Алексей Баранцев)
Программирование для тестировщиков
Тренер: Баранцев Алексей
Этот курс предназначен для обучения тестировщиков программированию на языке Java
Да, это курс именно для тестировщиков. Обучение программированию не сводится только к изучению языка программирования. Построение правильной архитектуры, использование фреймворков и библиотек, владение инструментами разработки и отладки -- это тоже часть “умения программировать”. Поэтому в этом курсе детально рассматриваются именно те возможности языка и вспомогательных библиотек, которые наиболее востребованы при разработке автотестов, в том числе при тестировании веб- и windows-приложений через пользовательский интерфейс.
Изучаемый материал будет демонстрироваться на едином сквозном примере -- мы будем разрабатывать на языке Java автоматизированные тесты для веб-приложения, используя Selenium WebDriver. Начав с простого теста, записанного “рекордером”, мы будем постепенно усложнять архитектуру тестового набора, добавлять и усиливать проверки в тестах, дополнять тесты генераторами тестовых данных. Основной акцент будет сделан не на алгоритмы, а на изучение различных полезных библиотек и фреймворков, а также шаблонов проектирования, позволяющих организовать код автоматизированных тестов таким образом, чтобы его было легко модифицировать и расширять.
Но одним примером мы не ограничимся, для закрепления материала мы в течение курса построим 'в едином стиле' несколько проектов с тестами для приложений разного типа, научимся тестировать приложения через веб-интерфейс, пользовательский интерфейс Windows, интерфейс доступа к базам данных, сетевые интерфейсы (почта, HTTP, веб-сервисы).
И напоследок научимся делать тесты на 'естественном' языке Gherkin. Да, не удивляйтесь, чтобы делать тесты на 'естественном' языке -- нужно уметь программировать
1. Основы программирования
Большинство учебников и курсов по программированию начинаются с написания простейшей программы, которая выводит на консоль слова “Hello, world!”. Мы не станем нарушать эту традицию, потому что первым делом нужно подготовить среду разработки и убедиться, что всё установлено и настроено правильно. Попутно мы научимся использовать сервис GitHub для хранения исходного кода проекта.
2. Двухуровневая архитектура тестового набора
Затем мы сразу совершим “прыжок” -- вместо того, чтобы постепенно усложнять свою первую примитивную программу, мы запишем “рекордером” готовый тест для веб-приложения, перенесём его в среду разработки, подключим все необходимые вспомогательные библиотеки, а потом будем его улучшать.
Автотесты “системного” уровня (в отличие от “unit-тестов”) удобно разделить на два слоя -- 1) собственно тесты, 2) код, ответственный за взаимодействие с тестируемой системой, причём вторая часть, как правило, является более сложной технически.
Мы научимся создавать такую двухуровневую архитектуру путём плавной трансформации ранее созданных при помощи “рекордера” простых одноуровневых тестов, и познакомимся с понятием “рефакторинга” кода.
На этом же этапе мы познакомимся с базовыми возможностями тестового фреймворка TestNG.
А после того, как двухуровневая архитектура будет выстроена -- добавим пару новых тестов уже без использования рекордера.
3. Управление потоком выполнения кода: условный переход
Условный переход (if-then) -- это одна из основных конструкций языка программирования, позволяющая программе вести себя по разному в разных условиях.
Мы научимся использовать эту конструкцию для того, чтобы менять поведение программы в зависимости от ситуации (есть на странице тестируемого веб-приложения нужный элемент или нет) и от входных данных (определено значение некоторой переменной или нет), для оптимизации тестов (уже попали на нужную страницу приложения или нет) и для повышения их гибкости и надёжности.
4. Коллекции и циклы
Вторая основополагающая конструкция языка программирования -- это цикл, то есть многократное выполнение некоторого фрагмента кода. В тестах она может встречаться, например, при генерации большого количества тестовых данных.
Однако чаще циклы используются при работе с “коллекциями” -- списками и множествами объектов какого-то типа. Мы научимся строить и модифицировать коллекции, сравнивать и сортировать их, а также реализовывать в тестах сложные проверки, в которых участвуют коллекции объектов.
5. Работа со строками
Строки -- один из самых широко распространённых типов данных, с которым приходится иметь дело в тестах, особенно если тестирование выполняется через пользовательский интерфейс. Конечно, эти строки могут представлять собой числа или даты или объекты какого-то другого типа, но из тестируемого приложения мы получаем их именно в виде строк, так что перед дальнейшим использованием их ещё нужно правильно преобразовать в нужный тип данных.
Мы научимся сравнивать строки, проверять их на соответствие регулярным выражениям, преобразовывать строки в числа и обратно, а также генерировать строки, состоящие из случайного набора символов.
А затем доработаем тесты -- сделаем их параметризованными и свяжем их с генераторами тестовых данных. Такой подход называется Data Driven Testing (DDT).
6. Работа с файлами
Файлы -- это место, где можно хранить тестовые данные. Поэтому в контексте разработки автотестов важно уметь читать данные из файлов разного формата. С другой стороны, создавать тестовые данные тоже не обязательно вручную, можно написать программу, которая их будет генерировать и сохранять в файл нужного формата.
Мы научимся читать данные из файлов в формате CSV, XML, JSON, а также писать данные в файл в этих форматах.
7. Работа с базами данных
Подавляющее большинство многопользовательских приложений (к которым относятся и веб-приложения), а также многие однопользовательские приложения, используют базы данных для хранения информации. Когда пользователь вводит какую-то информацию через интерфейс приложения, она после некоторой обработки попадает в базу данных и хранится там до тех пор, пока она не потребуется для работы того же самого или или какого-то иного приложения. При тестировании часто бывает удобно проверить, правильно ли сохранилась информация в базе данных. Поэтому многие тестировщики, даже не умея программировать, достаточно хорошо владеют языком запросов к базе данных SQL.
Сначала мы научимся пользоваться технологией доступа к базам данных, которая позволяет выполнять привычные SQL-запросы и анализировать полученный ответ как таблицу. Затем мы освоим более современную технологию объектно-реляционных преобразований.
8. Сетевое программирование: протоколы прикладного уровня
С одной стороны, это занятие будет повторением пройденного материала. Мы построим новый тестовый набор с двухуровневой архитектурой для нового тестируемого приложения. Однако всё взаимодействие с тестируемым приложением будет происходить в обход пользовательского интерфейса.
В этом занятии будут рассмотрены механизмы работы с сетевыми протоколами для отправки и получения почты POP3 и SMTP, протоколом для отправки и получения файлов FTP, протоколом для удалённого выполнения команд Telnet, а также традиционным протоколом, используемый для взаимодействия с веб-приложениями HTTP.
Для веб-приложений характерным случаем является использование электронной почты -- отправка ссылки для подтверждения регистрации, восстановление пароля, оповещения о каких-либо событиях. Для тестирования такого рода функциональности мы научимся работать с почтовым сервером из автоматизированных тестов: принимать и отправлять почту, анализировать содержимое почтовых сообщений. Настройка приложения, находящегося на удалённом сервере, может потребовать умения загружать туда файлы по протоколу FTP.
9. Сетевое программирование: удалённые программные интерфейсы
И ещё одно занятие-повторение, в котором мы опять построим новый тестовый набор для нового учебного приложения, чтобы закрепить навык создания типовой двухуровневой архитектуры.
А затем научимся работать с удалёнными программными интерфейсами SOAP и REST. Технология SOAP чаще используется в крупных “промышленных” приложениях, а технология REST более характерна для современных веб-сервисов.
10. Тестовые фреймворки и инфраструктура
Последнее занятие будет посвящено рассмотрению альтернативных тестовых фреймворков, в том числе инструмента Cucumber для разработки тестов на 'естественном' языке Gherkin и инструмента Robot Framework для разработки тестов в стиле Keyword Driven Testing.
Кроме того, мы научимся запускать тесты на сервере непрерывной интеграции Jenkins и генерировать красивые отчёты при помощи инструмента Allure.
Содержание складчины (файлы и папки)
01 Основы программирования
01 Обзор языков программирования и место Java в общей картине мира.mp4 [49m 859k 956]
02 Установка и настройка Java SDK.mp4 [28m 34k 950]
03 Первая работающая программа на языке Java.mp4 [15m 314k 552]
04 Хранение кода Git и GitHub.mp4 [23m 855k 538]
05 Gradle и другие сборщики.mp4 [34m 711k 973]
06 Среда разработки IntelliJ IDEA.mp4 [25m 925k 710]
07 Классы и пакеты, файлы и директории.mp4 [17m 912k 835]
08 Фигурные скобочки и структура программного кода.mp4 [32m 694k 273]
09 Выражения и операции.mp4 [26m 862k 174]
10 Переменные и значения.mp4 [24m 904k 187]
11 Типы переменных и значений.mp4 [13m 210k 533]
12 Среда разработки. Запуск программы режиме отладки.mp4 [13m 606k 97]
13 Функции.mp4 [28m 74k 969]
14 Классы и объекты.mp4 [34m 620k 79]
15 Методы. Функции, ассоциированные с объектами.mp4 [17m 770k 547]
pluginfile.pdf [2m 497k 943]
Thumbs.db [35k 840]
ДЗ.txt [1k 862]
Ссылки на инструменты, упомянутые в лекциях.txt [390]
02 Двухуровневая архитектура тестового набора
01 Немного теории что такое автотесты.mp4 [18m 559k 415]
02 Gradle подключаем зависимости от дополнительных библиотек.mp4 [20m 262k 209]
03 Делаем первый тест, используя фреймворк для запуска тестов TestNG.mp4 [18m 957k 737]
04 Среда разработки IDEA полезные клавиатурные сочетания.mp4 [15m 431k 313]
05 Делаем тест для веб-приложения, используя драйвер Selenium.mp4 [32m 377k 386]
06 Фикстуры инициализация и зачистка.mp4 [15m 565k 353]
07 Рефакторинг улучшаем читаемость кода, выделяем вспомогательные методы.mp4 [32m 141k 269]
08 Создаём общий базовый класс для тестов, где можно хранить методы, общие для всех тестов.mp4 [43m 595k 178]
09 Заменяем наследование на делегирование и создаём двухуровневую архитектуру.mp4 [53m 168k 904]
10 Выделяем специализированные классы-помощники.mp4 [41m 856k 281]
11 Создаём общий базовый класс для классов-помощников.mp4 [31m 632k 137]
12 Делаем новый тест без использования рекордера.mp4 [22m 402k 35]
ДЗ.txt [4k 190]
5.0 Подготовка к разработке тестов для веб-приложений
5.1.png [50k 269]
addressbook.zip [599k 111]
Видеоинструкция по установке учебного приложения.mp4 [6m 10k 635]
Подготовка к разработке тестов для веб-приложений.txt [1k 518]
Доп. материалы
Thumbs.db [6k 656]
Ссылки.txt [247]
Фрагмент курса. selenium_start_02_02_xpath_and_css.mp4 [15m 19k 460]
03 Управление потоком выполнения кода, ветвление
01 Проверка условий при помощи конструкции if-then-else.mp4 [32m 601k 141]
02 Полная форма if-then-else. Неполная форма if-then. Вложенные проверки. Свёртка вложенных проверок.mp4 [27m 870k 967]
03 Запуск тестов в разных браузерах.mp4 [41m 536k 233]
04 Сравнение объектов при помощи оператора == и метода equals.mp4 [21m 131k 675]
05 Оптимизация заполнения форм - оставляем дефолтные значения в полях.mp4 [11m 890k 152]
06 Оптимизация заполнения форм - оставляем не изменяющися значения в полях.mp4 [16m 488k 494]
07 Перехват исключений.mp4 [31m 198k 60]
08 Заполнение форм с почти одинаковым набором полей.mp4 [41m 714k 939]
09 Ленивые действия.mp4 [28m 571k 154]
10 Проверка и обеспечение выполнения предусловий.mp4 [28m 496k 31]
Thumbs.db [52k 224]
ДЗ.txt [791]
Ссылки.txt [362]
04 Коллекции и циклы
01 Циклы.Многократные повторения похожих действий.mp4 [51m 83k 937]
02 Коллекции. Наборы элементов.mp4 [34m 776k 270]
03 Количество элементов в коллекции.mp4 [27m 744k 163]
04 Выбор элемента списка по порядковому номеру.mp4 [11m 942k 973]
05 Формирование коллекции.mp4 [31m 490k 430]
06 Сравнение коллекций.mp4 [32m 926k 45]
07 Множества. Неупорядоченные коллекции.mp4 [44m 139k 864]
08 Поиск максимального элемента в коллекции.mp4 [26m 773k 743]
09 Лямбда-выражения (анонимные функции) и элементы функционального программирования.mp4 [36m 200k 646]
10 Сортировка списков.mp4 [30m 376k 737]
Thumbs.db [26k 624]
ДЗ.txt [411]
05 Улучшение кода тестов. Работа со строками
01 Как правильно запускать браузер.mp4 [40m 246k 917]
02 Улучшение кода тестов - ещё немного реструктуризации кода.mp4 [24m 842k 56]
03 Улучшение названий методов.mp4 [22m 696k 33]
04 Fluent-интерфейсы.mp4 [24m 434k 254]
05 Повсеместное использование уникальных идентификаторов объектов.mp4 [62m 293k 906]
06 Hamcrest - улучшение внешнего вида проверок.mp4 [43m 957k 983]
07 Кеширование результатов длительных операций.mp4 [19m 264k 647]
08 Хеширование и предварительные проверки.mp4 [24m 583k 840]
09 Способы построения сложных локаторов.mp4 [36m 169k 629]
10 Режем строки (и немного про регулярные выражения).mp4 [31m 271k 360]
11 Клеим строки - метод обратных проверок.mp4 [37m 257k 910]
Thumbs.db [27k 136]
ДЗ.txt [1k 692]
Ссылки.txt [236]
06 Работа с файлами
01 Пути к файлам и директориям.mp4 [50m 974k 958]
02 Генератор тестовых данных, запись данных в файл.mp4 [35m 319k 644]
03 Анализ опций командой строки при запуске генератора данных.mp4 [27m 678k 492]
04 Параметризация тестовых методов.mp4 [33m 13k 37]
05 Загрузка тестовых данных из файла.mp4 [26m 29k 818]
06 Формат XML.mp4 [45m 223k 403]
07 Формат JSON.mp4 [37m 386k 836]
08 Автоматическое закрытие файлов после использования.mp4 [13m 24k 752]
09 Конфигурационные файлы для описания тестовых наборов.mp4 [27m 234k 239]
10 Описание конфигурации тестового стенда.mp4 [40m 821k 427]
11 Протоколирование (лог-файлы).mp4 [51m 987k 663]
Thumbs.db [34k 304]
ДЗ.txt [973]
07 Работа с базами данных
01 Драйвер базы данных. Получение данных из БД.mp4 [41m 41k 230]
02 Object Relational Mapping (ORM).mp4 [78m 676k 986]
03 Условия отбора данных.mp4 [32m 818k 190]
04 Сравнение данных, загруженных из БД.mp4 [43m 306k 11]
05 Отключаемые проверки UI.mp4 [39m 205k 663]
06 Связи между объектами.mp4 [54m 145k 321]
Thumbs.db [14k 848]
ДЗ.txt [909]
08 Сетевое программирование. Протоколы прикладного уровня
01 Установка нового учебного приложения MantisBT.mp4 [20m 812k 829]
02 Подготовка проекта для тестирования MantisBT.mp4 [31m 688k 333]
03 Прямое взаимодействие с сервером по протоколу HTTP.mp4 [47m 281k 826]
04 Ленивая инициализация помощников.mp4 [26m 577k 883]
05 Передача файлов на удалённую машину по протоколу FTPmp4.mp4 [40m 185k 394]
06 Получение почты на встроенный в тесты почтовый сервер.mp4 [70m 600k 944]
07 Получение почты на внешний почтовый сервер.Создание пользователей на внешнем почтовом сервере по протоколу.mp4 [0]
ДЗ.txt [1k 520]
Ссылки.txt [312]
09 Сетевое программирование - удалённые программные интерфейсы
01 Немного теории про Remote API.mp4 [42m 145k 969]
02 SOAP - простой пример.mp4 [38m 288k 788]
03 SOAP - взаимодействие с MantisBT.mp4 [78m 54k 936]
04 REST - взаимодействие с Bugify.mp4 [74m 751k 1]
05 RestAssured - использовать или нет.mp4.mp4 [23m 936k 261]
06 REST - взаимодействие с GitHub.mp4 [37m 288k 593]
ДЗ.txt [2k 316]
10 Тестовые фреймворки и инфраструктура
01 Сервер непрерывной интеграции.mp4 [64m 293k 620]
02 Удалённый запуск браузера (Selenium Server).mp4 [50m 306k 395]
03 Конфигурационное тестирование (Selenium Grid).mp4 [63m 493k 873]
04 Генерация отчётов при помощи Allure.mp4 [82m 773k 17]
05 Keyword Driven Testing и инструмент Robot Framework.mp4 [63m 350k 665]
06 Behaviour Driven Testing и инструмент Cucumber-JVM.mp4 [65m 194k 633]
ДЗ.txt [419]
Ссылки.txt [400]
Объем: 3,15Гб.