Стоит ли прилагать усилия для написания тестов, которые работают с браузером (например, с использованием селена или чего-то еще)? - PullRequest
6 голосов
/ 07 мая 2009

Совершенно очевидно, что стоит написать тесты для вещей, которые происходят на стороне сервера, но я слышал, что действительно сложно написать модульные тесты для UI, и они хрупкие и ненадежные. Мне бы хотелось иметь больше уверенности в том, что сделанные мной изменения не нарушат основные части страниц импорта на моем сайте.

Есть мысли или переживания?

Ответы [ 5 ]

4 голосов
/ 07 мая 2009

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

Распространенной ошибкой является использование тестов пользовательского интерфейса в качестве замены других тестов. Теоретически, вы можете протестировать множество функциональных возможностей с помощью тестов пользовательского интерфейса, но есть много проблем с этим подходом. Для начала, некоторые функции могут быть очень трудно протестировать непосредственно в пользовательском интерфейсе (особенно в исключительных условиях). Во-вторых, если тест не пройден, часто трудно понять, в чем причина проблемы. Наконец, чем больше путей кода вы тестируете в тестах пользовательского интерфейса, тем медленнее становятся тесты пользовательского интерфейса. Если вы полагаетесь только на медленные тесты, ваша производительность ухудшается, что увеличивает искушение просто «временно» отключить неработающие тесты.

Мой совет - как можно больше тестировать в модульных тестах и ​​интеграционных тестах, создавать хорошее разделение между вашим пользовательским интерфейсом и бизнес-логикой, а также использовать пользовательские тесты для выявления / предотвращения ошибок, которые невозможно проверить в других видах тестов. .

Если у вас много тестов, рассмотрите возможность создания нескольких наборов. Я создаю один набор для тестов пользовательского интерфейса, один для интеграционных тестов и один для модульных тестов. Модульные тесты очень быстрые, поэтому я запускаю их по мере разработки своего кода (часто через TDD). Эти тесты помогают мне быть продуктивным.

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

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

LoginPage loginPage = new LoginPage(selenium);
HomePage homePage = loginPage
    .enterUserName(TestUsers.Alice.USER_NAME)
    .enterPassword(TestUsers.Alice.PASSWORD)
    .submit();
assertThat(homePage.getBreadcrumbs(), equalTo("Home"));
3 голосов
/ 07 мая 2009

Это легко, может быть сделано не очень чутким человеком и определенно стоит затраченных усилий. Тестирование пользовательского интерфейса сложно для настольных приложений, не так сложно для веб-приложений, потому что вы можете перемещать элементы управления, а селен все равно сможет найти их в HTML. Не беда для бедных разработчиков настольных систем.

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

2 голосов
/ 07 мая 2009

Я использовал их как часть разработки. Самое замечательное в них то, что вы можете выполнять их также в IE (для этого вам нужен сервер селена) Я использовал их только на стадии разработки и не воспринимал их как юнит-тесты. если я делаю некоторую специфическую логику пользовательского интерфейса, они очень помогают.

самое важное - назначить идентификатор всем используемым HTML-элементам. без этого тесты очень хрупкие. Использование комментариев также поможет.

1 голос
/ 07 мая 2009

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

Да, они хрупкие, и да, это боль, заставляющая сумасшедшие пути селекторов работать правильно ...

0 голосов
/ 07 мая 2009

Вы можете использовать browsershots.org , чтобы проверить внешний вид ваших страниц практически в любом браузере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...