Дымовое тестирование веб-приложения .NET

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

Текущая ситуация: разработчики пишут веб-сайт, операторы развертывают его. После развертывания разработчик Smoke Tests проверяет его, чтобы убедиться, что развертывание прошло гладко.

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

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

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

Теперь разработчики лучше документируют инструкции для компьютеров, чем для людей, поэтому очевидное решение, по-видимому, состоит в использовании комбинации nUnit (я знаю, что это не модульные тесты как таковые, но это встроенный тест для определенной цели). runner) и API Watin или Selenium, чтобы выполнить очевидные шаги браузера, вызвать веб-службу и объяснить специалистам по эксплуатации, как запускать эти модульные тесты. Я могу это сделать; В основном я это уже сделал.

Но было бы неплохо, если бы я мог сделать этот процесс еще проще?

На этом этапе ребята из отдела эксплуатации и компьютер должны будут знать, какой набор тестов относится к какой версии приложения, и сообщить исполнителю nUnit, на какой базовый URL-адрес он должен указывать (скажем, www.example.com = v3. 2 или test.example.com = v3.3).

Разве не было бы лучше, если бы средство запуска тестов имело способ дать ему базовый URL-адрес и позволить ему загрузить, скажем, zip-файл, распаковать его и автоматически отредактировать файл конфигурации перед запуском любых найденных там тестовых приспособлений?

Есть ли приложение с открытым исходным кодом, которое могло бы это сделать? Есть ли потребность в нем? Есть ли решение с использованием чего-то другого, кроме nUnit, может быть, Fitnesse?

Для протокола: я в первую очередь рассматриваю инструменты на основе .NET, потому что большинство разработчиков в первую очередь являются разработчиками .NET, но мы не женаты на нем. Если существует такой инструмент, использующий другие языки для написания тестов, мы с радостью адаптируемся, пока есть программа запуска тестов, работающая в Windows.


person pdr    schedule 16.04.2010    source источник
comment
Вы не можете хранить свои тесты в системе контроля версий? Это даст вам именно те тесты, которые вам нужны для определенной версии, просто проверив ее.   -  person BlueRaja - Danny Pflughoeft    schedule 16.04.2010
comment
Конечно могу, но как это решит проблему? Я говорю о том, что не разработчик может получить файлы, необходимые ему для данного развертывания. Если я полагаюсь на VCS, ему нужно будет проверить правильную версию и собрать ее — слишком сложно.   -  person pdr    schedule 16.04.2010
comment
ИМО, вы должны стремиться исключить из уравнения оперативников. Именно ваши специалисты по контролю качества (с соответствующими полномочиями) должны инициировать обновления Staging, проверять их, а затем инициировать обновление Live. Таким образом, отчасти необходима автоматизация, позволяющая уполномоченному специалисту по обеспечению качества делать это без прямого доступа к производственным серверам.   -  person Thomas    schedule 16.04.2010
comment
@ Томас, я понимаю твою точку зрения. На самом деле я не думаю, что это должны быть даже они. QA может решать, что развертывать, но именно бизнес решает, когда и, следовательно, именно он должен инициировать развертывание. По сути, это уже есть, но они запускают его по электронной почте в ops. Когда-нибудь у меня все будет автоматизировано, но детскими шажками, а?   -  person pdr    schedule 16.04.2010
comment
@pdr - RE: решение о развертывании. Согласованный. Вот куда я собирался с должным авторитетом. QA может довести его до стадии, благословить, а затем кто-то еще в бизнесе предоставит разрешение на запуск, и да, этот уровень автоматизации — это зверь для настройки.   -  person Thomas    schedule 16.04.2010
comment
Вы упомянули об использовании NUnit в качестве средства запуска тестов и Selenium для управления процессом тестирования веб-сайта. Не похоже, что потребуется много времени, чтобы научить ваших нажимающих кнопки управлять им. В качестве альтернативы вы можете выполнить некоторую автоматизацию с помощью средства запуска консоли NUnit (как это делается с CruiseControl.Net). Но я не уверен, как это будет работать с Selenium (хотя я ожидаю, что это сработает).   -  person Mike Chess    schedule 17.04.2010
comment
@thelaughingdm Согласен, что это не займет много времени, я просто пытаюсь максимально исключить возможность человеческой ошибки. Как ни странно, я даже не думал писать скрипт вокруг консольного раннера — иногда так легко упускаешь из виду очевидное.   -  person pdr    schedule 17.04.2010


Ответы (7)


Я работал писателем дымовых тестов для приложения asp.net. Мы использовали QuickTest Pro, автоматизация тестовых прогонов была выполнена с помощью Центр качества (был называется директором по тестированию). Это потребовало написания сотен тестовых сценариев, которые автоматизируют взаимодействие веб-браузера с веб-приложением. Эти тесты используются для проверки сборки перед ее развертыванием на наших рабочих серверах. Quality Center позволяет вам определить «пул» тестовых машин, чтобы вы могли запускать большой список тестовых сценариев в многопоточном режиме.

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

person rook    schedule 16.04.2010
comment
Да, я, конечно, не ищу глубокого покрытия кода; это все должно было быть сделано к этому моменту. Это просто: каждое приложение загружается и проходит через пару страниц или запросов на обслуживание без ужасных сбоев, потому что мы забыли инструкцию по развертыванию для конкретной версии. QuickTest Pro выглядит как качественный продукт, но тяжеловат для такого рода тестов; Мне нужно что-то, что оперативники смогут установить на свои домашние машины, кликнуть и запустить. - person pdr; 16.04.2010
comment
Если у вас есть сотни тестовых сценариев, это не дымовой тест, дымовой тест должен быть как можно меньше и быстрее — он просто говорит вам, есть ли смысл проводить какие-либо другие тесты. - person Ian Ringrose; 03.03.2011
comment
@ Ян Рингроуз, ооо, извините, я должен был сказать МНОГИЕ ТЫСЯЧИ. Но это действительно зависит от размера вашего приложения. - person rook; 04.03.2011

Я использовал Selenium в прошлом, чтобы делать подобные дымовые тесты для веб-развертываний. Вы можете написать набор тестовых сценариев, а затем запустить их на одном и том же сайте в разных средах.

person Jason    schedule 16.04.2010
comment
Как я уже сказал, я написал тестовый сценарий — на самом деле я сейчас использую Watin, но это детали. Вопрос в том, как сделать так, чтобы кому-то было легко подобрать сценарий, узнать, что он правильный для версии приложения, и запустить его. - person pdr; 16.04.2010
comment
@pdr: Не просите помощи в SO, если вы думаете, что все это знаете ... +1 Джейсону, ваш (скажем, Selenium) набор тестов должен соответствовать любой ветке / выпуску, над которым вы работаете. Ваша проблема заключается в том, что вы не практикуете непрерывную интеграцию и, следовательно, у вас есть глупый бессмысленный сценарий, который вы не утруждаете поддержкой. Это должно быть так же, как модульное тестирование: тесты проходят или вы не отправляете. Теперь вы, как разработчик, должны выяснить, как поместить правильный набор тестов в правильную ветку/выпуск и сделать ваш тестовый сценарий не глупым. - person SyntaxT3rr0r; 17.04.2010
comment
@WizardOfOdds - Я действительно думаю, что вам нужно еще раз прочитать и понять, прежде чем так нервничать. - person pdr; 17.04.2010

Я также обдумал эту последовательность и предложил использовать декларативный подход к развертыванию и проверке, см. мои мысли здесь,

http://jimblogdog.blogspot.co.uk/2010/10/introductiondeclarative-deployment.html

Я также создал несколько плагинов для моего проекта с открытым исходным кодом Wolfpack, чтобы автоматизировать весь этот процесс. По сути, вы упаковываете свои «дымовые тесты развертывания» как пакет NuGet и публикуете его в своем частном канале NuGet. Wolfpack автоматически обнаружит новую версию пакета и загрузит ее вместе с NuGet-пакетом NUnit.Runner и распакует все файлы. Затем он автоматически запустит ваши тесты с помощью средства запуска консоли NUnit и проанализирует результаты в виде предупреждения, которое вы можете получить по электронной почте, рычанию, хип-чату и т. д.

http://wolfpack.codeplex.com/

http://wolfpackcontrib.codeplex.com/wikipage?title=NUnitDeploymentPublisher

person jimbobdog    schedule 22.08.2012

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

person Jaxidian    schedule 16.04.2010

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

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

person John Fisher    schedule 16.04.2010

Как правило, ваших тестов nUnit достаточно, чтобы, если они все прошли, кодовая база работала нормально. Если вы развертываете код с прохождением тестов nUnit и сталкиваетесь со сбоем на веб-сайте, вам необходимо добавить дополнительный nUnit, который также не работает по той же причине. Затем, когда вы исправляете свой код так, что nUnit проходит, вы знаете, что устранили проблему, которая была у развернутого кода. По этой причине большинство систем автоматической сборки можно настроить так, чтобы сначала автоматически запускались все тесты nUnit, а затем «проваливалась» сборка, если какой-либо из тестов не пройден.

person GWLlosa    schedule 16.04.2010
comment
Предположим, что к моменту развертывания приложение уже создано и протестировано. Он также прошел проверку качества перед запуском в производство. Но иногда возникают проблемы с развертыванием, обычно из-за того, что об изменении конфигурации не сообщается отделу эксплуатации. По этой причине нам нужен дымовой тест для последующего развертывания. вот это я и обсуждаю - person pdr; 16.04.2010
comment
@pdr: перестань разговаривать с другими, как если бы ты был на какой-то высокой лошади. Люди объясняют вам, что вы думаете, что ваше приложение было полностью протестировано, но на самом деле это не так. У тебя проблема, да? А в чем твоя проблема? Какой-то свободно плавающий тестовый скрипт, который никто не знает, какую версию он должен тестировать. Это должно находиться в ветке/выпуске версии для тестирования, и вы не должны развернуть приложение, которое проходит модульный тест, но не выполняет этот сценарий. Видеть? Здесь мы используем Selenium/Mercurial, и у нас ровно ноль проблем. Вот что я обсуждаю. - person SyntaxT3rr0r; 17.04.2010

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

person pdr    schedule 12.08.2010
comment
Рофл, а этот ответ полная хрень. Вы пишете и обновляете свой тестовый сценарий прямо рядом с приложением. Для этой версии приложения этого скрипта нет. Приложение и тестовые сценарии объединены в одно решение. У вас есть приложение v3.2, у вас есть скрипты v3.2 прямо рядом с ним в репозитории. Ваш сервер CI развертывается, а затем запускается сценарий как один рабочий процесс/процесс. Я уверен, что сообщество проголосует за правильный ответ для вас. - person Sleeper Smith; 05.09.2013