Организация автоматизированного тестирования Qt GUI |
17.03.2009 18:06 |
Автор: Евгений Россинский Оригинальная публикация: http://blog.netstream.ru/2009/03/squis/ При разработке мы стараемся покрывать наш код не только матом, но и unit тестами. Однако все покрыть тестами не всегда получается. К тому же, остается GUI, для которого написание тестов довольно трудоемкая работа. При всех этих проблемах неизменным остается требование, что каждый следующий камит в репозиторий не должен портить уже существующий функционал. В этой статье я хочу рассказать какой инструментарий мы используем для тестирования наших desktop приложений, написанных на Qt. Пол года назад в ходе исследования инструментов для тестирования GUI в поле моего зрения попал продукт Squish компании froglogic. Из плюсов данного решения можно отметить следующие:
На другую чашу весов легла стоимость лицензии 93 000 руб. (это по августовскому курсу 2650 евро). Поскольку из конкурентов подобных вкусностей за такие деньги никто не предлагал, а аналогичных бесплатных решений я не нашел, скрепя сердце я купил лицензию. Итак, с предысторией закончено, перейдем к созданию тестов. Для демонстрации я выбрал один из наших публичных проектов — MDC. Задача простая, проверить может ли MDC подключится к ICQ, Gtalk, mail.ru. Тема особенно актуально в свете последних сюрпризов компании AOL :). Признаком подключения будем считать появление окна контакт листа.
Таким образом мы получили текст теста, который будем использовать как основу.
Использовать данный текст без изменений конечно можно и для обширного спектра задач этого вполне достаточно, что дает возможность работать со Squish не только разработчикам, но и менее квалифицированным сотрудникам, однако для нашей задачи данный код не подходит. Squish поддерживает 2 вида именования объектов: symbolic name и real Name. При автоматическом создании текста теста Squish использует symbolic name, что не всегда удобно. Так, например, окно контакт листа автоматически определяется как
где MDC v1.0.3.1.nightly это title окна, а CContactListWidget — тип данного видгета. В заголовке окна присутствует версия, которая вполне очевидно будет меняться и объект, заданный таким образом никогда не будет найден. В этом случае надо применять real name: {name='contactList' type='CContactListWidget' visible='1'}. Где name устанавливается константой в коде MDC через setObjectName
Таким образом, не зависимо от заголовка окна мы всегда сможем найти нужный нам widget и итоговый код нашего теста будет выглядеть следующим образом:
Из него легко сделать скрипт тестирования подключения к jabber и icq, заменив логин, пароль и координаты клика. На видео ниже показан запуск test suit, состоящий из трех test case (icq, mail.ru, jabber ) После чего этот test suit можно заставить выполняться после отработки unit тестов при каждом следующем камите, что бы всегда иметь под рукой вот такую красивую картинку (нажмите на картинку, чтобы посмотреть увеличенную версию): Но это уже другая история, о которой, если это будет интересно, я тоже с удовольствием напишу. В этой статье я только вскользь коснулся функциональных возможностей Squish умышленно не касаясь таких вопросов, как синхронизационные примитивы, работа с объектами Qt через API. Об этих вещах я планирую написать в следующих постах. Обсудить в форуме |