Тестирование GUI
Я работаю над проблемой тестирования моего графического интерфейса, и я не совсем уверен в том, что здесь лучше. Мой GUI построен с использованием традиционной инфраструктуры MVC, поэтому я легко могу тестировать логические части GUI, не вызывая сам GUI. Тем не менее, когда дело доходит до тестирования функциональности графического интерфейса, я не совсем уверен, стоит ли мне беспокоиться об индивидуальном тестировании компонентов графического интерфейса или мне следует сосредоточиться в основном на функциональном тестировании системы. Это довольно сложная система, в которой тестирование графического интерфейса часто включает отправку сообщения на сервер и последующее наблюдение за ответом в графическом интерфейсе. Мои первые мысли состоят в том, что функциональное тестирование - это путь, так как мне нужна целая система, работающая для реального тестирования интерфейса. Комментарии по этому вопросу будут оценены.
Спасибо джефф
13 ответов
У вас есть (как минимум) 2 проблемы - сложность среды (сервера) и сложность графического интерфейса.
Существует множество инструментов для автоматизации тестирования GUI. Все они более или менее хрупкие и требуют постоянного постоянного обслуживания перед лицом изменения макета. Их можно извлечь выгоду, но это долгосрочная выгода.
Окружающая среда, с другой стороны, является областью, которую можно приручить. Если ваше приложение спроектировано с использованием метода Dependency Injection / Inversion (где вы "внедряете" серверный компонент в приложение), вы можете использовать "макет" соответствующих серверных интерфейсов, чтобы позволить вам создавать сценарии тестирования.
Объединение этих двух методов позволит вам автоматизировать тестирование GUI.
Одна заключительная мысль - удачи!
Другие инструменты тестирования GUI, которые я могу предложить: Thoughtworks White, PyWinAuto, AutoIt, AutoHotKey.
Когда вы пытаетесь автоматизировать графический интерфейс, имейте в виду, что единственный способ сделать это - создать графический интерфейс с учетом автоматизации. Разработчики Crush, которые думают, что их GUI не должны поддерживать тестируемость на ранних этапах проекта, и с радостью раскрывают все возможности, которые могут помочь в автоматизации по требованию, когда этого требуют ваши требования тестирования.
В зависимости от того, где вы находитесь в спектре MVC (это чрезмерно используемый термин), тестирование представления может быть механическим процессом, гарантирующим, что правильные методы модели вызываются в ответ на правильные входные данные для представления для тестирования некоторой клиентской проверки для кто знает.
Многие шаблоны, разработанные на основе MVC (я думаю, пассивное представление, контролирующий контроллер), стремятся сделать так, чтобы представление требовало очень небольшого тестирования, потому что на самом деле это просто подключение пользовательских вводов к докладчику или модели (в зависимости от точного вариант шаблона вы используете).
"Тестирование GUI часто включает в себя отправку сообщения на сервер и последующее наблюдение за ответом в GUI". Это утверждение меня беспокоит.
Я сразу же думаю, что графический интерфейс должен быть протестирован с использованием макета или заглушки сервера, чтобы проверить, что происходят правильные взаимодействия, и графический интерфейс реагирует соответствующим образом.
Если вам нужны автоматические функциональные тесты сервера, я не вижу необходимости вовлекать в это GUI.
Mercury QuickTest Pro, Borland SilkTest и Ranorex Recorder являются некоторыми инструментами тестирования GUI.
Мы включаем тестирование GUI в наш проект, и это имеет свои побочные эффекты. Разработчики, однако, придерживаются одного важного принципа: держите слой GUI как можно тоньше!
Это означает отсутствие логики в классах GUI. Разделите это в моделях презентаций, отвечающих за проверку входных данных и т. Д.
Для тестирования на Unix-машине мы используем сервер Xvfb в качестве дисплея при запуске тестов.
Самый ясный способ, которым я могу сказать это:
Не тратьте свое время на написание автоматических тестов GUI.
Особенно, когда вы работаете с приложением MVC - в вашем случае, когда вы отправляете сообщение на сервер, вы можете убедиться, что верный номер сообщения вернется и будет готово. Вы можете добавить несколько дополнительных случаев или другой тест полностью, чтобы убедиться, что GUI преобразует идентификаторы сообщения в правильные строки, но вам просто нужно запустить этот тест один раз.
Попробуйте тест на удобство использования в коридоре. Это дешево и полезно: идите в ближайший коридор, возьмите первых проходящих мимо людей, заставьте их сесть за ваш компьютер и используйте ваше программное обеспечение. Следите за их плечами, вы увидите, что они пытаются делать, что их расстраивает и так далее. Сделайте это несколько раз и обратите внимание на закономерности.
Мой совет: забудьте традиционное тестирование GUI. Это слишком дорого. Кодирование тестов занимает много времени, инструменты не очень стабильны, поэтому вы получите ненадежные результаты тестов. Связь между кодом и тестом очень прочная, и вы потратите много времени на обслуживание.
Новая тенденция - игнорировать тесты GUI. См. Образец ModelViewPresenter от Фаулера в качестве текста ссылки.
Не пропустите "U" в "GUI"
Я имею в виду: если то, что вы пытаетесь проверить, все работает правильно и работает так, как было запланировано, то вы можете последовать ответу Себа Роуза.
Но, пожалуйста, не забывайте, что пользовательский интерфейс должен быть ориентирован на ПОЛЬЗОВАТЕЛЕЙ, и не на ЛЮБОГО пользователя, а на ПОЛЕЗНОГО ПОЛЬЗОВАТЕЛЯ, для которого было создано приложение. Итак, после того, как вы убедитесь, что все работает так, как нужно, поместите каждый вид / экран / форму в тест с командой, состоящей из пользователей, представляющих каждую группу разных пользователей, которые могут использовать ваше приложение: опытные пользователи, администраторы, MS Office пользователи, пользователи с низким компьютерным профилем, пользователи с высоким компьютерным профилем... а затем, получите критические отзывы каждого пользователя, сделайте микс, повторно коснитесь вашего GUI, если он необходим, и снова вернитесь к тесту пользователя GUI.
Для SIMPLE веб-тестирования GUI попробуйте iMacros (простой плагин Firefox, имеет классную функцию для отправки всего теста другому человеку). Обратите внимание, что SIMPLE был написан с помощью Initials ...
Я обнаружил, что WinTask - очень хороший способ тестирования GUI. При условии, что вы не будете постоянно менять способ, которым ОС ссылается на каждый элемент пользовательского интерфейса, WinTask обращается к элементам пользовательского интерфейса по имени, поэтому даже если макет меняется, элементы пользовательского интерфейса все равно можно нажимать / настраивать / выбирать.
То, что вы ищете, это "приемочные испытания". То, как вы это сделаете, зависит от того, какие платформы вы используете, какое приложение вы создаете и на каком языке. Если вы гуглите свою конкретную технологию и приведенную выше фразу, вы должны найти некоторые инструменты, которые вы можете использовать.