Как мне протестировать сайт веб-форм? Мне кажется, что, поскольку многое зависит от состояния и пользовательского ввода, это было бы невозможно.
Если это невозможно, существует ли действительная автоматизированная альтернатива?
Как мне протестировать сайт веб-форм? Мне кажется, что, поскольку многое зависит от состояния и пользовательского ввода, это было бы невозможно.
Если это невозможно, существует ли действительная автоматизированная альтернатива?
Ответы:
Да, ты можешь. Вы просто должны быть осторожны, чтобы хорошо разделить свои проблемы. Короче говоря, вы должны удалить всю свою логику из кода и поместить ее в другие классы.
Есть два распространенных способа сделать это.
Простой способ - переосмыслить все ваши обработчики событий с точки зрения «Какую информацию система предоставляет мне? Какую информацию мне нужно заполнить на странице?» а затем предоставить класс обслуживания, который выполняет это преобразование.
В этом случае сервисный уровень должен очень мало знать о природе вашего уровня представления. Вам все еще нужно взять данные, возвращенные службой, и заполнить правильные компоненты WebForm в своем коде, и это остается непроверенным (по крайней мере, в модульных тестах вы все еще можете использовать интеграционные тесты). Но это редко, когда код не работает, гораздо более вероятно, что он потерпит неудачу в логике.
Более сложным, но более эффективным способом является использование шаблона Presenter Model Viewer . Когда мы попробовали это, мы обнаружили, что докладчики быстро стали тесно связаны с платформой, и чем больше мы разрабатывали MVP, тем яснее становилось то, что MVP действительно хотел быть MVC, но не мог.
Тем не менее, другие сделали это очень успешно - даже есть платформа webformsmvp, доступная для снятия тяжестей - поэтому ваш пробег может варьироваться.
Совершенно очевидно, что вся страница веб-форм не является модулем, и, следовательно, не может быть проверена модулем. Однако есть несколько вещей, которые вы можете сделать для автоматизированных тестов:
Прошу прощения за то, что пропустил "единичную" часть вопроса ...
SeleniumHQ - ваш друг для тестов с внешнего интерфейса. Это не модульное тестирование, скорее тестирование черного ящика. Вам все еще нужно подумать о допустимых тестовых случаях ...
Если говорить по опыту: только если все сделано правильно. Под «правильным» я подразумеваю минимальное выделение кода и что-то вроде вышеупомянутого Model-View-Presenter, чтобы сделать веб-форму «глупой». Это обычно оказывается очень сложным в приложениях для «коричневых полей», потому что они не были разработаны с учетом этого, и это почти что геркулесовская попытка реорганизовать / переписать страницы, чтобы использовать их.
Я считаю, что модульные веб-тесты чрезвычайно полезны, даже если они просто дают общее представление об ошибке регрессии или для новых проектов.
Что касается состояния, вы создаете свои модульные тесты, как если бы вы использовали тесты, не относящиеся к пользовательскому интерфейсу - они очищают базу данных в начале теста и перестраивают базу данных, чтобы она не содержала ничего, кроме состояния запуска. Каждый модульный тест затем инкапсулирует одну страницу или, как правило, отдельную задачу на странице.
http://watin.org/ - еще один инструмент для веб-тестирования, но для C # / .NET. Вы пишете тесты как модульные тесты:
[Test]
public void SearchForWatiNOnGoogle()
{
using (var browser = new IE("http://www.google.com"))
{
browser.TextField(Find.ByName("q")).TypeText("WatiN");
browser.Button(Find.ByName("btnG")).Click();
Assert.IsTrue(browser.ContainsText("WatiN"));
}
}
В настоящее время он основан на IE, но имеет некоторую экспериментальную поддержку Firefox и Chrome. Вы можете в значительной степени автоматизировать все, что вы будете делать в ручных тестах, включая взаимодействие с Javascript.
Вы не можете провести модульное тестирование веб-сайта просто потому, что веб-запросы происходят по проводам (или через стек TCP). Таким образом, тесты не соответствуют определению «модульный тест», они, скорее всего, будут сквозными тестами.
Для такого рода тестов вы можете использовать набор, такой как Selenium, который за кулисами запускает веб-браузер. Однако, предупреждающее слово: как правило, этот вид тестирования очень сложен и непредсказуем, поскольку в нем много движущихся частей!
Что еще более интересно, меня немного беспокоит, зачем вам вообще нужно тестировать веб-формы. Разве вы не вкладываете слишком много логики в код, и у вас случайно нет анемичной бизнес-логики?
За последние 5 лет Жасмин превратилась в ключевой инструмент для тестирования модульного интерфейса. Он часто включается в автоматическое тестирование сборки с Node и npm
По https://en.wikipedia.org/wiki/Jasmine_(JavaScript_testing_framework) :
Jasmine - это тестовая среда с открытым исходным кодом для JavaScript. [2] Он нацелен на запуск на любой платформе с поддержкой JavaScript, чтобы не мешать ни приложению, ни среде IDE, и иметь легкий для чтения синтаксис. На него сильно влияют другие платформы модульного тестирования, такие как ScrewUnit, JSSpec, JSpec и RSpec. [3]
Несмотря на все упоминания javascript, он также может быть использован для модульного тестирования простой веб-формы.
При разработке сайта ASP.NET мы смогли запустить модульные тесты на:
Все это возможно для TDD, в зависимости от вашей архитектуры. Единственное, что вы не можете выполнить модульное тестирование - это расположение файла разметки.