Файл: Обеспечения Базовый курс (3е издание) Версия книги 2 от 17. 04. 2023.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 07.11.2023
Просмотров: 868
Скачиваний: 31
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
3.2.
Особенности автоматизированного тестирования
3.2.1.
Необходимые знания и навыки
Во множестве источников, посвящённых основам автоматизации тестирова- ния, можно встретить схемы наподобие представленной на рисунке 3.2.a — то есть автоматизация тестирования представляет собой сочетание программирования и тестирования в разных масштабах (в зависимости от проекта и конкретных задач).
Рисунок 3.2.a — Сочетание программирования и тестирования в автоматизации тестирования
Отсюда следует простой вывод, что специалист по автоматизации тестиро- вания должен сочетать в себе навыки и умения как программиста, так и тестиров- щика. Но этим перечень не заканчивается: умение администрировать операцион- ные системы, сети, различные серверы, умение работать с базами данных, пони- мание мобильных платформ и т.д. — всё это может пригодиться.
Но даже если остановиться только на навыках программирования и тестиро- вания, в автоматизации тоже есть свои особенности — набор технологий. В клас- сическом ручном тестировании развитие происходит постепенно и эволюционно — проходят годы и даже десятилетия между появлением новых подходов, завоёвы- вающих популярность. В программировании прогресс идёт чуть быстрее, но и там специалистов выручает согласованность и схожесть технологий.
В автоматизации тестирования ситуация выглядит иначе: десятки и сотни технологий и подходов (как заимствованных из смежных дисциплин, так и уникаль- ных) появляются и исчезают очень стремительно. Количество инструментальных средств автоматизации тестирования уже исчисляется тысячами и продолжает неуклонно расти.
Потому к списку навыков тестировщика можно смело добавить крайне высо- кую обучаемость и способность в предельно сжатые сроки самостоятельно найти, изучить, понять и начать применять на практике совершенно новую информацию из, возможно, ранее абсолютно незнакомой области. Звучит немного пугающе, но одно можно гарантировать: скучно не будет точно.
О нескольких наиболее распространённых технологиях мы поговорим в главе «Технологии автоматизации тестирования»
{269}
Автоматизация тестирования
Програм- мирование
Програм- мирование
Тестиро- вание
Тести- ро- вание
Тестиро- вание
Прог- рамми- рование
Особенности тест-кейсов в автоматизации
Тестирование программного обеспечения. Базовый курс.
© EPAM Systems, 2015–2023
Стр: 265/301
3.2.2.
Особенности тест-кейсов в автоматизации
Часто (а в некоторых проектах и «как правило») автоматизации подвергаются тест-кейсы, изначально написанные простым человеческим языком (и, в принципе, пригодные для выполнения вручную) — т.е. обычные классические тест-кейсы, ко- торые мы уже рассматривали подробно в соответствующей главе
{120}
И всё же есть несколько важных моментов, которые стоит учитывать при раз- работке (или доработке) тест-кейсов, предназначенных для дальнейшей автомати- зации.
Главная проблема состоит в том, что компьютер — это не человек, и соот- ветствующие тест-кейсы не могут оперировать «интуитивно понятными описани- ями», а специалисты по автоматизации совершенно справедливо не хотят тратить время на то, чтобы дополнить такие тест-кейсы необходимыми для выполнения ав- томатизации техническими подробностями, — у них хватает собственных задач.
Отсюда следует список рекомендаций по подготовке тест-кейсов к автомати- зации и непосредственно самой автоматизации:
• Ожидаемый результат в автоматизированных тест-кейсах должен быть опи- сан предельно чётко с указанием конкретных признаков его корректности.
Сравните:
Плохо
Хорошо
…
7. Загружается стандартная страница по- иска.
…
7.
Загружается страница поиска: title =
«Search page», присутствует форма с по- лями «input type="text"», «input type="submit" value="Go!"
», присутствует логотип «logo.jpg» и отсутствуют иные гра- фические элементы («img»).
• Поскольку тест-кейс может быть автоматизирован с использованием различ- ных инструментальных средств, следует описывать его, избегая специфиче- ских для того или иного инструментального средства решений. Сравните:
Плохо
Хорошо
1.
Кликнуть по ссылке «Search».
2.
Использовать clickAndWait для синхро- низации тайминга.
1. Кликнуть по ссылке «Search».
2.
Дождаться завершения загрузки стра- ницы.
• В продолжение предыдущего пункта: тест-кейс может быть автоматизирован для выполнения под разными аппаратными и программными платформами, потому не стоит изначально прописывать в него что-то, характерное лишь для одной платформы. Сравните:
Плохо
Хорошо
…
8.
Отправить приложению сообщение
WM_CLICK в любое из видимых окон.
…
8.
Передать фокус ввода любому из не свёрнутых окон приложения (если таких нет — развернуть любое из окон).
9.
Проэмулировать событие «клик левой кнопкой мыши» для активного окна.
• Одной из неожиданно проявляющихся проблем до сих пор является синхро- низация средства автоматизации и тестируемого приложения по времени: в случаях, когда для человека ситуация является понятной, средство автома- тизации тестирования может среагировать неверно, «не дождавшись» опре- делённого состояния тестируемого приложения. Это приводит к завершению неудачей тест-кейсов на корректно работающем приложении. Сравните:
Особенности тест-кейсов в автоматизации
Тестирование программного обеспечения. Базовый курс.
© EPAM Systems, 2015–2023
Стр: 266/301
Плохо
Хорошо
1.
Кликнуть по ссылке «Expand data».
2. Выбрать из появившегося списка значе- ние «Unknown».
1. Кликнуть по ссылке «Expand data».
2.
Дождаться завершения загрузки данных в список «Extended data» (select id="ex- tended_data"
): список перейдёт в состояние enabled.
3.
Выбрать в списке «Extended data» значе- ние «Unknown».
• Не стоит искушать специалиста по автоматизации на вписывание в код тест- кейса константных значений (т.н. «хардкодинг»). Если вы можете понятно описать словами значение и/или смысл некоей переменной, сделайте это.
Сравните:
Плохо
Хорошо
1. Открыть http://application/.
1. Открыть главную страницу приложения.
• По возможности следует использовать наиболее универсальные способы взаимодействия с тестируемым приложением. Это значительно сократит время поддержки тест-кейсов в случае, если изменится набор технологий, с помощью которых реализовано приложение. Сравните:
Плохо
Хорошо
…
8.
Передать в поле «Search» набор собы- тий WM_KEY_DOWN, {знак}, WM_KEY_UP, в результате чего в поле должен быть вве- дён поисковый запрос.
…
8. Проэмулировать ввод значения поля
«Search» с клавиатуры (не годится вставка значения из буфера или прямое присваи- вание значения!)
• Автоматизированные тест-кейсы должны быть независимыми. Из любого правила бывают исключения, но в абсолютном большинстве случаев сле- дует предполагать, что мы не знаем, какие тест-кейсы будут выполнены до и после нашего тест-кейса. Сравните:
Плохо
Хорошо
1.
Из файла, созданного предыдущим те- стом…
1.
Перевести чек-бокс «Use stream buffer file
» в состояние checked.
2. Активировать процесс передачи данных
(кликнуть по кнопке «Start»).
3.
Из файла буферизации прочитать…
• Стоит помнить, что автоматизированный тест-кейс — это программа, и стоит учитывать хорошие практики программирования хотя бы на уровне отсут- ствия т.н. «магических значений», «хардкодинга» и тому подобного. Срав- ните:
Плохо
Хорошо
if ($date_value == '2015.06.18')
{
…
} if ($status = 42)
{
…
} if ($date_value == date('Y.m.d'))
{
…
} if (POWER_USER == $status)
{
…
}
«Хардкодинг»
«Магическое значение»
Ошибка в выражении
(= вместо ==)
Актуальные данные
Осмысленная константа
Ошибка исправлена, к тому же константа в сравнении нахо- дится слева от переменной
Особенности тест-кейсов в автоматизации
Тестирование программного обеспечения. Базовый курс.
© EPAM Systems, 2015–2023
Стр: 267/301
• Стоит внимательно изучать документацию по используемому средству авто- матизации, чтобы избежать ситуации, когда из-за неверно выбранной ко- манды тест-кейс становится ложно положительным, т.е. успешно проходит в ситуации, когда приложение работает неверно.
Так называемые ложно положительные тест-кейсы — едва ли не са- мое страшное, что бывает в автоматизации тестирования: они все- ляют в проектную команду ложную уверенность в том, что приложе- ние работает корректно, т.е. фактически прячут дефекты, вместо того, чтобы обнаруживать их.
Поскольку для многих начинающих тестировщиков первым учебным сред- ством автоматизации тестирования является Selenium IDE
369
, приведём при- мер с его использованием. Допустим, в некотором шаге тест-кейса нужно было проверить, что чек-бокс с id=cb выбран (checked). По какой-то причине тестировщик выбрал неверную команду, и сейчас на этом шаге проверятся, что чек-бокс позволяет изменять своё состояние (enabled, editable), а не что он выбран.
Плохо (неверная команда)
Хорошо (верная команда)
…
…
… verifyEditable id=cb
…
…
…
…
…
… verifyChecked id=cb
…
…
…
• И напоследок рассмотрим ошибку, которую по какой-то мистической причине совершает добрая половина начинающих автоматизаторов — это замена проверки действием и наоборот. Например, вместо проверки значения поля они изменяют значение. Или вместо изменения состояния чек-бокса прове- ряют его состояние. Здесь не будет примеров на «плохо/хорошо», т.к. хоро- шего варианта здесь нет — такого просто не должно быть, т.к. это — грубей- шая ошибка.
Кратко подытожив рассмотренное, отметим, что тест-кейс, предназначенный для автоматизации, будет куда более похож на миниатюрное техническое задание по разработке небольшой программы, чем на описание корректного поведения те- стируемого приложения, понятное человеку.
И ещё одна особенность автоматизированных тест-кейсов заслуживает от- дельного рассмотрения — это источники данных и способы их генерации. Для вы- полняемых вручную тест-кейсов эта проблема не столь актуальна, т.к. при выпол- нении 3–5–10 раз мы также вручную вполне можем подготовить нужное количество вариантов входных данных. Но если мы планируем выполнить тест-кейс 50–100–
500 раз с разными входными данными, вручную столько данных мы не подготовим.
Источниками данных в такой ситуации могут стать:
• Случайные величины: случайные числа, случайные символы, случайные элементы из некоторого набора и т.д.
• Генерация (случайных) данных по алгоритму: случайные числа в заданном диапазоне, строки случайной длины из заданного диапазона из случайных символов из определённого набора (например, строка длиной от 10 до 100 символов, состоящая только из букв), файлы с увеличивающимся по некоему правилу размером (например, 10 КБ, 100 КБ, 1000 КБ и т.д.).
369
Selenium IDE. [
https://www.selenium.dev/selenium-ide/
]
Особенности тест-кейсов в автоматизации
Тестирование программного обеспечения. Базовый курс.
© EPAM Systems, 2015–2023
Стр: 268/301
• Получение данных из внешних источников: извлечение данных из базы дан- ных, обращение к некоему веб-сервису и т.д.
• Собранные рабочие данные, т.е. данные, созданные реальными пользовате- лями в процессе их реальной работы (например, если бы мы захотели раз- работать собственный текстовый редактор, тысячи имеющихся у нас и наших коллег doc(x)-файлов были бы такими рабочими данными, на которых мы бы проводили тестирование).
• Ручная генерация — да, она актуальная и для автоматизированных тест-кей- сов. Например, вручную создать по десять (да даже и по 50–100) корректных и некорректных e-mail-адресов получится куда быстрее, чем писать алгоритм их генерации.
Применение некоторых из этих идей по генерации данных мы рассмотрим подробнее в следующей главе.
Технологии автоматизации тестирования
Тестирование программного обеспечения. Базовый курс.
© EPAM Systems, 2015–2023
Стр: 269/301
3.2.3.
Технологии автоматизации тестирования
В данной главе мы рассмотрим несколько высокоуровневых технологий ав- томатизации тестирования, каждая из которых, в свою очередь, базируется на своём наборе технических решений (инструментальных средствах, языках про- граммирования, способах взаимодействия с тестируемым приложением и т.д.).
Начнём с краткого обзора эволюции высокоуровневых технологий, при этом подчеркнув, что «старые» решения по-прежнему используются (или как компо- ненты «новых», или самостоятельно в отдельных случаях).
Таблица 3.2.a — Эволюция высокоуровневых технологий автоматизации тестиро- вания
№
Подход
Суть
Преимущества
Недостатки
1
Частные решения.
Для решения каждой отдельной задачи пишется отдельная программа.
Быстро, просто.
Нет системности, много времени ухо- дит на поддержку.
Почти невозможно повторное использо- вание.
2
Тестирование под управлением дан- ными
{93}
(DDT).
Из тест-кейса вовне выносятся входные данные и ожидае- мые результаты.
Один и тот же тест- кейс можно повто- рять многократно с разными данными.
Логика тест-кейса по- прежнему строго определяется внутри, а потому для её изменения тест- кейс надо переписы- вать.
3
Тестирование под управлением ключе- выми словами
{93}
(KDT).
Из тест-кейса вовне выносится описание его поведения.
Концентрация на вы- сокоуровневых дей- ствиях. Данные и особенности поведе- ния хранятся вовне и могут быть изменены без изменения кода тест-кейса.
Сложность выполне- ния низкоуровневых операций.
4
Использование фреймворков.
Конструктор, позво- ляющий использо- вать остальные под- ходы.
Мощность и гиб- кость.
Относительная сложность (особенно
— в создании фреймворка).
5
Запись и воспроиз- ведение (Record &
Playback).
Средство автомати- зации записывает действия тестиров- щика и может вос- произвести их, управляя тестируе- мым приложением.
Простота, высокая скорость создания тест-кейсов.
Крайне низкое каче- ство, линейность, не- поддерживаемость тест-кейсов. Требу- ется серьёзная дора- ботка полученного кода.
Технологии автоматизации тестирования
Тестирование программного обеспечения. Базовый курс.
© EPAM Systems, 2015–2023
Стр: 270/301 6
Тестирование под управлением пове- дением
{93}
(BDT).
Развитие идей тести- рования под управ- лением данными и ключевыми словами.
Отличие — в концен- трации на бизнес- сценариях без вы- полнения мелких проверок.
Высокое удобство проверки высоко- уровневых пользова- тельских сценариев.
Такие тест-кейсы пропускают большое количество функцио- нальных и нефункци- ональных дефектов, а потому должны быть дополнены классическими бо- лее низкоуровне- выми тест-кейсами.
На текущем этапе развития тестирования представленные в таблице 3.2.a технологии иерархически можно изобразить следующей схемой (см. рисунок 3.2.b):
Рисунок 3.2.b — Иерархия технологий автоматизации тестирования
Сейчас мы рассмотрим эти технологии подробнее и на примерах, но сначала стоит упомянуть один основополагающий подход, который находит применение практически в любой технологии автоматизации, — функциональную декомпози- цию.
Функциональная декомпозиция
Функциональная декомпозиция (functional decomposition
370
)
— процесс определения функции через её разделение на несколько низкоуровневых подфункций.
Функциональная декомпозиция активно используется как в программирова- нии, так и в автоматизации тестирования с целью упрощения решения поставлен- ных задач и получения возможности повторного использования фрагментов кода для решения различных высокоуровневых задач.
Рассмотрим пример (рисунок 3.2.c): легко заметить, что часть низкоуровне- вых действий (поиск и заполнение полей, поиск и нажатие кнопок) универсальна и может быть использована при решении других задач (например, регистрация, оформление заказа и т.д.).
370
Functional decomposition.
The process of defining lower-level functions and sequencing relationships. [
«System Engineering
Fundamentals
», Defense Acquisition University Press]
Использование фреймворков
Запись и воспроизведение
Тестирование под управлением данными
Тестирование под управлением ключевыми словами
Комбинация тестирование под управлением данными и ключевыми словами
Тестирование под управлением поведением
Технологии автоматизации тестирования
Тестирование программного обеспечения. Базовый курс.
© EPAM Systems, 2015–2023
Стр: 271/301
Рисунок 3.2.c — Пример функциональной декомпозиции в программировании и те- стировании
Применение функциональной декомпозиции позволяет не только упростить процесс решения поставленных задач, но и избавиться от необходимости самосто- ятельной реализации действий на самом низком уровне, т.к. они, как правило, уже решены авторами соответствующих библиотек или фреймворков.
Возвращаемся к технологиям автоматизации тестирования.
Частные решения
Иногда перед тестировщиком возникает уникальная (в том плане, что такой больше не будет) задача, для решения которой нет необходимости использовать мощные инструментальные средства, а достаточно написать небольшую про- грамму на любом из высокоуровневых языков программирования (Java, C#, PHP и т.д.) или даже воспользоваться возможностями командных файлов операционной системы или подобными тривиальными решениями.
Ярчайшим примером такой задачи и её решения является автоматизация дымового тестирования нашего «Конвертера файлов» (код командных файлов для
Windows и Linux приведён в соответствующем приложении
{284}
). Также сюда можно отнести задачи вида:
• Подготовить базу данных, наполнив её тестовыми данными (например, до- бавить в систему миллион пользователей со случайными именами).
• Подготовить файловую систему (например, создать структуру каталогов и набор файлов для выполнения тест-кейсов).
• Перезапустить набор серверов и/или привести их в требуемое состояние.
Удобство частных решений состоит в том, что их можно реализовать быстро, просто, «вот прямо сейчас». Но у них есть и огромный недостаток — это «кустарные решения», которыми может воспользоваться всего пара человек. И при появлении новой задачи, даже очень похожей на ранее решённую, скорее всего, придётся всё автоматизировать заново.
Более подробно преимущества и недостатки частных решений в автомати- зации тестирования показаны в таблице 3.2.b.
Произвести авторизацию
Ввести имя пользователя
Ввести пароль
Отправить данные
Проверить результат
Найти поле
Запол- нить поле
Найти поле
Запол- нить поле
Найти кнопку
На- жать кнопку
Найти над- пись
Срав- нить над- пись
Технологии автоматизации тестирования
Тестирование программного обеспечения. Базовый курс.
© EPAM Systems, 2015–2023
Стр: 272/301
Таблица 3.2.b — Преимущества и недостатки частных решений в автоматизации тестирования
Преимущества
Недостатки
• Быстрота и простота реализации.
• Возможность использования любых доступ- ных инструментов, которыми тестировщик умеет пользоваться.
• Эффект от использования наступает неза- медлительно.
• Возможность нахождения очень эффектив- ных решений в случае, когда основные ин- струменты, используемые на проекте для ав- томатизации тестирования, оказываются ма- лопригодными для выполнения данной от- дельной задачи.
• Возможность быстрого создания и оценки прототипов перед применением более тяже- ловесных решений.
• Отсутствие универсальности и, как след- ствие, невозможность или крайняя слож- ность повторного использования (адаптации для решения других задач).
• Разрозненность и несогласованность реше- ний между собой (разные подходы, техноло- гии, инструменты, принципы решения).
• Крайне высокая сложность развития, под- держки и сопровождения таких решений
(чаще всего, кроме самого автора никто во- обще не понимает, что и зачем было сде- лано, и как оно работает).
• Является признаком «кустарного производ- ства», не приветствуется в промышленной разработке программ.
Тестирование под управлением данными (DDT)
Обратите внимание, как много раз в командных файлах
{284}
повторяются строки, выполняющие одно и то же действие над набором файлов (и нам ещё по- везло, что файлов немного). Ведь куда логичнее было бы каким-то образом подго- товить список файлов и просто передать его на обработку. Это и будет тестирова- нием под управлением данными. В качестве примера приведём небольшой скрипт на PHP, который читает CSV-файл с тестовыми данными (именами сравниваемых файлов) и выполняет сравнение файлов. function compare_list_of_files($file_with_csv_data)
{
$data = file($file_with_csv_data); foreach ($data as $line)
{
$parsed = str_csv($line); if (md5_file($parsed[0]) === md5_file($parsed[1])) { file_put_contents('smoke_test.log',
"OK! File '".$parsed[0]."' was processed correctly!\n");
} else { file_put_contents('smoke_test.log',
"ERROR! File '".$parsed[0]."' was NOT processed correctly!\n");
}
}
}
Пример CSV-файла (первые две строки):
Test_ETALON/«Мелкий» эталон WIN1251.txt,OUT/«Мелкий» файл в WIN1251.txt
Test_ETALON/«Средний» эталон CP866.txt,OUT/«Средний» файл CP866.txt
Теперь нам достаточно подготовить CSV-файл с любым количеством имён сравниваемых файлов, а код тест-кейса не увеличится ни на байт.
К другим типичным примерам использования тестирования под управлением данными относится:
• Проверка авторизации и прав доступа на большом наборе имён пользовате- лей и паролей.
Особенности автоматизированного тестирования
3.2.1.
Необходимые знания и навыки
Во множестве источников, посвящённых основам автоматизации тестирова- ния, можно встретить схемы наподобие представленной на рисунке 3.2.a — то есть автоматизация тестирования представляет собой сочетание программирования и тестирования в разных масштабах (в зависимости от проекта и конкретных задач).
Рисунок 3.2.a — Сочетание программирования и тестирования в автоматизации тестирования
Отсюда следует простой вывод, что специалист по автоматизации тестиро- вания должен сочетать в себе навыки и умения как программиста, так и тестиров- щика. Но этим перечень не заканчивается: умение администрировать операцион- ные системы, сети, различные серверы, умение работать с базами данных, пони- мание мобильных платформ и т.д. — всё это может пригодиться.
Но даже если остановиться только на навыках программирования и тестиро- вания, в автоматизации тоже есть свои особенности — набор технологий. В клас- сическом ручном тестировании развитие происходит постепенно и эволюционно — проходят годы и даже десятилетия между появлением новых подходов, завоёвы- вающих популярность. В программировании прогресс идёт чуть быстрее, но и там специалистов выручает согласованность и схожесть технологий.
В автоматизации тестирования ситуация выглядит иначе: десятки и сотни технологий и подходов (как заимствованных из смежных дисциплин, так и уникаль- ных) появляются и исчезают очень стремительно. Количество инструментальных средств автоматизации тестирования уже исчисляется тысячами и продолжает неуклонно расти.
Потому к списку навыков тестировщика можно смело добавить крайне высо- кую обучаемость и способность в предельно сжатые сроки самостоятельно найти, изучить, понять и начать применять на практике совершенно новую информацию из, возможно, ранее абсолютно незнакомой области. Звучит немного пугающе, но одно можно гарантировать: скучно не будет точно.
О нескольких наиболее распространённых технологиях мы поговорим в главе «Технологии автоматизации тестирования»
{269}
Автоматизация тестирования
Програм- мирование
Програм- мирование
Тестиро- вание
Тести- ро- вание
Тестиро- вание
Прог- рамми- рование
Особенности тест-кейсов в автоматизации
Тестирование программного обеспечения. Базовый курс.
© EPAM Systems, 2015–2023
Стр: 265/301
3.2.2.
Особенности тест-кейсов в автоматизации
Часто (а в некоторых проектах и «как правило») автоматизации подвергаются тест-кейсы, изначально написанные простым человеческим языком (и, в принципе, пригодные для выполнения вручную) — т.е. обычные классические тест-кейсы, ко- торые мы уже рассматривали подробно в соответствующей главе
{120}
И всё же есть несколько важных моментов, которые стоит учитывать при раз- работке (или доработке) тест-кейсов, предназначенных для дальнейшей автомати- зации.
Главная проблема состоит в том, что компьютер — это не человек, и соот- ветствующие тест-кейсы не могут оперировать «интуитивно понятными описани- ями», а специалисты по автоматизации совершенно справедливо не хотят тратить время на то, чтобы дополнить такие тест-кейсы необходимыми для выполнения ав- томатизации техническими подробностями, — у них хватает собственных задач.
Отсюда следует список рекомендаций по подготовке тест-кейсов к автомати- зации и непосредственно самой автоматизации:
• Ожидаемый результат в автоматизированных тест-кейсах должен быть опи- сан предельно чётко с указанием конкретных признаков его корректности.
Сравните:
Плохо
Хорошо
…
7. Загружается стандартная страница по- иска.
…
7.
Загружается страница поиска: title =
«Search page», присутствует форма с по- лями «input type="text"», «input type="submit" value="Go!"
», присутствует логотип «logo.jpg» и отсутствуют иные гра- фические элементы («img»).
• Поскольку тест-кейс может быть автоматизирован с использованием различ- ных инструментальных средств, следует описывать его, избегая специфиче- ских для того или иного инструментального средства решений. Сравните:
Плохо
Хорошо
1.
Кликнуть по ссылке «Search».
2.
Использовать clickAndWait для синхро- низации тайминга.
1. Кликнуть по ссылке «Search».
2.
Дождаться завершения загрузки стра- ницы.
• В продолжение предыдущего пункта: тест-кейс может быть автоматизирован для выполнения под разными аппаратными и программными платформами, потому не стоит изначально прописывать в него что-то, характерное лишь для одной платформы. Сравните:
Плохо
Хорошо
…
8.
Отправить приложению сообщение
WM_CLICK в любое из видимых окон.
…
8.
Передать фокус ввода любому из не свёрнутых окон приложения (если таких нет — развернуть любое из окон).
9.
Проэмулировать событие «клик левой кнопкой мыши» для активного окна.
• Одной из неожиданно проявляющихся проблем до сих пор является синхро- низация средства автоматизации и тестируемого приложения по времени: в случаях, когда для человека ситуация является понятной, средство автома- тизации тестирования может среагировать неверно, «не дождавшись» опре- делённого состояния тестируемого приложения. Это приводит к завершению неудачей тест-кейсов на корректно работающем приложении. Сравните:
Особенности тест-кейсов в автоматизации
Тестирование программного обеспечения. Базовый курс.
© EPAM Systems, 2015–2023
Стр: 266/301
Плохо
Хорошо
1.
Кликнуть по ссылке «Expand data».
2. Выбрать из появившегося списка значе- ние «Unknown».
1. Кликнуть по ссылке «Expand data».
2.
Дождаться завершения загрузки данных в список «Extended data» (select id="ex- tended_data"
): список перейдёт в состояние enabled.
3.
Выбрать в списке «Extended data» значе- ние «Unknown».
• Не стоит искушать специалиста по автоматизации на вписывание в код тест- кейса константных значений (т.н. «хардкодинг»). Если вы можете понятно описать словами значение и/или смысл некоей переменной, сделайте это.
Сравните:
Плохо
Хорошо
1. Открыть http://application/.
1. Открыть главную страницу приложения.
• По возможности следует использовать наиболее универсальные способы взаимодействия с тестируемым приложением. Это значительно сократит время поддержки тест-кейсов в случае, если изменится набор технологий, с помощью которых реализовано приложение. Сравните:
Плохо
Хорошо
…
8.
Передать в поле «Search» набор собы- тий WM_KEY_DOWN, {знак}, WM_KEY_UP, в результате чего в поле должен быть вве- дён поисковый запрос.
…
8. Проэмулировать ввод значения поля
«Search» с клавиатуры (не годится вставка значения из буфера или прямое присваи- вание значения!)
• Автоматизированные тест-кейсы должны быть независимыми. Из любого правила бывают исключения, но в абсолютном большинстве случаев сле- дует предполагать, что мы не знаем, какие тест-кейсы будут выполнены до и после нашего тест-кейса. Сравните:
Плохо
Хорошо
1.
Из файла, созданного предыдущим те- стом…
1.
Перевести чек-бокс «Use stream buffer file
» в состояние checked.
2. Активировать процесс передачи данных
(кликнуть по кнопке «Start»).
3.
Из файла буферизации прочитать…
• Стоит помнить, что автоматизированный тест-кейс — это программа, и стоит учитывать хорошие практики программирования хотя бы на уровне отсут- ствия т.н. «магических значений», «хардкодинга» и тому подобного. Срав- ните:
Плохо
Хорошо
if ($date_value == '2015.06.18')
{
…
} if ($status = 42)
{
…
} if ($date_value == date('Y.m.d'))
{
…
} if (POWER_USER == $status)
{
…
}
«Хардкодинг»
«Магическое значение»
Ошибка в выражении
(= вместо ==)
Актуальные данные
Осмысленная константа
Ошибка исправлена, к тому же константа в сравнении нахо- дится слева от переменной
Особенности тест-кейсов в автоматизации
Тестирование программного обеспечения. Базовый курс.
© EPAM Systems, 2015–2023
Стр: 267/301
• Стоит внимательно изучать документацию по используемому средству авто- матизации, чтобы избежать ситуации, когда из-за неверно выбранной ко- манды тест-кейс становится ложно положительным, т.е. успешно проходит в ситуации, когда приложение работает неверно.
Так называемые ложно положительные тест-кейсы — едва ли не са- мое страшное, что бывает в автоматизации тестирования: они все- ляют в проектную команду ложную уверенность в том, что приложе- ние работает корректно, т.е. фактически прячут дефекты, вместо того, чтобы обнаруживать их.
Поскольку для многих начинающих тестировщиков первым учебным сред- ством автоматизации тестирования является Selenium IDE
369
, приведём при- мер с его использованием. Допустим, в некотором шаге тест-кейса нужно было проверить, что чек-бокс с id=cb выбран (checked). По какой-то причине тестировщик выбрал неверную команду, и сейчас на этом шаге проверятся, что чек-бокс позволяет изменять своё состояние (enabled, editable), а не что он выбран.
Плохо (неверная команда)
Хорошо (верная команда)
…
…
… verifyEditable id=cb
…
…
…
…
…
… verifyChecked id=cb
…
…
…
• И напоследок рассмотрим ошибку, которую по какой-то мистической причине совершает добрая половина начинающих автоматизаторов — это замена проверки действием и наоборот. Например, вместо проверки значения поля они изменяют значение. Или вместо изменения состояния чек-бокса прове- ряют его состояние. Здесь не будет примеров на «плохо/хорошо», т.к. хоро- шего варианта здесь нет — такого просто не должно быть, т.к. это — грубей- шая ошибка.
Кратко подытожив рассмотренное, отметим, что тест-кейс, предназначенный для автоматизации, будет куда более похож на миниатюрное техническое задание по разработке небольшой программы, чем на описание корректного поведения те- стируемого приложения, понятное человеку.
И ещё одна особенность автоматизированных тест-кейсов заслуживает от- дельного рассмотрения — это источники данных и способы их генерации. Для вы- полняемых вручную тест-кейсов эта проблема не столь актуальна, т.к. при выпол- нении 3–5–10 раз мы также вручную вполне можем подготовить нужное количество вариантов входных данных. Но если мы планируем выполнить тест-кейс 50–100–
500 раз с разными входными данными, вручную столько данных мы не подготовим.
Источниками данных в такой ситуации могут стать:
• Случайные величины: случайные числа, случайные символы, случайные элементы из некоторого набора и т.д.
• Генерация (случайных) данных по алгоритму: случайные числа в заданном диапазоне, строки случайной длины из заданного диапазона из случайных символов из определённого набора (например, строка длиной от 10 до 100 символов, состоящая только из букв), файлы с увеличивающимся по некоему правилу размером (например, 10 КБ, 100 КБ, 1000 КБ и т.д.).
369
Selenium IDE. [
https://www.selenium.dev/selenium-ide/
]
Особенности тест-кейсов в автоматизации
Тестирование программного обеспечения. Базовый курс.
© EPAM Systems, 2015–2023
Стр: 268/301
• Получение данных из внешних источников: извлечение данных из базы дан- ных, обращение к некоему веб-сервису и т.д.
• Собранные рабочие данные, т.е. данные, созданные реальными пользовате- лями в процессе их реальной работы (например, если бы мы захотели раз- работать собственный текстовый редактор, тысячи имеющихся у нас и наших коллег doc(x)-файлов были бы такими рабочими данными, на которых мы бы проводили тестирование).
• Ручная генерация — да, она актуальная и для автоматизированных тест-кей- сов. Например, вручную создать по десять (да даже и по 50–100) корректных и некорректных e-mail-адресов получится куда быстрее, чем писать алгоритм их генерации.
Применение некоторых из этих идей по генерации данных мы рассмотрим подробнее в следующей главе.
Технологии автоматизации тестирования
Тестирование программного обеспечения. Базовый курс.
© EPAM Systems, 2015–2023
Стр: 269/301
3.2.3.
Технологии автоматизации тестирования
В данной главе мы рассмотрим несколько высокоуровневых технологий ав- томатизации тестирования, каждая из которых, в свою очередь, базируется на своём наборе технических решений (инструментальных средствах, языках про- граммирования, способах взаимодействия с тестируемым приложением и т.д.).
Начнём с краткого обзора эволюции высокоуровневых технологий, при этом подчеркнув, что «старые» решения по-прежнему используются (или как компо- ненты «новых», или самостоятельно в отдельных случаях).
Таблица 3.2.a — Эволюция высокоуровневых технологий автоматизации тестиро- вания
№
Подход
Суть
Преимущества
Недостатки
1
Частные решения.
Для решения каждой отдельной задачи пишется отдельная программа.
Быстро, просто.
Нет системности, много времени ухо- дит на поддержку.
Почти невозможно повторное использо- вание.
2
Тестирование под управлением дан- ными
{93}
(DDT).
Из тест-кейса вовне выносятся входные данные и ожидае- мые результаты.
Один и тот же тест- кейс можно повто- рять многократно с разными данными.
Логика тест-кейса по- прежнему строго определяется внутри, а потому для её изменения тест- кейс надо переписы- вать.
3
Тестирование под управлением ключе- выми словами
{93}
(KDT).
Из тест-кейса вовне выносится описание его поведения.
Концентрация на вы- сокоуровневых дей- ствиях. Данные и особенности поведе- ния хранятся вовне и могут быть изменены без изменения кода тест-кейса.
Сложность выполне- ния низкоуровневых операций.
4
Использование фреймворков.
Конструктор, позво- ляющий использо- вать остальные под- ходы.
Мощность и гиб- кость.
Относительная сложность (особенно
— в создании фреймворка).
5
Запись и воспроиз- ведение (Record &
Playback).
Средство автомати- зации записывает действия тестиров- щика и может вос- произвести их, управляя тестируе- мым приложением.
Простота, высокая скорость создания тест-кейсов.
Крайне низкое каче- ство, линейность, не- поддерживаемость тест-кейсов. Требу- ется серьёзная дора- ботка полученного кода.
Технологии автоматизации тестирования
Тестирование программного обеспечения. Базовый курс.
© EPAM Systems, 2015–2023
Стр: 270/301 6
Тестирование под управлением пове- дением
{93}
(BDT).
Развитие идей тести- рования под управ- лением данными и ключевыми словами.
Отличие — в концен- трации на бизнес- сценариях без вы- полнения мелких проверок.
Высокое удобство проверки высоко- уровневых пользова- тельских сценариев.
Такие тест-кейсы пропускают большое количество функцио- нальных и нефункци- ональных дефектов, а потому должны быть дополнены классическими бо- лее низкоуровне- выми тест-кейсами.
На текущем этапе развития тестирования представленные в таблице 3.2.a технологии иерархически можно изобразить следующей схемой (см. рисунок 3.2.b):
Рисунок 3.2.b — Иерархия технологий автоматизации тестирования
Сейчас мы рассмотрим эти технологии подробнее и на примерах, но сначала стоит упомянуть один основополагающий подход, который находит применение практически в любой технологии автоматизации, — функциональную декомпози- цию.
Функциональная декомпозиция
Функциональная декомпозиция (functional decomposition
370
)
— процесс определения функции через её разделение на несколько низкоуровневых подфункций.
Функциональная декомпозиция активно используется как в программирова- нии, так и в автоматизации тестирования с целью упрощения решения поставлен- ных задач и получения возможности повторного использования фрагментов кода для решения различных высокоуровневых задач.
Рассмотрим пример (рисунок 3.2.c): легко заметить, что часть низкоуровне- вых действий (поиск и заполнение полей, поиск и нажатие кнопок) универсальна и может быть использована при решении других задач (например, регистрация, оформление заказа и т.д.).
370
Functional decomposition.
The process of defining lower-level functions and sequencing relationships. [
«System Engineering
Fundamentals
», Defense Acquisition University Press]
Использование фреймворков
Запись и воспроизведение
Тестирование под управлением данными
Тестирование под управлением ключевыми словами
Комбинация тестирование под управлением данными и ключевыми словами
Тестирование под управлением поведением
Технологии автоматизации тестирования
Тестирование программного обеспечения. Базовый курс.
© EPAM Systems, 2015–2023
Стр: 271/301
Рисунок 3.2.c — Пример функциональной декомпозиции в программировании и те- стировании
Применение функциональной декомпозиции позволяет не только упростить процесс решения поставленных задач, но и избавиться от необходимости самосто- ятельной реализации действий на самом низком уровне, т.к. они, как правило, уже решены авторами соответствующих библиотек или фреймворков.
Возвращаемся к технологиям автоматизации тестирования.
Частные решения
Иногда перед тестировщиком возникает уникальная (в том плане, что такой больше не будет) задача, для решения которой нет необходимости использовать мощные инструментальные средства, а достаточно написать небольшую про- грамму на любом из высокоуровневых языков программирования (Java, C#, PHP и т.д.) или даже воспользоваться возможностями командных файлов операционной системы или подобными тривиальными решениями.
Ярчайшим примером такой задачи и её решения является автоматизация дымового тестирования нашего «Конвертера файлов» (код командных файлов для
Windows и Linux приведён в соответствующем приложении
{284}
). Также сюда можно отнести задачи вида:
• Подготовить базу данных, наполнив её тестовыми данными (например, до- бавить в систему миллион пользователей со случайными именами).
• Подготовить файловую систему (например, создать структуру каталогов и набор файлов для выполнения тест-кейсов).
• Перезапустить набор серверов и/или привести их в требуемое состояние.
Удобство частных решений состоит в том, что их можно реализовать быстро, просто, «вот прямо сейчас». Но у них есть и огромный недостаток — это «кустарные решения», которыми может воспользоваться всего пара человек. И при появлении новой задачи, даже очень похожей на ранее решённую, скорее всего, придётся всё автоматизировать заново.
Более подробно преимущества и недостатки частных решений в автомати- зации тестирования показаны в таблице 3.2.b.
Произвести авторизацию
Ввести имя пользователя
Ввести пароль
Отправить данные
Проверить результат
Найти поле
Запол- нить поле
Найти поле
Запол- нить поле
Найти кнопку
На- жать кнопку
Найти над- пись
Срав- нить над- пись
Технологии автоматизации тестирования
Тестирование программного обеспечения. Базовый курс.
© EPAM Systems, 2015–2023
Стр: 272/301
Таблица 3.2.b — Преимущества и недостатки частных решений в автоматизации тестирования
Преимущества
Недостатки
• Быстрота и простота реализации.
• Возможность использования любых доступ- ных инструментов, которыми тестировщик умеет пользоваться.
• Эффект от использования наступает неза- медлительно.
• Возможность нахождения очень эффектив- ных решений в случае, когда основные ин- струменты, используемые на проекте для ав- томатизации тестирования, оказываются ма- лопригодными для выполнения данной от- дельной задачи.
• Возможность быстрого создания и оценки прототипов перед применением более тяже- ловесных решений.
• Отсутствие универсальности и, как след- ствие, невозможность или крайняя слож- ность повторного использования (адаптации для решения других задач).
• Разрозненность и несогласованность реше- ний между собой (разные подходы, техноло- гии, инструменты, принципы решения).
• Крайне высокая сложность развития, под- держки и сопровождения таких решений
(чаще всего, кроме самого автора никто во- обще не понимает, что и зачем было сде- лано, и как оно работает).
• Является признаком «кустарного производ- ства», не приветствуется в промышленной разработке программ.
Тестирование под управлением данными (DDT)
Обратите внимание, как много раз в командных файлах
{284}
повторяются строки, выполняющие одно и то же действие над набором файлов (и нам ещё по- везло, что файлов немного). Ведь куда логичнее было бы каким-то образом подго- товить список файлов и просто передать его на обработку. Это и будет тестирова- нием под управлением данными. В качестве примера приведём небольшой скрипт на PHP, который читает CSV-файл с тестовыми данными (именами сравниваемых файлов) и выполняет сравнение файлов. function compare_list_of_files($file_with_csv_data)
{
$data = file($file_with_csv_data); foreach ($data as $line)
{
$parsed = str_csv($line); if (md5_file($parsed[0]) === md5_file($parsed[1])) { file_put_contents('smoke_test.log',
"OK! File '".$parsed[0]."' was processed correctly!\n");
} else { file_put_contents('smoke_test.log',
"ERROR! File '".$parsed[0]."' was NOT processed correctly!\n");
}
}
}
Пример CSV-файла (первые две строки):
Test_ETALON/«Мелкий» эталон WIN1251.txt,OUT/«Мелкий» файл в WIN1251.txt
Test_ETALON/«Средний» эталон CP866.txt,OUT/«Средний» файл CP866.txt
Теперь нам достаточно подготовить CSV-файл с любым количеством имён сравниваемых файлов, а код тест-кейса не увеличится ни на байт.
К другим типичным примерам использования тестирования под управлением данными относится:
• Проверка авторизации и прав доступа на большом наборе имён пользовате- лей и паролей.