Извините за спорный титул здесь!
Я провел честное тестирование на основе браузера (JS-тяжелых веб-страниц), используя библиотеки Selenium и Selenium, такие как Capybara. Всегда было большой болью на шее, чтобы тестовые наборы работали последовательно. Да, я знаю, что вместо того, чтобы вставлять вызовы на sleep()
здесь и там, вы должны ждать, пока элементы DOM станут видимыми или будут соответствовать другим условиям yadda yadda. Это все хорошо, и это немного помогает. Я бы подумал, что я не делаю это совершенно правильно, если бы это было не так...
Если бы это было не по времени, прежде чем я когда-либо писал код Селена, когда компания, с которой я консультировалась, наняла фирму, которая специализируется исключительно на написании наборов тестов Selenium. Они отправили парня, который предположительно был экспертом в Selenium, и он написал полный набор тестов для нашего веб-приложения. Нужно ли вам рассказать, что произошло, когда мы действительно использовали тестовый пакет?
Я пришел к выводу, что весь подход, который использует такие инструменты, как использование селена, зависит от большого состояния гонки. У вас есть тестовый процесс и отдельный процесс браузера, которые говорят через сокет. Процесс тестирования отправляет запросы в браузер, чтобы узнать состояние DOM, и , когда браузер продолжает работать, вычисляет, что делать. Затем он отправляет отдельное сообщение в браузер для имитации щелчка или нажатия клавиши и т.д.
Если вы когда-либо писали многопоточные программы, вы знаете, что это просто не работает. Это гонка "чек-то-акт". Если тестовый процесс может заморозить выполнение JS в браузере, запросить его состояние, выпустить имитированные клики/нажатия клавиш, а затем разморозить браузер, тогда все будет в порядке. (Как использование блокировки для защиты критического раздела многопоточной программы.)
Единственный способ, которым я могу думать о том, чтобы обойти состояние гонки, - это для каждого тестового примера, который должен быть написан в JS. Это, конечно, исключает тестовые примеры, которые охватывают навигацию по нескольким страницам. Вам также нужен способ сброса страницы в "чистое" состояние в начале каждого тестового примера.
Кто-нибудь знает инструмент/подход для тестирования JS-приложений в браузере, которые позволяют смертным, таким как я, создавать тестовые сеты, которые работают на 100% последовательно, без вырывать все мои волосы?
(PS. Еще один вывод из опыта работы с Selenium: у многих бесплатных плагинов jQuery есть ошибки, которые не появляются, когда люди используют эту страницу, просто потому, что они не могут нажимать так быстро, как Selenium!)