2012-05-15 3 views
8

У меня есть приложение iOS, и я хочу включить его в непрерывную интеграцию. Стратегия, которую я использую для этого, заключается в попытке запустить тесты из командной строки.Не удается запустить UIAutomationTest из командной строки

Я пытаюсь сделать это с помощью следующего сценария:

TRACETEMPLATE="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Instruments/PlugIns/AutomationInstrument.bundle/Contents/Resources/Automation.tracetemplate" 
instruments -t $TRACETEMPLATE build/Release-iphonesimulator/MyApp.app -e UIACSCRIPT "UnitTests/SomeTest.js" 

SomeTest.js простой Javascript файл, который можно запустить в Instrumentation внутри Xcode, и она работает. Я строю свою заявку, используя:

xcodebuild -alltargets -sdk iphonesimulator5.1 

и это создает MyApp.app. Я могу запустить приложение из Xcode в тренажере просто отлично, однако, когда я пытаюсь запустить с помощью инструментов, я получаю окно о том, что существует неизвестная ошибка и в командной строке печатается:

2012-05-15 15:32:59.928 instruments[17548:1d03] Recording cancelled : At least one target failed to launch; aborting run 
Instruments Trace Error : Failed to start trace. 

Может ли кто-нибудь дать мне какую-либо помощь/предложения о том, что может произойти, и как я могу это исправить?

Кроме того, он всегда открывает iPad-симулятор? Могу ли я сделать так, чтобы он открыл любой симулятор, который я хочу?

+0

У меня точно такая же проблема, и я не могу ее решить :( – Roger

+0

Я пока не нашел решение. Я попробую рассказать о собственных форумах Apple, чтобы узнать, придумали ли они что-нибудь. – Rafael

ответ

6

Я получал такую ​​же ошибку и чуть не вытащил свои волосы, пытаясь ее решить. Сообщения об ошибках абсолютно бесполезны.

В чем проблема: для меня был файл .app, на который я указывал. Как только я нашел «правильный» файл .app, который был глубоко похоронен в папке 5.1 Simulator, я смог наконец запустить тесты UIAutomation из командной строки с Xcode 4.3.

Путь к .app, который работал для меня:

~/Library/Application\ Support/iPhone\ Simulator/5.1/Applications/{string-of-numbers-and-letters}/MyApp.app/ 

Вот полная команда, я использую для запуска UIAutomation тестов из командной строки с Xcode 4.3:

instruments -t /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Instruments/PlugIns/AutomationInstrument.bundle/Contents/Resources/Automation.tracetemplate ~/Library/Application\ Support/iPhone\ Simulator/5.1/Applications/{string-of-numbers-and-letters}/MyApp.app/ -e UIASCRIPT /Path/To/TestFile.js 

Надеюсь, это поможет кому-то другому, поскольку документации для этого крайне не хватает.

Update

Обратите внимание, что по состоянию на Xcode 4.5.2, автоматизация расположение шаблона изменилось от того, на мой первоначальный ответ:

/Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns/AutomationInstrument.bundle/Contents/Resources/Automation.tracetemplate 
+0

Спасибо, это сработало! Я не знаю, могу ли я поместить это на сервер ci (хотя не думаю, что мой Makefile обновит приложение там, я буду тестировать позже и посмотрите, работает ли он ...) – Rafael

+0

Эй, @ spotdog13, я получаю эту ошибку, когда я ее запускаю - «Ошибка: целевое приложение, похоже, умерло Инструменты Trace Complete' – Legolas

+1

@Legolas, это звучит для меня как версия из .app, на который вы указываете, не самая последняя версия вашего приложения. Удостоверились, что в ~/Library/Application \ Support/iPhone \ Simulator/5.1/Applications/{string -of-numbers-and-letters} ?? Если существует более одной папки «{string-of-numbers-and-letters}» в соответствии с указанным выше путем, попробуйте другой и посмотрите, работает ли она. Я предполагаю, что вы пытаетесь запустить более старую версию своего приложения. Дайте мне знать, если это поможет. – DiscDev

0

жаль, мой английский очень плохо. Как самый простой способ запустить этот скрипт от Teamtsity? Каждая сборка - цифры и буквы разные. Не самый простой способ:

  1. чистой имитатор до сборки
  2. найти папку с программой, и она содержит эти цифры и буквы, написанные в переменной.
  3. Эта переменная, например, запись сценария.

Возможно, есть способ, который можно взять с этих цифр?

1

Пути для вызова командной строки UIAutomation несколько изменились за последние пару лет.Я написал несколько сценариев оболочки bash, которые работают вместе, что может запустить тестовый файл UIAutomation таким образом, который работает с Xcode 4.4.1.

Смотрите эту суть: https://gist.github.com/3605692#comments

В двух словах, команда ключ заканчивается существо:

instruments -t $INSTRUMENTS_TEMPLATE $APP_PATH -e UIASCRIPT $SCRIPT_PATH -e UIARESULTSPATH $RESULTS_PATH

Мои скрипты показать переменные подстановки необходимы. Другое преимущество заключается в том, что приложения симулятора iOS часто меняют GUID как часть их пути. Мой скрипт найдет их, поэтому вам не придется жестко кодировать временный идентификатор GUID в своих вызовах builds/scripts/command line.

+1

Спасибо за скрипты оболочки! – kovpas

6

Правильное расположение Automation.tracetemplate, по состоянию на Xcode 4.5.2, является /Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns/AutomationInstrument.bundle/Contents/Resources/Automation.tracetemplate

+0

Хотел бы я дать вам 10 голосов. Почему они продолжают меняться? –

0

Конфигурация сборки должна быть отлаживать, чем Release. Это и стало причиной ошибки в моем случае. Вы можете изменить конфигурацию сборки в «Редактирование схем» и выбрав вкладку «Профиль». Убедитесь, что вкладка build также находится в режиме отладки.

0

Я сделал команду ps, чтобы увидеть, какие процессы запущены. Я обнаружил, что инструменты все еще работают. Затем я сделал killall instruments, и это убило процесс инструментов. Затем я сделал команду инструментов и после этого работал отлично.

Смежные вопросы