无法从命令行运行 UIAutomationTest

Posted

技术标签:

【中文标题】无法从命令行运行 UIAutomationTest【英文标题】:Can't run UIAutomationTest from command line 【发布时间】:2012-05-15 18:35:24 【问题描述】:

我有一个 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 运行应用程序就好了,但是,当我尝试通过仪器运行时,我得到一个框,提示存在未知错误,并在命令行中打印:

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

【问题讨论】:

我也有同样的问题,也无法解决:( 到目前为止我找不到解决方案。我会尝试在苹果自己的论坛上询问,看看他们是否提出了一些建议。如果我发现了什么,我会告诉你的。 【参考方案1】:

我遇到了同样的错误,几乎要拔掉头发试图解决它。错误消息完全没有帮助。

对我来说最终成为问题的是我指向的 .app 文件。一旦我找到了深埋在 5.1 Simulator 文件夹中的“正确”的 .app 文件,我终于能够使用 Xcode 4.3 从命令行运行 UIAutomation 测试。

对我有用的 .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 会在那里更新应用程序,我稍后会测试它是否有效....) 嘿@spotdog13,当我运行它时出现此错误 - Fail: The target application appears to have died Instruments Trace Complete @Legolas,在我看来,您指向的 .app 版本不是您应用的最新版本。您是否确保 ~/Library/Application\ Support/iPhone\ Simulator/5.1/Applications/string-of-numbers-and-letters 中没有多个文件夹?如果引用上述路径的“string-of-numbers-and-letters”文件夹不止一个,请尝试另一个,看看它是否有效。我的猜测是您正在尝试运行旧版本的应用程序。让我知道这是否有帮助。 如果您在模拟器上“重置内容和设置”,.app 的路径是否仍然有效? @Ian - 我不确定,但您可以轻松打开终端并 cd 到路径以查看它是否仍然有效或是否已更改。【参考方案2】:

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

【讨论】:

我希望我能给你 10 票。为什么他们一直在改变它?【参考方案3】:

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。

【讨论】:

感谢 shell 脚本!【参考方案4】:

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

    组装前清洁模拟器 找到该程序所在的文件夹,其中包含这些数字和字母,写在变量中。 这个变量,比如写脚本。

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

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

我执行了ps 命令来查看哪些进程正在运行。我发现仪器仍在运行。然后我做了killall instruments,这杀死了仪器进程。然后我做了我的仪器命令,然后它就完美地工作了。

【讨论】:

以上是关于无法从命令行运行 UIAutomationTest的主要内容,如果未能解决你的问题,请参考以下文章

由于 otest 错误,无法从命令行运行 Xcode 单元测试

当它从命令行 bash 工作时,无法从 crontab 运行 bash 脚本

从设备上的命令行运行仪器 4.5 时无法启动跟踪

无法从命令行运行基于 Robot Framework 中标记的测试用例

我无法从 android studio 构建或运行我的颤振应用程序,但它可以从命令行运行

为啥 WEKA 不从命令行运行?