Какую проблему решает автоматизированное тестирование пользовательского интерфейса?

23

В настоящее время мы исследуем автоматизированное тестирование пользовательского интерфейса (в настоящее время мы проводим автоматическое модульное и интеграционное тестирование).

Мы рассмотрели Selenium и Telerik и выбрали последний как инструмент выбора из-за его гораздо более гибкого регистратора - и мы не хотим, чтобы тестировщики писали слишком много кода.

Тем не менее, я пытаюсь понять общую выгоду. Каковы взгляды людей и что хорошо работает, а что нет?

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

Пока что основное преимущество, которое мы можем видеть, - это регрессионное тестирование, особенно при развертывании нашей платформы на нескольких клиентах.

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

IThasTheAnswer
источник
4
Разве термин «автоматизированное тестирование» не подразумевает проблему, которую он пытается решить? // OTOH, если вы спрашиваете о рентабельности инвестиций, связанных с «автоматическим тестированием», это другой вопрос ...
Джим Г.

Ответы:

24

Когда моя команда внедрила автоматизированное тестирование пользовательского интерфейса, произошло много замечательных вещей.

Во-первых, команда QA стала намного более эффективной в тестировании приложения, а также стала более опытной с приложением. Ведущий QA сказал, что он смог быстро ускорить работу новых участников QA, представив их в тестовых наборах для пользовательского интерфейса.

Во-вторых, качество билетов QA, которые возвращались команде разработчиков, было лучше. Вместо «Страница сломалась, когда я нажал кнопку« Отправить »», мы получили точный случай, который не удался, чтобы мы могли видеть, что было введено в форму. Команда QA также сделала еще один шаг, проверив все неудачные случаи и проверив другие сценарии на этой странице, чтобы лучше понять, что произошло.

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

Кроме того, стресс-тестирование, которое мы использовали, стоило на вес золота. Честно говоря, это помогло мне лучше спать по ночам, зная, что наше приложение может принять почти все, что на него брошено. Мы нашли довольно много страниц, которые взломались под давлением, которые мы смогли исправить, прежде чем начать работу. Просто отлично.

Последнее, что мы обнаружили, было то, что с некоторыми изменениями от команды QA мы могли бы также провести некоторое тестирование SQL-инъекций в нашем приложении. Мы нашли некоторые уязвимости, которые мы смогли быстро исправить.

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

Tyanna
источник
1
+1 за объяснение шагов по воссозданию неудавшегося теста, являющегося присущим процессу (ваше второе замечание)
IThasTheAnswer
Одна проблема: не блокирует ли модульное тестирование пользовательского интерфейса потенциальные изменения в пользовательском интерфейсе [блокирует вас] ... хотя я проголосовал, потому что вы описали преимущество таким образом, что модульные тесты отслеживают общее время выполнения приложения, а не отдельный компонент тестируемой системы.
монах
@monksy - Набор тестов, который мы использовали (я не помню, как его называли «моя жизнь»), не был основан на координатах. Он был достаточно умен, чтобы использовать идентификаторы элементов. До тех пор, пока мы давали имена всем нашим элементам пользовательского интерфейса и сохраняли эти имена в редакциях проекта, тестовые примеры все еще работали. Мы заплатили немалые деньги за это программное обеспечение, но нам показалось, что эта функция того стоит.
Тианна
1
@Tyanna Поверь мне ... это было. Я пытался автоматизировать тестирование пользовательского интерфейса [для регрессивного тестирования] в зависимости от местоположения. Это не работает, и довольно разочаровывает. Кстати, я обращался к движущимся компонентам arround, изменяя представления / пользовательский интерфейс и тематические интерфейсы
monksy
13

Автоматизированные тесты пользовательского интерфейса - это реальные интеграционные тесты. Они проверяют всю систему так, как она используется на самом деле. Это делает их наиболее значимыми тестами. Однако они также имеют тенденцию быть самыми хрупкими и самыми медленными в исполнении.

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

Разумеется, выполнение тестов на сервере сборки (по крайней мере, один раз в день) абсолютно необходимо.

мы не хотим, чтобы тестировщики писали слишком много кода.

ИМО это несбыточная мечта. Создание автоматизированных тестов - это написание кода. Функциональность записи может помочь вам быстрее написать часть этого кода и быстрее приступить к написанию вручную (и ужасно замедлит вас, если вы упустите момент, когда написание кода вручную станет быстрее), но в конечном итоге написание кода вручную - это то, что вы в конечном итоге получите много делаю Лучше надеяться, что ваша инфраструктура тестирования хорошо ее поддерживает, и ее разработка не была слишком сосредоточена на (очень продаваемой) несбыточной мечте о том, чтобы позволить людям, которые не могут писать код, производить автоматические тесты.

Майкл Боргвардт
источник
13

и мы не хотим, чтобы тестировщики писали слишком много кода

Мы выбрали противоположный подход. Мы хотели, чтобы тестеры писали код.

Вот рабочий процесс, который мы начали применять. Это нелегко сделать, потому что управление не зависит от автоматического тестирования внешнего интерфейса. Они готовы согласиться на «достаточно близко».

  1. Пользовательские истории.

  2. Оперативная концепция. Как история, вероятно, будет работать. Обзор дизайна.

  3. Эскиз экрана: дизайн пользовательского интерфейса. Как бы это выглядело.

  4. Селеновые сценарии. Если скрипты все работают, мы закончили с выпуском.

  5. Кодирование и тестирование, пока скрипт не работает.

Автоматическое тестирование - единственный способ продемонстрировать, что функциональность существует.

Ручное тестирование подвержено ошибкам и подлежит переопределению управления: «это достаточно хорошо, эти неудачные тесты на самом деле не так важны, как их выпуск вовремя».

«Никакой функции программы без автоматического теста просто не существует».

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

С. Лотт
источник
2
«тестеры пишут автоматизированные проверки». Вот как тестеры должны делать свою работу. «у тестировщиков всегда есть возможность проверить», для меня это не имеет особого смысла. Можете ли вы объяснить, что это может значить?
С.Лотт
3
@ S.Lott: предположительно ручное тестирование. Автоматизированное тестирование это хорошо, но не все. Он не может обнаружить много неожиданных режимов ошибок (например, проблемы с макетом). И я бы сказал, что фундаментализм, показанный в последних двух предложениях, контрпродуктивен.
Майкл Боргвардт
11
Automated testing is the only way to demonstrate that the functionality exists.Нет, это не так. Поисковые тесты или выполненные вручную тесты демонстрируют, что функциональность существует. Это не так хорошо, как автоматическое тестирование, но автоматическое тестирование - не единственный способ тестирования.
StuperUser
1
@ S.Lott - Майкл и StuperUser поняли это правильно. Ручное и предпочтительно разведочное тестирование.
Линдон Вруман
1
-1 за фундаментализм, как сказал Михаил. См. Joelonsoftware.com/items/2007/12/03.html для объяснения того, насколько нелепым является такое отношение, когда оно доведено до логического завершения.
Мейсон Уилер
5

Пока что основное преимущество, которое мы можем видеть, - это регрессионное тестирование, особенно при развертывании нашей платформы на нескольких клиентах.

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

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

ChrisF
источник
Какой у вас опыт, что поддержание автоматических регрессионных тестов освобождает тестеров для более интересной работы? Я знаю, что это теория, но если для написания или изменения тестов требуются дни, а не просто ручное тестирование, это может не сработать.
ITAsTheAnswer
@Tunic - мы используем Silverlight в нашем текущем проекте, и сейчас я пишу несколько тестов, которые проверяют привязки между XAML и кодом модели представления C #. Это будет означать, что нашим тестировщикам не нужно проверять, правильно ли введены введенные значения и т. Д. Еще рано, но выглядит многообещающе.
ChrisF
5

Мы рассмотрели Selenium и Telerik и остановились на последнем как на инструменте выбора из-за его гораздо более гибкого рекордера

Я не уверен, сколько вы изучили это. Конечно, есть и другие варианты. Вы смотрели в Watir , WatiN , Sikuli назвать несколько?

и мы не хотим, чтобы тестировщики писали слишком много кода.

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

Тем не менее, я пытаюсь понять общую выгоду. Каковы взгляды людей и что хорошо работает, а что нет?

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

Пока что основное преимущество, которое мы можем видеть, - это регрессионное тестирование, особенно при развертывании нашей платформы на нескольких клиентах.

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

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

Как я уже говорил ранее, автоматизация тестирования требует значительных усилий, однако, когда все сделано правильно, я еще не встретил команду, которая сказала бы: «Хотелось бы, чтобы мы не настраивали нашу автоматизацию тестирования».

Линдон Вруман
источник
2
+1 особенно за "Мне плохо за людей, которые должны поддерживать эти сценарии". Хорошо разработанный код - это ключевая часть написания поддерживаемых тестов пользовательского интерфейса, особенно с часто меняющимся пользовательским интерфейсом. Если тестировщики OP не могут использовать Page Objects или повторно использовать код, я бы серьезно посоветовал OP рассмотреть возможность автоматизации только стабильного пользовательского интерфейса (если таковой имеется).
Этель Эванс
3

Вы правы, что регрессия огромна. Также -

  • если ваши тесты написаны по модульному принципу, вы можете получить больше прибыли, смешивая и сопоставляя тестовые наборы

  • мы повторно использовали сценарии автоматического тестирования для загрузки данных, так что нам не нужно класть базу данных для тестирования больших размеров

  • тест производительности

  • многопоточные тесты

  • в веб-системах - переключение между браузерами и переключение между операционными системами. Из-за проблем с согласованностью браузера огромное значение имеет достижение максимально широкой базы.

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

bethlakshmi
источник
+1 за ваше первое очко. Абсолютно важно для успешного комплекта автоматизации тестирования!
Линдон Вруман
Да, согласен с первым пунктом. На самом деле, я рассмотрел второй и третий пункты, но я думаю, что именно здесь Telerik падает. Сценарии Selenium (возможно, простые) могут использоваться BroswerMob
IThasTheAnswer
3

Только один пример: точное измерение продолжительности рендеринга веб-страницы.

Используя тесты автоматизации, гораздо проще протестировать производительность веб-браузера. Чтобы измерить максимальное время ответа, которое вы, вероятно, примете, просто установите константу в ваших тестовых сценариях и / или передайте ее в качестве параметра функции, например, в этом псевдокоде: $ sel-> wait_for_page_to_load ($ mypage, $ maxtime).

Проведение кросс-браузерного тестирования с низкими значениями может быть очень полезным.

Альтернативой было бы, чтобы сотрудники проводили измерения времени с помощью секундомера.

KNB
источник
3

Автоматизированное тестирование пользовательского интерфейса позволяет:

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

Однако, как отметили другие:

Telerik ...

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

это красный флаг для многих из нас.

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

  • база данных / идентификатор объекта имеют тенденцию меняться от случая к случаю
  • записанные вручную сценарии часто полагаются на теги макета страницы, которые часто меняются
  • общие действия нужно будет писать снова и снова, вместо того, чтобы разрешить их повторное использование (см. подход SitePrism & PageObject)
  • иногда вам нужно использовать такие инструменты, как xpath, чтобы получить дополнительную информацию, основанную на информации о текущей странице. Простой записанный скрипт не сделает этого.
  • разработчикам и тестировщикам, которые пишут код, не рекомендуется использовать CSS-классы, идентификаторы и атрибуты данных HTML5, что приведет к созданию более надежных и поддерживаемых тестов.

У Telerik есть некоторые преимущества, которые следует учитывать, хотя:

  • нацелен на мобильных клиентов
  • встроенные инструменты для управления ростом
  • работает с Android, iOS и Windows Phone

Подход, который может помочь устранить пробелы, состоит в том, чтобы записать начальный сценарий с помощью средства записи страниц инструментов, но затем изменить сценарий, чтобы использовать идентификаторы, классы и атрибуты данных, чтобы он продолжался с течением времени. Это подход, который я на самом деле использовал с плагином firefox selenium.

Майкл Даррант
источник
2

Это облегчает проведение «Экспертного тестирования» (аналогично «Исследовательскому тестированию», но проводится конечными пользователями или членами команды, обладающими обширными знаниями бизнеса), записывает результаты, измеряет и автоматизирует.

StuperUser
источник
2

Я пришел к этому из другого фона. У моих бывших работодателей мы разработали коммерческие инструменты автоматического тестирования (QALoad, QARun, TestPartner, SilkTest, SilkPerfomer).

Мы увидели, что автоматическое тестирование пользовательского интерфейса выполняет две роли:

  1. Полное регрессионное тестирование

  2. Автоматическая настройка тестовых сред

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

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

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

Кристофер Биббс
источник
2

Автоматизированное тестирование любого рода предусматривает регрессионное тестирование; запустив тест, который раньше работал, вы проверяете, что он все еще работает (или не работает) независимо от того, что еще вы добавили. Это верно независимо от того, является ли тест интеграционным тестом (который обычно не касается пользовательского интерфейса) или AAT (который обычно требует пользовательского интерфейса).

Автоматическое тестирование пользовательского интерфейса позволяет тестировать систему так, как если бы пользователь нажимал кнопки. Таким образом, такие тесты могут использоваться для проверки навигации по системе, правильности меток и / или сообщений, производительности и / или времени загрузки в конкретной тестовой среде и т. Д. И т. Д. Основная цель - сократить время, затрачиваемое парнем из отдела контроля качества, нажимая кнопки, очень похоже на интеграцию и модульные тесты для программиста. Он может настроить один тест один раз (обычно путем записи собственных щелчков мыши и ввода данных в сценарий), и, как только тест заработает правильно, все, что ему нужно будет сделать, чтобы проверить правильность тестируемой системы, - запустить его снова. Некоторые платформы, такие как Selenium, позволяют переносить тесты между браузерами, позволяя тестировать несколько сред, в которых сайт должен работать должным образом.

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

Keiths
источник
0

Тестирование определяет много разных вещей. Многие из этих тестов могут быть автоматизированы, чтобы убрать тяжелую работу и сделать больше. Чтобы определить, могут ли ваши тесты быть автоматизированы, вам сначала нужно проверить, подходит ли им заданный вопрос.

  • Вы определяете, работает ли компонент в соответствии со спецификацией?
  • Вы хотите проверить все возможные входы и выходы?
  • стресс-тест компонента?
  • Или вы пытаетесь проверить, что "это работает"?

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

Спенсер Рэтбун
источник
-1

По моему опыту, автоматическое тестирование пользовательского интерфейса покрывает много пробелов, включая:

  • Отсутствие документации (пример: использование автоматического запуска тестов для демонстрации существующей функциональности)
  • Устаревшие требования из-за ползучести области (пример: выявление разрыва между требованиями и кодом путем захвата экрана во время тестовых прогонов)
  • Большой оборот разработчиков и тестировщиков (пример: обратный инжиниринг устаревшего JavaScript путем захвата экрана во время тестовых прогонов с открытым инструментом разработчика)
  • Выявление нарушений стандартных соглашений об именах с помощью регрессионных тестов XPath (пример: поиск во всех узлах атрибута DOM по именам в верблюжьей оболочке)
  • Распознавание дыр в безопасности, которые может обнаружить только компьютер (например, выход из одной вкладки при одновременной отправке формы в другой)
оборота Пол Свитт
источник
1
Как это помогает с этими вещами? Было бы неплохо, если бы вы могли уточнить немного.
Халк
-1

Я хотел бы поделиться опытом нашей команды. Мы использовали наш собственный инструмент тестирования пользовательского интерфейса, Screenster, для тестирования наших веб-приложений и наших клиентов. Он зарекомендовал себя как полезная альтернатива Selenium для задач визуального / CSS-тестирования. Screenster - это инструмент автоматизации тестирования, который выполняет сравнение различных версий ваших веб-страниц на основе скриншотов. Сначала он создает визуальную базовую линию для страницы, делая снимок экрана для каждого действия пользователя. Во время следующего запуска он делает новый снимок экрана на каждом шаге, сравнивает его с одним из базовых и выделяет различия.

Подводя итог, можно сказать, что Screenster имеет следующие преимущества: Визуальный базовый уровень: снимки экрана захватываются для каждого пользовательского шага во время записи теста Сравнение снимков экрана: Screenster сравнивает изображения, снятые во время воспроизведения, с изображениями из базовой линии и выделяет все различия. Умные селекторы CSS: тестировщик может выбирать Элементы CSS на скриншотах и ​​выполнение действий с ними - например, помечать их как игнорирующие области, чтобы исключить из дальнейшего сравнения

romansabalaev
источник