无法从命令行运行UIAutomationTest

8
我有一个iOS应用程序,希望将其纳入持续集成。我使用的策略是尝试从命令行运行测试。
我正在尝试使用以下脚本来实现:
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文件,我可以在Xcode的Instrumentation中运行它并且它能够正常工作。我使用以下方式构建我的应用程序:

xcodebuild -alltargets -sdk iphonesimulator5.1

这将生成MyApp.app。我可以在Xcode模拟器中成功运行应用程序,但是当我尝试通过instruments运行时,会弹出一个框,显示有未知错误,并在命令行中打印:

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模拟器吗?我可以让它打开任何我想要的模拟器吗?


我有完全相同的问题,也无法解决它 :( - Roger
到目前为止,我还没有找到解决方案。我将尝试在苹果自己的论坛上询问,看看他们是否有什么想法。如果我发现了什么,我会告诉你的。 - Rafael
6个回答

6

截至Xcode 4.5.2,Automation.tracetemplate的正确位置是/Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns/AutomationInstrument.bundle/Contents/Resources/Automation.tracetemplate


我希望我能给你10个赞。为什么他们总是改来改去的? - Eli Ganem

6

我曾遇到同样的错误,几乎抓狂地试图解决它。然而错误信息完全没有帮助。

最终问题的原因是我所指向的.app文件。当我找到了“正确”的.app文件时(它深深地埋在5.1模拟器文件夹中),我终于可以使用Xcode 4.3从命令行运行UI自动化测试。

对我有效的.app文件路径:

~/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

谢谢,它起作用了!不过我不知道是否可以将其放入CI服务器中(我认为我的Makefile不会更新应用程序,稍后我会测试并查看是否有效...) - Rafael
1
@Legolas,我觉得你指向的.app版本不是你的应用程序的最新版本。你确定在~/Library/Application\ Support/iPhone\ Simulator/5.1/Applications/{string-of-numbers-and-letters}路径下没有多个文件夹吗?如果在上述路径中有多个"{string-of-numbers-and-letters}"文件夹,请尝试另一个文件夹并查看是否有效。我猜你正在尝试运行旧版本的应用程序。如果有帮助,请告诉我。 - DiscDev
如果在模拟器上“重置内容和设置”,.app的路径是否仍然有效? - Ian
@Ian - 我不确定,但你可以轻松打开终端并cd到路径,以查看它是否仍然有效或是否已更改。 - DiscDev
嗯...我想你可以找到一种通配符路径的方法。 - DiscDev
显示剩余2条评论

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。我的脚本将找到它们,因此您不必在构建/脚本/命令行调用中硬编码临时GUID。


1
感谢您的Shell脚本! - kovpas

0
构建配置应该是调试模式而不是发布模式。这就是我遇到错误的原因。您可以在“编辑方案”中更改构建配置,并选择“配置文件”选项卡。请验证构建选项卡也处于调试模式。

0

抱歉,我的英语很糟糕。

从Teamtsity运行此脚本的最简单方法是什么?每个程序集 - 数字和字母都不同。

不是最简单的方法:

  1. 清理模拟器以前的程序集
  2. 找到包含这些数字和字母的程序文件夹,并将其写入变量中。
  3. 像编写脚本一样编写此变量。

也许有更简单的方法来获取这些数字吗?


0

我使用了ps命令来查看正在运行的进程。我发现instruments仍在运行。然后我执行了killall instruments,这样就杀掉了instruments进程。之后我再次执行我的instruments命令,一切都完美地运行了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接