Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Автоматизированное функциональное тестирование Automation Testing и Functional Automation Testing

Лекция



Привет, Вы узнаете о том , что такое автоматизированное функциональное тестирование, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое автоматизированное функциональное тестирование, functional automation testing, automation testing, пирамида тестирования , настоятельно рекомендую прочитать все из категории Качество и тестирование программного обеспечения. Quality Assurance..

Автоматизированное тестирование программного обеспечения — часть процесса тестирования на этапе контроля качества в процессе разработки программного обеспечения. Оно использует программные средства для выполнения тестов и проверки результатов выполнения, что помогает сократить время тестирования и упростить его процесс.

Автоматизированное тестирование ПО (Automation Testing)
- это процесс верификации программного обеспечения, при котором основные функции и шаги теста, такие как запуск, инициализация, выполнение, анализ и выдача результата, выполняются автоматически при помощи инструментов для автоматизированного тестирования.

автоматизированное функциональное тестирование ПО (Functional Automation Testing)
- это процесс верификации функциональных требований и особенностей тестируемого приложения, по средствам инструментов для автоматизированного тестирования. (см. Функциональное тестирование)

Предлагаем вашему внимаю следующие темы, дающие ответы на самые распространенные вопросы, возникающие в процессе внедрения автоматизированного тестирования:

  • Зачем автоматизировать?
  • Что автоматизировать?
  • Как автоматизировать?
  • Выбор инструмента
  • Уровни автоматизации тестирования
  • Архитектура Тестов
  • Стратегия использования автоматизированных тестов

Также рекомендуем почитать статьи специалистов по автоматизированному тестированию:

  • Пишем систему автоматизированных тестов "с нуля" (
  • Page Objects pattern или работаем по науке
  • Page Objects pattern + Selenium (Java)
  • Автоматизированное тестирование: работа со статическими ресурсами
  • Запуск Selenium Server

Зачем нужно автоматизировать?

С автоматизацией тестирования, как и со многими дугими узконаправленными IT - дисциплинами, связано много неверных представлений. Для того, чтобы избежать неэффективного применения автоматизации, следует обходить ее недостатки и максимально использовать преимущества. Далее мы перечислим и дадим небольшое описание для основных нюансов автоматизации и дадим ответ на основной вопрос данной статьи – когда автоматизацию всетаки стоит применять.

Преимущества автоматизации тестирования:

  • Повторяемость – все написанные тесты всегда будут выполняться однообразно, то есть исключен «человеческий фактор». Тестировщик не пропустит тест по неосторожности и ничего не напутает в результатах.
  • Быстрое выполнение – автоматизированному скрипту не нужно сверяться с инструкциями и документациями, это сильно экономит время выполнения.
  • Меньшие затраты на поддержку – когда автоматические скрипты уже написаны, на их поддержку и анализ результатов требуется, как правило, меньшее время чем на проведение того же объема тестирования вручную.
  • Отчеты – автоматически рассылаемые и сохраняемые отчеты о результатах тестирования.
  • Выполнение без вмешательства – во время выполнения тестов инженер-тестировщик может заниматься другими полезными делами, или тесты могут выполняться в нерабочее время (этот метод предпочтительнее, так как нагрузка на локальные сети ночью снижена).

Недостатки автоматизации тестирования (их тоже немало):

  • Повторяемость – все написанные тесты всегда будут выполняться однообразно. Это одновременно является и недостатком, так как тестировщик, выполняя тест вручную, может обратить внимание на некоторые детали и, проведя несколько дополнительных операций, найти дефект. Скрипт этого сделать не может.
  • Затраты на поддержку – несмотря на то, что в случае автоматизированных тестов они меньше, чем затраты на ручное тестирование того же функционала – они все же есть. Чем чаще изменяется приложение, тем они выше.
  • Большие затраты на разработку – разработка автоматизированных тестов это сложный процесс, так как фактически идет разработка приложения, которое тестирует другое приложение. В сложных автоматизированных тестах также есть фреймворки, утилиты, библиотеки и прочее. Естественно, все это нужно тестировать и отлаживать, а это требует времени.
  • Стоимость инструмента для автоматизации – в случае если используется лицензионное ПО, его стоимость может быть достаточно высока. Свободно распространяемые инструменты как правило отличаются более скромным функционалом и меньшим удобством работы.
  • Пропуск мелких ошибок - автоматический скрипт может пропускать мелкие ошибки на проверку которых он не запрограммирован. Это могут быть неточности в позиционировании окон, ошибки в надписях, которые не проверяются, ошибки контролов и форм с которыми не осуществляется взаимодействие во время выполнения скрипта.

Для того чтобы принять решение о целесообразности автоматизации приложения нужно ответить на вопрос «перевешивают ли в нашем случае преимущества?» - хотя бы для некоторой функциональности нашего приложения. Если вы не можете найти таких частей, либо недостатки в вашем случае неприемлемы – от автоматизации стоит воздержаться.

При принятии решения стоит помнить, что альтернатива – это ручное тестирование, у которого есть свои недостатки.

В поиске эффективных мест для автоматизации вам может помочь глава "Что необходимо автоматизировать".

Что нужно автоматизировать?

Спрашивая: «Что автоматизировать?», необходимо сначала ответить на вопрос: «Целесообразна лиавтоматизация тестирования в условиях проекта». Если ответ «ДА», то необходимо, исходя из требований к объекту тестирования, создать план, по которому будут разрабатыватьсяавтоматизированные тесты. Создавая подобный документ, вы должны четко представлять, "что автоматизировать?", "как автоматизировать?" и "чем автоматизировать?". Не будем вдаваться в подробности, как и чем тестировать ту или иную функцию, просто перечислим места, где, на наш взгляд,нужно применять автоматизацию:

  1. Труднодоступные места в системе (бэкенд процессы, логирование файлов, запись в БД)
  2. Часто используемая функциональность, риски от ошибок в которой достаточно высоки. Автоматизировав проверку критической функциональности, можно гарантировать быстрое нахождение ошибок, а значит и быстрое их решение.
  3. Рутинные операции, такие как переборы данных (формы с большим количеством вводимых полей. Автоматизировать заполнение полей различными данными и их проверку после сохранения)
  4. Валидационные сообщения (Автоматизировать заполнение полей не корректными данными и проверку на появление той или иной валидации)
  5. Длинные end-to-end сценарии
  6. Проверка данных, требующих точных математических расчетов
  7. Проверка правильности поиска данных

А также, многое другое, в зависимости от требований к тестируемой системе и возможностей выбранного инструмента для тестирования.

Для более эффективного использования автоматизации тестирования лучше разработать отдельные тест кейсы проверяющие:

  • Базовые операции создания/чтения/изменения/удаления сущностей (так называемые CRUD операции - Create / Read / Update / Delete).
    Пример: создание, удаление, просмотр и изменение данных о пользователе.
  • Типовые сценарии использования приложения, либо отдельные действия.
    Пример: пользователь заходит на почтовый сайт, листает письма, просматривает новые, пишет и отправляет письмо, выходит с сайта. Об этом говорит сайт https://intellect.icu . Это так называемый end-to-end сценарий, который проверяет совокупность действий. Мы предлагаем вам использовать именно такие сценарии, так как они позволяют вернуть систему в состояние, максимально близкое к исходному, а значит – минимально влияющее на другие тесты.
  • Интерфейсы, работы с файлами и другие моменты, неудобные для тестирования вручную.
    Пример: система создает некоторый xml файл, структуру которого необходимо проверить.

Это и есть та функциональность, от автоматизации тестирования которой, можно получить наибольшую отдачу.

Автоматизированное функциональное тестирование Automation Testing и Functional Automation Testing

Рис. 1 . Пирамиды идеального и неидеального автоматизированного тестирования

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

Как автоматизировать?

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

Во первых, вы должны обратить внимание насколько хорошо инструмент для автоматизации распознает элементы управления в вашем приложении. В случае когда элементы не распознаются стоит поискать плагин, либо соответствующий модуль. Если такового нет – от инструмента лучше отказаться. Чем больше элементов может распознать инструмент – тем больше времени вы сэкономите на написании и поддержке скриптов!

Во-вторых, нужно обратить внимание на то сколько времени требуется на поддержку скриптовнаписанных с помощью выбранного инструмента. Для этого запишите простой скрипт который выбирает пункт меню, а потом представьте, что изменился пункт меню который необходимо выбрать. Если для восстановления работоспособности сценария вам придется перезаписать скрипт целиком, то инструмент не оптимален, так как реальные сценарии гораздо сложнее. Лучше всего тот инструмент, который позволяет вам вынести название кнопки в переменную в начале скрипта и быстро заменить ее значение. В идеале – описать меню как класс.

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

Лучше всего для принятия правильного решения об автоматизации отвечать на вопросы «Зачем? Что? Как?» именно в таком порядке. Это поможет избежать впустую потраченных времени нервов и финансов. С другой стороны вы сможете получить надежность, скорость и качество!!!

Приложения для автоматического тестирования

Для автоматизации тестирования существует большое количество приложений. Наиболее популярные из них по итогам 2007 года:

  • HP LoadRunner, HP QuickTest Professional, HP Quality Center
  • Segue SilkPerformer
  • IBM Rational FunctionalTester, IBM Rational PerformanceTester, IBM Rational TestStudio
  • TestComplete (англ.)русск.

Использование этих инструментов помогает тестировщикам автоматизировать следующие задачи:

  • установка продукта
  • создание тестовых данных
  • GUI взаимодействие
  • определение проблемы

Однако автоматические тесты не могут полностью заменить ручное тестирование. Автоматизация всех испытаний — очень дорогой процесс, и потому автоматическое тестирование является лишь дополнением ручного тестирования. Наилучший вариант использования автоматических тестов — регрессионное тестирование.

Инструментарий

  • JUnit — тестирование приложений для Java
  • TestNG — тестирование приложений для Java
  • NUnit — порт JUnit под .NET
  • Selenium — тестирование приложений HTML; поддерживает браузеры Internet Explorer, Mozilla Firefox, Opera, Google Chrome, Safari.
  • TOSCA Testsuite — тестирование приложений HTML, .NET, Java, SAP
  • UniTESK — тестирование приложений на Java, Си.

Выбор инструмента автоматизации тестирования

Выбор инструмента зачастую зависит от объекта тестирования и требований к тестовым сценариям, т.к. инструменты тестирования не могут поддерживать абсолютно все технологии, используемые при разработке приложений. То есть, выбор инструмента сводится к банальному методу проб и ошибок. В итоге, нередко мы выбираем несколько инструментов для тестирования функций приложения. Например, GUI мы проверяем по средствам Mercury WinRunner, бэкенд процессы - используя "java based test tools" или другие инструменты. Основные аспекты выбора инструмента автоматизации тестирования рассмотрены в разделе "Как автоматизировать?".

Рассмотрим инструменты для автоматизированного функционального тестирования от разных производителей:

Компания Инструмент
Hewlett-Packard (Mercury Interactive) QuickTest Professional, WinRunner
IBM Rational Rational Robot, Rational Functional Tester
Borland (Segue) SilkTest
AutomatedQA Corp TestComplete
Microsoft Microsoft VS 2005
SeleniumHQ Selenium

Отдельным пунктом также хочется выделить Java библиотеки для автоматизированного тестирования (java based test tools and libraries):

Инструмент Описание
Selenium Selenium is a set of different software tools each with a different approach to supporting test automation of web applications across many platforms.
Watij Watij (pronounced wattage) stands for Web Application Testing in Java. Watij is a pure Java API created to allow for the automation of web applications. Based on the simplicity of Watir and enhanced by the power of Java, Watij automates functional testing of web applications through a real browser. Currently Watij supports automating Internet Explorer on Windows only. Future plans are in place to support others like Mozilla.
HtmlUnit HtmlUnit is a "browser for Java programs". It models HTML documents and provides an API that allows you to invoke pages, fill out forms, click links, etc... just like you do in your "normal" browser. It has fairly good JavaScript support (which is constantly improving) and is able to work even with quite complex AJAX libraries, simulating either Firefox or Internet Explorer depending on the configuration you want to use. It is typically used for testing purposes or to retrieve information from web sites. HtmlUnit is not a generic unit testing framework. It is specifically a way to simulate a browser for testing purposes and is intended to be used within another testing framework such as JUnit or TestNG
HttpUnit Written in Java, HttpUnit emulates the relevant portions of browser behavior, including form submission, JavaScript, basic http authentication, cookies and automatic page redirection, and allows Java test code to examine returned pages either as text, an XML DOM, or containers of forms, tables, and links. When combined with a framework such as JUnit, it is fairly easy to write tests that very quickly verify the functioning of a web site.
Jamaleon Jameleon is an automated testing framework that can be easily used by technical and non-technical users alike. One of the main concepts behind Jameleon is to create a group of keywords or tags that represent different screens of an application. All of the logic required to automate each particular screen can be defined in Java and mapped to these keywords. The keywords can then be organized with different data sets to form test scripts without requiring an in-depth knowledge of how the application works. The test scripts are then used to automate testing and to generate manual test case documentation.
Junit JUnit is a simple framework to write repeatable tests. It is an instance of the xUnit architecture for unit testing frameworks.
Abbot Abbot is a simple framework for unit and functional testing of Java GUIs. Facilitates generating user actions and examining component state. Supports recording and playback on any Java application.
Marathon With Marathon you capture user interactions on the applications and also insert assertions to verify that correct processing is taking place. The generated raw script can be re-factored to modules for efficient reuse and maintainability. Replay the scripts either manually or integrate Marathon into your build process for automatic execution of the test suites.

Так же существует огромное количество фреймворков и инструментов, ориентированных не только на Java, но и на другие языки программирования, такие как: ruby, php, C#, javascript, python, perl и т.д. Их обзор мы проведем в ближайшее время.

Три уровня автоматизации тестирования

Условно, тестируемое приложение можно разбить на 3 уровня:

  • Unit Tests Layer
  • Functional Tests Layer (Non-UI)
  • GUI Tests Layer

Для обеспечения лучшего качества продукта, рекомендуется автоматизировать все 3 уровня. Рассмотрим более детально стратегию автоматизации тестирования на основе трехуровневой модели:

Уровень модульного тестирования (Unit Test layer)

Под автоматизированными тестами на этом уровне понимаются Компонентные или Модульные тесты написанные разработчиками. Тестировщикам никто не запрещает писать такие тесты, которые будут проверять код, конечно же, если их квалификация позволяет это. Наличие подобных тестов на ранних стадиях проекта, а также постоянное их пополнение новыми тестами, проверяющими «баг фиксы», убережет проект от многих серьезных проблем.

Уровень функционального тестирование (Functional Test Layer non-ui)

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

Уровень тестирования через пользовательский интерфейс (GUI Test Layer)

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

Архитектура Автоматических Тестов (Test Tools Architecture)

Для удобства наложения автоматизированных тестов, на уже имеющиеся тест кейсы, структура тест скриптов должна быть аналогична структуре тестового случая - Precondition, Steps & Post Condition.

Получаем правило, что каждый тест скрипт должен иметь:

  • Precondition
  • Steps (Test)
  • Post Condition

Перечислим основные функции скрипта:

  1. Precondition
    • Инициализация приложения (например, открытие главной страницы, вход под тестовым пользователем, переход в необходимую часть приложения и подведение системы к состоянию пригодному для тестирования)
    • Инициализация тестовых данных
  2. Steps
    • Непосредственное проведение теста
    • Занесение данных о результате теста, с обязательным сохранением причин провала и шагов, по которым проходил тест
  3. Post Condition
    • Удаление, созданных в процессе выполнения скрипта, ненужных тестовых данных
    • Корректное завершение работы приложения

Рекомендуется также создать общую библиотеку по обработке ошибок и исключительных ситуаций. Например:

  • PreConditionException
  • TestCaseException
  • PostConditionException

В итоге, воспользовавшись вышеописанными рекомендациями, у вас будет реализована общаяархитектура тест скриптов и сценариев. А рассмотрев статьи по использованию PageObject pattern в разделе "Статьи и практические советы по автоматизации тестирования ", вы сможете реализовать собственный фреймворк для автоматизации тестирования через GUI .

Стратегия использования автоматизированных тестов

Чтобы автоматизация тестирования дала нужные плоды, а именно сократила время на тестирование ПО, предлагается следующее:

  1. Написанием тестов должны заниматься «специально обученные люди» - специалисты по автоматизированному тестированию (Software Automation Testers). После написания, тесты передаются команде ручного тестирования, которая уже осуществляет их ежедневный запуск и анализ результатов. Тем самым автоматизированные тесты также проходят тестирование, и в результате увеличивается их надежность и жизнеспособность.
  2. Написанные и отлаженные тесты также могут передаваться команде разработки, для отладки новых версий.
  3. Команде разработки рекомендуется осуществлять ежедневную сборку, с прогоном всех написанных тестов на всех уровнях автоматизации тестирования. И только после того, как новая версия начинает удовлетворять критериям качества, осуществлять установку новой версии на QA платформу.

Написание и подход к автоматизации тестирования зависит от процесса разработки приложения. Взяв за основу RUP (Rational Unified Process), описанный на страницах блога"ПроТестинг", могу предложить следующую процедуру, разбитую на фазы:

  • Inception phase – выбор инструмента автоматизации, в зависимости от которого решается будут ли использоваться уже готовые наработки (фреймворки) или же все будет написано "с нуля".
  • Elaboration phase – написание тестов на основную архитектуру (в дальнейшем эти тесты будут использоваться для приема билда – Build Verification Tests)
  • Construction phase – более детальная автоматизация: критическая функциональность, проверка регрессий, end-to-end сценарии
  • Transition phase – подготовка тестов к передаче заказчику (если это требуется)

Более подробный обзор использования RUP при разработке программного обеспечения можно прочитать в следующем документе: RUP bestpractices

Вау!! 😲 Ты еще не читал? Это зря!

Выводы из данной статьи про автоматизированное функциональное тестирование указывают на необходимость использования современных методов для оптимизации любых систем. Надеюсь, что теперь ты понял что такое автоматизированное функциональное тестирование, functional automation testing, automation testing, пирамида тестирования и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Качество и тестирование программного обеспечения. Quality Assurance.

Ответы на вопросы для самопроверки пишите в комментариях, мы проверим, или же задавайте свой вопрос по данной теме.

создано: 2016-04-02
обновлено: 2022-01-17
132764



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей



Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Качество и тестирование программного обеспечения. Quality Assurance.

Термины: Качество и тестирование программного обеспечения. Quality Assurance.