Rails приемочного тестирования с использованием "API тестирования" для контроля состояния на стороне клиента
В настоящее время я оцениваю, как протестировать довольно большое и сложное веб-приложение на основе Rails 4 на стороне сервера и EmberJS на стороне клиента. В нашем приложении клиент общается исключительно через спокойный JSON API с сервером.
До сих пор мы провели много модульных тестов на базе Konacha и теперь готовы настроить интеграционные / приемочные тесты. Мы не уверены, стоит ли нам начинать писать сквозные тесты, то есть тесты, включающие в себя работающий экземпляр нашего сервера, или же мы должны пойти на интеграционное тестирование API и клиентской части по отдельности.
На данный момент наш предпочтительный выбор - сквозное тестирование, потому что мы боимся, что в случае интеграционного тестирования API и клиента по отдельности мы удвоим усилия по созданию и поддержке тестов, и что могут быть крошечные, небольшие особенности общения между API и клиентом, который мы не могли поймать.
Что ж, нам нравятся современные и быстрые среды тестирования, такие как Konacha, поэтому мы не хотим использовать Selenium. Не только потому, что он немного староват, но и потому, что его производительность довольно низкая. Тем не менее вам нужно будет управлять созданием ложных данных на сервере и перезагрузкой сервера, поэтому мы пришли к следующему подходу:
Мы реализовали API тестирования, который концептуально используется для управления состоянием сервера, например, он имеет следующие методы:
GET /api/test/setup # Simple bootstrapping of the database, e.g. populate table with ISO language codes etc...
GET /api/test/reset # Reset the database, using `database_cleaner` gem
Тестовый случай Конаша будет тогда вызывать setup
а также reset
до и после каждого теста соответственно.
Что вы думаете об этом подходе?
1 ответ
Не уверен, что я бы назвал тестирование API и клиента по отдельности, но даже если вы подумаете о том, чтобы запустить этот вид теста, вам все равно стоит пройти сквозной тест.
Так что да, я думаю, что ваша идея пройти сквозное тестирование очень хорошая.
Ваша идея настроить простые команды, позволяющие автоматизировать тестирование вашей системы (команды настройки и сброса), также очень хороша. Будьте готовы добавить больше во время автоматизации - хотя сквозное тестирование концептуально является тестом "черного ящика", в действительности это часто тест "серого ящика", то есть вам потребуется доступ к внутреннему состоянию вашей системы. Я бы назвал это "интерфейсом эксплуатации и обслуживания" тестируемой системы.