iPhone 的 XCode 测试自动化

Posted

技术标签:

【中文标题】iPhone 的 XCode 测试自动化【英文标题】:XCode Test Automation For IPhone 【发布时间】:2009-06-15 10:34:55 【问题描述】:

我想让我的 iphone 测试应用程序在 iPhone 中自动测试。以下是我想要的步骤:

    编译、链接和代码签名 iPhone 应用 (Xcodebuild) 将新建的应用上传到iphone 在 iphone 中自动运行上传的应用程序 从 gdb 控制台收集结果 关闭应用

现在,我无法自动执行第 2 步和第 3 步(我可以通过“构建和调试”按钮从 XCode 中执行此操作。但是,这需要手动单击)。

我对 automator 进行了一些研究,但它并没有解决我的问题。我正在考虑的另一个选择是为 iphone 模拟器编译应用程序并从那里运行它,但我不确定测试结果与真实设备相比有多准确。

我是 Mac/iPhone 开发的新手,也许有人有更好的测试方法。欢迎任何反馈和意见。谢谢。

【问题讨论】:

【参考方案1】:

评论部分没有提供正确显示解决方案的好方法。这是答案的摘要。

在 iPhone 上构建 iPhone 应用程序、上传和触发调试过程的任务是通过 AppleScript 完成的。 AppleScript 的外观如下:

tell application "Xcode"
    open "Users:chuan:Desktop:iphone_manual_client:iphone_manual_client.xcodeproj"
    tell project "iphone_manual_client"
        clean
        build
        (* for some reasons, debug will hang even the debug process has completed. 
           The try block is created to suppress the AppleEvent timeout error 
         *)
        try
            debug
        end try
    end tell
    quit
end tell

AppleScript 接受“:”而不是“/”作为文件和文件夹分隔符。

可以通过设置 GDB 选项将其写入文件来捕获 GDB 控制台输出。这是通过在终端中键入以下命令来完成的:

defaults write com.apple.Xcode PBXGDBDebuggerLogToFile YES 
defaults write com.apple.Xcode PBXGDBDebuggerLogFileName <path to my gdb output file>

最后,非常感谢帮助解决这个问题的各种人。

【讨论】:

【参考方案2】:

您可能想要用于构建和安装的工具是 Applescript。比如:

tell application "Xcode" to launch

我不是假装这是一个完整的答案;还有很多事情需要解决。但我相信 Applescript 将成为您的关键工具之一。

【讨论】:

感谢您的指点。我设法使用 applescript 启动了 XCode。现在,我必须弄清楚单击选择正确项目并单击“构建并开始”的语法是什么。我还需要很长一段时间才能拿出任何有用的东西。 不要将其视为“点击构建并开始”。你需要考虑事件。如果您在脑海中“点击”,您通常会走错路。构建命令是“构建”。你会想花很多时间在 Applescript 编辑器的“打开字典”中看看 Xcode 提供了什么。您将需要诸如“使用名为“Release”的第一个项目的构建配置构建的命令。 'launch' 将运行它。 “设置活动架构”也可能很重要。更难的问题是如何轻松获得控制台输出。 控制台输出可以这样完成:在终端输入以下命令: defaults write com.apple.Xcode PBXGDBDebuggerLogToFile YES defaults write com.apple.Xcode PBXGDBDebuggerLogFileName With为此,我编写了一个 python 脚本来调用构建,并运行测试应用程序。然后在测试后拿起输出日志。顺便说一句,再次感谢 Applescript 指针。我今天就试试。 嗨,Rob,我按照您的推荐尝试了 AppleScript,而且很容易做到!以下是我的 AppleScript: tell application "Xcode" tell project "iphone_test_client" debug end tell end tell 它还不是成品(需要解决 AppleEvent 超时问题),但它确实做到了工作 :) 。我的下一步是将其集成到 CruiseControl 中。谢谢你的帮助。这对我帮助很大。【参考方案3】:

查看 UISpec http://code.google.com/p/uispec/

这是一个正在为 iphone 开发的全自动测试框架。

【讨论】:

【参考方案4】:

查看iphone_testify,它适用于 OCUnit 和 Google Toolbox For Mac,我认为它可以扩展为 UISpec 之类的东西。

问候

【讨论】:

【参考方案5】:

您可以调用一个命令行工具“xcodebuild”来启动 XCode 构建,而无需打开它。您可以使用一些标志来设置目标等。

【讨论】:

感谢您的帮助。 xcodebuild 只会构建二进制文件,它不会将新编译的二进制文件上传到 iphone。如果我需要指定一个标志/选项以使其工作,我很想知道它。【参考方案6】:

Nic 博士的 testing with Ruby 可能会对此有所帮助

【讨论】:

【参考方案7】:

您能否将构建阶段添加到运行脚本以将二进制文件上传到 iphone 的目标中?

右键目标,Add->New Build Phase->New Run Script Build Phase

【讨论】:

【参考方案8】:

xcodebuild 只会构建二进制文件,它不会将新编译的二进制文件上传到 iphone。

实际上它可以上传(签名后),但运行不会太糟糕...... 也许它可以在连接到目标后使用 gdb 运行,但是如何(ip?,usb?usbnet?)?

【讨论】:

以上是关于iPhone 的 XCode 测试自动化的主要内容,如果未能解决你的问题,请参考以下文章

iPhone 上的 ocunit 测试

iPhone真机自动化环境搭建

如何在真 iPhone 上测试 Xcode 应用程序?

iOS 自动化测试初探

Xcode 5:不同屏幕大小的 iPhone 自动布局视图调整大小问题

在 iPhone 上为不同的图像尺寸使用 Xcode 自动布局