BDD-тестирование с использованием драйвера пользовательского интерфейса (например, Selenium для веб-приложения) - PullRequest
4 голосов
/ 03 января 2011

Можно ли реализовать тесты BDD (Behavior Driven Design) с помощью драйвера пользовательского интерфейса?

Например, для данного веб-приложения вместо:

  • Написание тестов для бэк-конец, а затем дополнительные тесты в Javascript для внешнего интерфейса

Должен ли я:

  • Написать тесты в виде макросов Selenium, которые имитируют щелчки мыши и т. д. вфактический браузер?

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

  • Тесты написаны на одном языке, а не на нескольких
  • Онисосредоточены на пользовательском интерфейсе, который заставляет разработчиков думать, что снаружи-в
  • Они работают в реальной среде выполнения (браузер), что позволяет нам
    • Тестировать разныебраузеры
    • Тестирование различных серверов
    • Получите представление о реальной производительности

Мысли?

Ответы [ 6 ]

3 голосов
/ 03 января 2011

Мы сделали это для приложения на C # с использованием инструмента тестирования WPF ( WipFlash ) и написания тестов NUnit в стиле BDD.

например

Given.TheApplicationWindowIsOpen();
When.I.Press.OKButton();
The.Price.ShouldBeCalculated();

Нам, само собой разумеется, пришлось кодировать большую часть DSL.Но это становится бизнес-клиентом удобочитаемым решением.

2 голосов
/ 03 января 2011

Попробуйте использовать SpecFlow с WatiN: (Я не уверен, что вы используете .NET здесь)

http://msdn.microsoft.com/en-us/magazine/gg490346.aspx

1 голос
/ 05 января 2011

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

Например, во многих тестах есть код, который выглядит следующим образом (псевдо-код, я не буду выбирать в какой-либо конкретной среде):

object = createBrowser()
response = object.gotoURL( "http://someurl.com" );
element = response.getLink( "Click Here" );
response = element.doClick();

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

GotoURL http://someurl.com/
Click link:Click Here

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

Конечно, вы также можете использовать продукт под названием TestPlan .Он имеет Selenium в качестве бэк-энда и предоставляет высокоуровневый API и собственный язык для тестирования.Он также выходит за рамки Интернета и включает электронную почту, FTP и т. Д. Примером приведенного выше примера является фрагмент TestPlan

1 голос
/ 03 января 2011

Для веб-тестирования вы можете попробовать WebDriver. Команда Selenium в настоящее время занята интеграцией WebDriver. Саймон Стюарт из Google, который создал WebDriver, опубликовал здесь блог о том, как он работает по-разному по сравнению с Selenium.

WebDriver использует разные технологии для каждого браузера. Для Internet Explorer WebDriver использует автоматизацию пользовательского интерфейса Microsoft - ту же технологию, на которой основана WipFlash , о которой говорил @Brian Agnew Это так же близко, как вы будете притворяться, чтобы нажимать кнопки. Блог Саймона показывает, почему этот подход может быть более мощным, чем решение Selenium Javascript.

WebDriver доступен с сайта Selenium, но еще не полностью реализован как часть Selenium.

0 голосов
/ 28 сентября 2011

На самом деле вы можете сделать и то и другое - создать ориентированный на пользователя интерфейс драйвера (не зависит от GUI / tech / impl).Затем вы можете написать UIDriver и APIDriver и выбрать драйвер для запуска определенного теста.Работа с пользовательским интерфейсом обычно медленнее (из-за процедуры перерисовывается управление, но сначала создается более высокий уровень доверия).Выполнение через API происходит намного быстрее (в процессе, простота установки-разборки).

Хитрость здесь в том, чтобы отделить что от способа.В противном случае вы получите ObscureTests и высокий уровень обслуживания.Убедитесь, что основное внимание уделяется тестированию, а не автоматизации.

0 голосов
/ 03 января 2011

Конечно, вы можете пройти некоторые из ваших приемочных тестов, но я думаю, что большинство адвокатов BDD не советовали бы использовать это для всех тестов.И, конечно, истинные сторонники BDD не будут называть их тестами ...

Книга RSpec выступает за двухуровневый цикл с приемочными тестами (или сценариями), написанными первыми (в основном, в *)1005 * огурец ) и модульные тесты, написанные (в RSpec ) во внутреннем цикле, более напоминающем традиционный TDD.

Во внешнем цикле приемочных испытаний также могут использоваться такие инструменты, как Seleniumуправлять всем приложением через пользовательский интерфейс (и авторы The RSpec Book проводят главу об этом).Но это не подходит для модульных тестов.

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

...