运行 在 Jenkins 上的 Xcode UI 测试永远不会失败

Running Xcodes UITesting on Jenkins never fails a Test

我已经为我在 Xcode 中构建的一个应用程序构建了一个简单的 UITesting 框架。 2 项测试通过,1 项故意失败:

XCTAssertTrue(false)

我正在使用 Jenkins Xcode 插件并正在使用 post 构建的操作:发布 JUnit 测试结果报告。

Jenkins 成功启动了模拟器并运行了所有 3 个测试。它还成功地在日志中发现了失败:

Failing tests:
-[LightAlarmUITests testFailingTest()]
** TEST FAILED **

但是,测试结果分析器(已安装插件)显示所有 3 个测试都通过了。当我检查 test-results/*.xml 文件时,我看到以下内容:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<testsuite failures="1" errors="0" hostname="Charlies-MacBook-Pro.local" name="LightAlarmUITests" tests="3" time="21.0" timestamp="2016-12-20T16:24:33.125Z">
<testcase classname="LightAlarmUITests" name="testFailingTest" time="6.372"/>
<testcase classname="LightAlarmUITests" name="testShowSettingsPage" time="7.167"/>
<testcase classname="LightAlarmUITests" name="testShowSoundAlarmsPage" time="7.594"/>
</testsuite>

正如您在 xml 中看到的那样,它不会将单个测试用例标记为通过或失败,而是将整个测试套件标记为失败。

有谁知道如何针对单个测试用例标记 pass/fails?

有一个打开的拉取请求来解决这个问题。

https://github.com/jenkinsci/xcode-plugin/pull/75

这背后的原因是Xcode8改变了UI测试报告的XML方式。 JUnit 插件无法解析此 XML 以生成测试报告。我用过XCPretty mediator that converts Xcode 8 XML report into JUnit supported XML. You can find more details at https://blog.talentica.com/2017/04/04/use-xcode-8-with-jenkins/