Lab Management: тонкости запуска Coded UI Tests и Ordered Tests

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

Мне показалось, что использование Ordered Tests очень удобно подходит для реализации тестов верхнего уровня, которые просто представляют набор из вызова базовых “кирпичиков”. По привычке, Oredered Test были помещены в одельную папку внутри проекта.

Запуск тестов из IDE проходит без проблем, а вот если “автоматизировать” test case, и попробовать его прогнать через Microsoft Test and Lab Management (MTLM) в виртуальной среде, то возникает проблема – запуск завершается с ошибкой “Cannot find the test ‘<имя_теста>’ with storage ‘..\bin\debug\<имя_сборки_с_тестами>.dll’.”.

На первый взгляд, меня смутил относительный путь, проставленный IDE. Но ведь там то всё работает, даже если запускать “Release” конфигурацию! Ситуация прояснилась, при внимательном рассмотрении папки, которую готовит для запуска тестов IDE и папки с результатами сборки продукта при помощи Team Build, которую использует MTLM.

Собака порылась в местолоположении файла .orderedtest – IDE его кладёт рялдом с бинарниками перед запуском, а MTLM, нет. Это, безусловно, баг (уж не знаю, как его правильно решать – скорее всего, на стороне MTLM), так как поведение IDE отличается от поведения MTLM, если файл .orderedtest лежит не в корне проекта, а в подпапке, и, соответсвенно, копируется в OutDir при сборке с соблюдением иерархии.

Пошёл писать баг коллегам из Микрософта.

25 Responses to Lab Management: тонкости запуска Coded UI Tests и Ordered Tests

  1. Владимир, добрый день.
    Вот я и нашел рускоязычного человека, который на практике использует UI Coded Tests.
    Дело в том, что мы используем TestComplete для GUI тестов (наверное слышали о таком продукте). Недавно начали переход на TFS 2010 (до этого TFS не использовался). Соотвественно GUI-тесты так же нужно будет интегрировать, благо с TestComplete идет аддон который добавляет в студию новый тип теста (TestComplete.Test).

    К чему я это все?

    К тому что перед этим я проводил небольшое исследование по просьбе директора по производству насчет «а не перейти ли нам на Coded UI Tests…». После проведенного исследования данный переход был отложен по той причине, что насколько я понял VS предоставляет лишь возможность выполнять какие то действия с UI и делать несложные проверки. Тогда как специализированные продукты имеют огромное количество вспомогательных модулей и расширений, которые реализуют необходимый при автоматизированном тестировании UI функционал.

    А теперь вопрос:
    -У вас в UI-тестах используются только простые проверки?
    -Весь необходимый дополнительный функционал (такой как поддержка Data-Driven, поддержка нестандартных контролов стронних производителей,поддержка распределенного выполенения тестов, заточенная под UI-тестирование система логирования и т.д) вы разрабатываете сами?
    -Возможно я зафачил исследование и на самом деле в студии это все тоже делается довольно просто…

    PS: Просто мне показалось что Coded-UI еще сыроват…

    • Здравствуйте Виталий,

      К слову сказать, до появления VS 2010 мы использовали TestComplete, и продолжаем его использовать для уже написанных тестов.

      Лично у меня нет практического опыта использования TestComplete, так что сравнивать не могу — могу только рассказать, что знаю о UI Coded Tests.

      С точностью до багов (которые были, есть и будут в любом софте), не могу согласится с тем что эта функциональность сыровата. Технология базируется на уже отработанной методике Unit Test Framework, которая была доступна и в VS 2008. поддержка Data-driven тестов там уже была, кстати.

      Скорее всего у Вас сложилось подобное мнение в силу того, что подход к написанию UI Coded Tests в VS сильно отличается от уже существующих инструментов, рассчитанных на тестировщиков а не на программистов. Хотя, возможно, я ошибаюсь в силу своего поверхностного знания TestComplete.

      Я сторонник подхода к тестировщику, как к Software Engineer on Test, проще говоря — тот же программист, только он пишет другую программу.🙂

      Для таких, в VS 2010 есть полный функционал — С#/.Net Framework. Причём, делается всё действительно просто. А уж в комбинации с Lab Management — почти любые фантазии доступны.

      Что Вы понимаете под простыми проверками? Например, для нашего «облачного» продукта «Quest OnDemand Recovery for Active Directory», UI Coded Test покрывает полное прохождение типичного сценария пользователя от регистрации на web сайте, до установки локального агента, и затем backup/recovery AD, включая сравнение объектов AD до и после восстановления.

  2. Владимир, спасибо за ответ.

    Я как раз так же сторонник того, что бы по возможности использовать полноценные инструменты для автоматизации тестирования типа VS/.Net Framework с соответсвующим подходом к инженеру по автоматизации и с соответсвующей квалификацией самого инженера.

    Думаю после того, как мы окончательно перейдем на использование TFS, займусь этим вопросом более плотно…

  3. Константин:

    Здравствуйте. Я слышал об упоминании custom controls — не всегда Coded UI находит правильный контрол если он Custom-ный, отсюда и вообще все грабли, ComboBox не работает при попытке выбрать объект мышкой из списка, приходится tab-ами и стрелочками пользоваться, но и это не всё, очень много ньюансов есть при попытке воспроизводить действия для wpf приложений с кастомными контроллами…

    • Илья:

      Для того, чтобы выбрать нужную строку в comboBox достаточно использовать код вида:
      public void mUser1SetZTPFilter(int index)
      {
      #region Variable Declarations
      UIMap mUIMap = new UIMap();
      WpfComboBox cmbFilter = mUIMap.MainWindow.ZTPManageUserControl.ListCtrl.FilterComboBox;
      #endregion
      if (cmbFilter.SelectedIndex != index)
      cmbFilter.SelectedIndex = index;
      return;
      }
      Описание: метод устанавливает переданное значение индекса в WPF comboBox, если текущее значение индекса отлично от переданного.

  4. Константин:

    Интересно было бы узнать — как можно побороть custom controls.

  5. Так как это сильно зависит от самого control-а, могу только посоветовать поиграться руками с критериями поиска. Рекордер по умолчанию записывает много лишних условий — может, в этом проблема. Кстати, в feature pack 2 редактор значительно улучшен, попробуйте его. Да и проблем там полечили какое-то количество.

  6. Илья:

    Добрый день. Раньше тоже использовали TestComplete. Однако, этот инструмент показал себя гораздо менее гибким и функциональным, чем VS 2010. Заметил, что эти инструменты по-разному обращаются к объектам. Например с некоторыми WPF объектами работать легче в TestComplete, с другими — в VS. В худшем случае с такими объектами работать было можно только по координатам, т.к. ним не удавалось обратиться. В VS тесты приходится писать вручную, т.к. автоматический построитель UI тестов создает кривой код. Это проявляется в русско-английских названиях контролов и форм, а также, при возрастающей нагрузке возникает проблема тайм-аутов. Основная проблема, с которой приходится сталкиваться звучит так: один и тот же объект в разных сессиях не считается тем же объектом. Например на форме 1 нажали на кнопку, перешли на форму 2, снова вернулись на форму 1, чтобы нажать на ту же кнопку, а получаем ответ, что контрол не найден. С этой проблемой VS српавляется значительно лучше, позволяя вручную подправить код и создать новый экземпляр карты объектов.

    • anemon:

      Здравствуйте. А можно поподробнее насчет проблемы того что контрол при повторном переходе на страницу оказывается ненайденным? VS генерирует новый обьект, и, кажется, с неправильными параметрами хочет,например,кликнуть на кнопку. Файл UIMap.Designer.cs править нельзя т.к. при перезаписи теста код стирается.. Где же «подправить код и создать новый экземпляр карты объектов»?

      • Здравствуйте. UIMap править можно и нужно. Попробуйте открыть этот файл — откроется специальный дизайнер. Там можно добавить или отредактировать UI элементы, а также поправить критерии поиска. По-умолчанию, их там слишком много, что приводит к долгому поиску или случайным сбоям. Кстати, для редактирования рекомендую поставить Feature Pack 2.

  7. anemon:

    Спасибо за ответ. Проблема была в том что тест не находил кнопки вообще — решилась установкой свойства в окне ненайденного контрола SearchConfig = SearchAlways.
    Хотелось бы узнать еще насчет воспроизведения теста: тест почемуто очень медленно воспроизводит действия на некоторых экранах, а точнее, как будто чего ждет, хотя в это время ничего на форме не происходит.
    Например: на сайте заполняю форму1 с полями,делаю сабмит, который редиректит на страницу просмотра заполненных полей. Здесь при записи я нахожусь около 3сек и жму кнопку Закрыть(без постбэка, просто закрывает окно). Так вот, при воспроизведении теста, он находится на странице просмотра информации около 40сек и потом жмет кнопку Закрыть. Что он там делает?.. В коде никакой информации по delay нет, только ставится Playback.PlaybackSettings.ContinueOnError, что врятли вляет на задержки в воспроизведении..
    Ктото сталкивался с подобной проблемой?

    • Скорее всего, он пытается идентифицировать эту страницу. Попробуйте руками уменьшить количество условий для её поиска.

    • sokol_jack:

      Вот что мы используем из настроек для CodedUI tests сейчас:
      Playback.PlaybackSettings.WaitForReadyLevel = WaitForReadyLevel.Disabled;
      Playback.PlaybackSettings.ShouldSearchFailFast = true;
      Playback.PlaybackSettings.SkipSetPropertyVerification = true;

      Все бегает намного быстрее.

  8. DmitryV:

    Здравствуйте Владимир!
    Не подскажите ли по тестированию GUI-аппликаций, написанных на VC++ (VStudio 6) с использованием MFC и Stingray . Жизненный цикл тестируемой аппликации начинает поражать воображение своей длительностью и в обозримом будущем также будет необходимо регрессионное тестирование перед выпуском новых релизов. Используемый сейчас TestComplete ( как и ранее WinRunner) не идентифицирует часть элементов управления Stingray ( с MFC проблем нет)
    Сегодня я начал пробовать (учиться использовать) Coded UI на примере этой апплкации. Это займет какое-то время пока я получу ответы на эти вопросы.
    Может быть у Вас или у других читателей блога есть уже готовые ответы о возможности (или невозможности) применения Coded UI для тестирования GUI-аппликаций с элементами управления на базе библиотек Stingray?
    Спасибо.
    С уважением
    Дмитрий

  9. Здравствуйте Дмитрий,

    С Stingray не пробовал, не подскажу.😦

  10. Владимир, подскажите пожалуйста, разрешилась ли проблема с Ordered tests? У меня сейчас та же ситуация: ordered test не запускается, если находится подпапке. И актуальна ли эта проблема для других типов тестов? Планируем разгрести накопившуются кучу тестов в нашем проекте по папкам, если с этим не будет проблем.

    Спасибо.
    С уважением, Елена.

    • Елена,

      Я не проверял решена ли эта проблема в SP1 или в последнем пакете обновлений. Подозреваю, что нет, так как есть workaround. А у Вас все свежие обновления стоят?

      К другим типам тестов это не применимо, так как они в бинаром виде самодостаточны и перед запуском все сборки и их зависимости будут перемещены в папку для запуска.

      Спасибо,
      Владимир.

      • Владимир,

        А расскажите подробней про workaround.
        У нас из обновлений установлены SP1 на 2008R2 и VSTFS 2010.

      • Что-то wordpress глюичит — не даёт ответить на Ваш коментарий…

        Итак по порядку. Я бы поставил TFS/VS Sp1 + Test Manager Feature Pack + все свежевыпущенные comulative updates для них. Всё это надо поставить и на виртуалки тоже. Если всё ещё будет воспроизводиться то обойти это можно очень просто — помещать ordered test в корневую папку проекта.

      • Спасибо! Будем пробовать обновления.

  11. Антон:

    Добрый день.

    Столкнулся со следующей ситуаций: пишу автотест для веба.
    Там следующая ситуация:
    1. Есть основная форма со списком клиентов.
    2. В этом списке выбираем запись и жмем кнопку «Открыть».
    3. Форма с данными по выбранной записи открывается как бы во всплывающем окне.

    При попытке обойти рекордером все поля формы с данными — он определяет поля.

    Но при последующем воспроизведении теста — он ищет эти поля не в форме с данными, а в основной форме.

    Например,
    #region Variable Declarations
    WinEdit uIФамилияEdit = this.UIAKSiклиникаMozillaFiWindow.UIФамилияRow.UIФамилияEdit;
    #endregion

    // Щелчок «Фамилия:» text box
    Mouse.Click(uIФамилияEdit, new Point(25, 7));
    Keyboard.SendKeys(uIФамилияEdit, «Дурья», ModifierKeys.None);

    Поле не находится и тест валится в Exception:
    Microsoft.VisualStudio.TestTools.UITest.Extension.FailedToPerformActionOnBlockedControlException: Дополнительные сведения Элемент управления блокируется другим элементом управления. Переведите блокированное управление в видимый режим и повторите действие.:
    TechnologyName: «MSAA»
    Name: «AKSi-клиника — Mozilla Firefox»
    ControlType: «Application»
    —> System.Runtime.InteropServices.COMException: Исключение из HRESULT: 0xF004F003.

    Контролы написаны на ExtJS и они динамические.

    • Если посмотреть по стеку исключения, он ломается на Mouse.Click?

      • Антон:

        Да, при попытки сделать клик — клик пытается сделать на основной форме, а не на всплывшем окне. Т.о. получается, что он не может тыкнуть нужный контрол.
        Пока решили сию проблему при помощи переходов по TAB, но этот вариант немного напрягает, хотелось бы все же привязаться к контролам.

    • Пробовали ужесточить фильтры поиска?

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: