2012-05-15 89 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是,我可以在里面的Xcode仪器运行一个简单的JavaScript文件和它的作品。我建立我的应用程序使用:

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

我无法找到一个解决方案为止。我会试着问对苹果自己的论坛,看看他们是否拿出一些东西。如果我发现出来的东西,我会让你知道的 – Rafael

回答

6

我得到这个相同的错误,几乎拉我的头发试图解决它。错误消息完全没有帮助。

最终导致问题的是我指向的.app文件。一旦我找到深埋在5.1 Simulator文件夹中的“right”.app文件,我终于能够通过命令行使用Xcode 4.3运行UIAutomation测试。

来为我工作了。应用程序的路径:

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

下面是完整的命令我使用和Xcode 4.3运行在命令行UIAutomation测试:

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 

希望这可以帮助别人,因为这里的文档非常缺乏。

更新

注意,作为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,当我运行它,我得到这个错误 - '失败:目标应用程序似乎已经死亡 仪器跟踪Complete' – Legolas

+1

@Legolas,这听起来好像版本你指定的.app不是最新版本的应用程序你确定在〜/ Library/Application \ Support/iPhone \ Simulator/5.1/Applications/{string中没有多个文件夹数字和字母}?如果参考上述路径中有多个“{字符串和数字和字母}”文件夹,请尝试另一个文件夹并查看它是否有效。我的猜测是你正在尝试运行一个旧版本的应用程序。让我知道这是否有帮助。 – DiscDev

0

对不起,我的英语很糟糕。 作为从Teamtsity运行此脚本的最简单方法?每个程序集 - 数字和字母都是不同的。 不是最简单的方法:

  1. 干净模拟器装配前
  2. 找到该程序的文件夹,它包含这些数字和字母,写在变量。
  3. 这个变量,比如写脚本。

也许有一种方法更容易从这些数字中获取?

1

在过去几年里,UIAutomation的命令行调用路径略有改变。我已经编写了几个可以一起工作的bash shell脚本,它们可以以与Xcode 4.4.1兼容的方式启动UIAutomation测试文件。

看到这个要点:https://gist.github.com/3605692#comments

简而言之,关键命令结束是:

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

我的脚本显示所需的变量替换。另一个好处是iOS模拟器应用程序经常将GUID作为其路径的一部分进行更改。我的脚本会找到它们,因此您不必在build/scripts /命令行调用中对临时GUID进行硬编码。

+1

谢谢你的shell脚本! – 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

构建配置应该是调试比释放。这是我的错误原因。 您可以在'Edit Schemes'中更改Build Configuration并选择Profile选项卡。验证生成选项卡也处于调试模式。

0

我做了ps命令来查看哪些进程正在运行。我发现乐器还在运行。然后,我做了killall instruments,并导致仪器过程中断。然后,我做了我的乐器指令,并在此之后完美奏效。

相关问题