А что подразумевается под "обычными" приложениями и как вы их тестируете?
А если по теме -- то ничем. Юнит тесты везде одинаковы. End-to-end легко реализовать через dependency injection, rewiring и любую библиотеку тестирования которая придет в голову. Многие фреймворки из под коробки поддерживают e2e.
Системное тестирование и continuous integration тем более не отличается. Его принципы не зависят от платформ реализации.
Единственный момент который может Вас смутить в веб-приложении это потребность постоянной слежки за каналом связи, и другие инструмменты для "ручной" проверки, но это вроде бы очевидные вещи...
Наличием сетевого взаимодействия, которое нужно протестировать в различных условиях, а для отладки помимо отладчика использовать сниффер.
Наличием сервера и клиента, которые оба нужно тестировать.