当输出重定向到文件时,xcodebuild 会损坏测试结果输出

2024-04-19

我将 Jenkins 与 Xcode 插件配置为通过将测试构建操作添加到自定义 xcodebuild 参数设置来运行单元测试。有关让 Jenkins 使用 Xcode 5 运行单元测试的更多信息,请参阅此question https://stackoverflow.com/q/18921078/10223.

现在我已经运行它了,它似乎混合了 NSLog 语句或最终的控制台输出** TEST SUCCEEDED **消息与测试结果,因此有时会导致解析器将单元测试结果转换为 Jenkins 所需的 JUnit 格式。

例如,Jenkins 日志显示如下输出:

Test Case '-[Redacted_Conversion_Tests testConvertTo_ShouldSetamount_WhenamountIsNotZero]' passed (** TEST SUCCEEDED **

0.000 seconds).
Test Case '-[Redacted_Conversion_Tests testConvertTo_ShouldSetamount_WhenamountIsZero]' started.

当它实际上应该是:

Test Case '-[Redacted_Conversion_Tests testConvertTo_ShouldSetamount_WhenamountIsNotZero]' passed (0.000 seconds).
Test Case '-[Redacted_Conversion_Tests testConvertTo_ShouldSetamount_WhenamountIsZero]' started.
** TEST SUCCEEDED **

我进一步研究了这个问题,并将詹金斯排除在外。如果我直接在命令提示符下运行 xcodebuild 命令:

xcodebuild \
    -workspace project.xcworkspace \
    -scheme Tests \
    -configuration Release \
    -sdk iphonesimulator7.0 \
    -destination "platform=iOS Simulator,name=iPhone Retina (4-inch),OS=latest" \
    test

输出总是很好、按顺序出现。

但是,如果我将输出通过管道传输到另一个程序或重定向到文件:

xcodebuild \
    -workspace project.xcworkspace \
    -scheme Tests \
    -configuration Release \
    -sdk iphonesimulator7.0 \
    -destination "platform=iOS Simulator,name=iPhone Retina (4-inch),OS=latest" \
    test > xcodebuild.out
cat xcodebuild.out

如上所述,输出是无序的。

这可能是由于不直接写入标准输出时缓冲或缺乏缓冲造成的吗?有谁知道为什么会发生这种情况以及我可以执行的任何解决方法来解决它?


正如所指出的Malte https://stackoverflow.com/users/1143003/malte-tancred在上面的评论中,更干净的解决方案可能是

    env NSUnbufferedIO=YES xcodebuild ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当输出重定向到文件时,xcodebuild 会损坏测试结果输出 的相关文章

随机推荐