使用来自另一台机器的 xcodebuild 进行单元测试

Posted

技术标签:

【中文标题】使用来自另一台机器的 xcodebuild 进行单元测试【英文标题】:Unit tests using xcodebuild from another machine 【发布时间】:2013-11-19 03:45:20 【问题描述】:

我一直在兜圈子。基本上,我在一台机器上安装了 Jenkins,并将 Mac 服务器作为单独的 ios 构建服务器。我需要能够运行单元测试,然后在 Mac Mini 上运行 Jenkins 的代码覆盖率。我有一个可以运行测试的脚本,当它从机器本身的命令行运行时,它可以完美运行。问题是当我尝试从 Jenkins 运行它时,实际测试没有运行。它运行整个构建过程,然后报告“测试成功”,而不实际运行任何测试。基本上,当我 ssh 进入机器时,我需要能够运行测试。

我正在使用 gcovr 为单元测试覆盖创建 xml 文件。我考虑使用 xctool,它似乎可以运行,但只创建 gcda 文件,而不是 gcno,所以我无法让它工作。

在这一点上我的头撞到墙上,所以任何帮助表示感谢。

我正在运行的命令: xcodebuild -workspace MyProject.xcworkspace -scheme MyProject -sdk iphonesimulator test

在登录机器时从命令行运行时运行良好,但在我 ssh 时不运行任何测试。

【问题讨论】:

【参考方案1】:

问题是我从两个不同的地方拉起模拟器。所以,如果我直接在构建机器上运行脚本,模拟器就会出现。如果我随后尝试通过 ssh 运行脚本,它会尝试启动已经启动并锁定的模拟器。

解决方案?在脚本顶部,杀死所有正在运行的模拟器:

pkill -i simulator

可能不优雅,但可以。

【讨论】:

【参考方案2】:

您似乎必须从从用户 GUI 启动的进程运行 xcode 单元测试(例如使用 ~/Library/LaunchAgents 代理/守护进程)。

您可以使用服务器或守护程序(从 GUI/终端或使用 LaunchControl 启动)来运行您的单元测试。 Here's a server 用 Go 编写,正是这样做的。

【讨论】:

以上是关于使用来自另一台机器的 xcodebuild 进行单元测试的主要内容,如果未能解决你的问题,请参考以下文章

拉动后 Xcode 构建“旧”代码

可以 ping,但不能连接到来自同一网络的另一台机器上托管的端点 [重复]

Apache 将请求转发到另一台服务器

通过网络将数据从主机上的一个线程发送到另一台机器上运行的某种服务线程

尝试在另一台计算机上使用 glm 模型进行预测时出错

linux 使用scp命令从一台机器复制文件到另一台linux机器上去