使用 Instruments.app 从终端进行 Mac、iOS 自动化测试

Posted

技术标签:

【中文标题】使用 Instruments.app 从终端进行 Mac、iOS 自动化测试【英文标题】:Mac, iOS automation test from Terminal using instruments.app 【发布时间】:2011-11-16 06:50:40 【问题描述】:

我正在使用以下命令从命令行运行 ios UIAutomation 测试:

instruments -t /Developer/Platforms/iPhoneOS.platform/Developer/Library/Instruments/PlugIns/AutomationInstrument.bundle/Contents/Resources/Automation.tracetemplate /Users/ctester/Library/Developer/Xcode/DerivedData/TestView-acwgjlejvnjkqietyevgfnsjngpd/Build/Products/Debug-iphonesimulator/TestView.app -e UIASCRIPT ta.js -e UIARESULTSPATH .

TestView.app在模拟器中成功启动,但脚本无法运行。

我尝试指定一个不存在的脚本,没有报告错误。所以我猜参数-e UIASCRIPT ta.js ... 被忽略了。

我笔记本电脑上的instruments 命令版本是:

instruments, version 1.0
usage: instruments [-t template] [-D document] [-l timeLimit] [-i #] [-w device] [[-p pid] | [application [-e variable value] [argument ...]]]

重要吗?

TestView.appta.js 在instruments.app(GUI) 中工作得很好。

谢谢。

【问题讨论】:

【参考方案1】:

仪器不喜欢路径中的空格。如果您的任何路径中有空格,请转义它们。使用引号不能可靠地工作。虽然仪器可能会启动,但它会在启动过程的后期阻塞空间。

给仪器一个 ta.js 的绝对路径,然后转义它。 示例:

find $PWD -name ta.js -exec echo  \; | sed 's/ /\\ /g'

sed 位转义了您找到的 ta.js 的路径。

您可以尝试: instruments -t /Developer/Platforms/iPhoneOS.platform/Developer/Library/Instruments/PlugIns/AutomationInstrument.bundle/Contents/Resources/Automation.tracetemplate /Users/ctester/Library/Developer/Xcode/DerivedData/TestView-acwgjlejvnjkqietyevgfnsjngpd/Build/Products/Debug-iphonesimulator/TestView.app -e UIASCRIPT ``find $PWD -name ta.js -exec echo \; | sed 's/ /\\ /g'`` -e UIARESULTSPATH .

但是用单反引号替换双反引号。 ` 是 SO 格式中的保留字符 :(

【讨论】:

我总是小心使用空格,绝对路径仍然无济于事。你有没有尝试过?脚本是否在您的情况下运行? 是的,上面是工作生产代码。从命令行以详细模式运行仪器时是否看到任何错误? 而不是那个hack;正确引用您的扩展。 "$(find "$PWD" -name ta.js)" (还有,你为什么在 -exec echo \; 中折腾?)

以上是关于使用 Instruments.app 从终端进行 Mac、iOS 自动化测试的主要内容,如果未能解决你的问题,请参考以下文章

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

如何在 jenkins 上运行 ios 模拟器进行 ui 自动化测试

从 js 到目标 C 的谓词

当我尝试从终端更新分支时,会出现一个新窗口。如何进行?

IntelliJ 终端 - 已更新且不再能够从终端运行脚本

终端和异常