重试失败的 xcodebuild 测试

Posted

技术标签:

【中文标题】重试失败的 xcodebuild 测试【英文标题】:Retry failed xcodebuild test 【发布时间】:2019-09-17 17:17:41 【问题描述】:

我正在为 ios 应用程序构建/测试检查构建自定义 Jenkins 构建脚本 (sh)。 但有时 UI 测试只是因为时间问题而失败,所以我希望它重新运行几次以确保问题是真实的。

for (( ATTEMPT=1; ATTEMPT<=2; ATTEMPT++ ))
do
      xcodebuild [flags] test #add_result_saving_mechanism

      #if failed, do smth to go to next attempt. Else - break
      if SOME_KIND_OF_FAIL_CHECK; then
         continue
      else
         break
      fi
fi

我之前使用过 xcpretty,因此能够读取 $PIPESTATUS 并做出相应的反应,但由于某种原因 xcpretty 因xcodebuild test 而崩溃,所以想办法不使用它

xcodebuild [flags] test | xcpretty
STATUS="$PIPESTATUS"
if [ "$STATUS" != "0" ]; then
      FAILURE_MSG="$TARGET ($BUILD_NAME) failed UI/Unit testing"
      #try next attempt if available
      continue
else
      break
fi

如何在没有管道/xcpretty 的情况下处理这些重试?

【问题讨论】:

如果您的问题的答案之一是正确的,您应该考虑接受它。 【参考方案1】:

从 jenkins 的角度来看 - 如果脚本遇到错误,它总是会提前退出,所以你可以尝试这种类型的语法来防止这种情况(在 jenkins 配置中,而不是在脚本本身中)

jenkins_build_script.sh || true
# continue with things...

另外,如果您在捕获故障本身时遇到问题 - 尝试将 xcodebuild 输出通过管道传输到日志文件,然后使用 grep 查找您预期的错误。

【讨论】:

【参考方案2】:

既然你说它是由 Jenkins 运行的脚本,你可以从 Jenkins 管道而不是在 shell 脚本中处理重试。

如文档中的示例

pipeline 
    agent any
    stages 
        stage('Deploy') 
            steps 
                retry(3) 
                    sh './flakey-deploy.sh'
                
            
        
    

You can read about it here

希望这将有助于好运。

【讨论】:

以上是关于重试失败的 xcodebuild 测试的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Mocha 在 Detox 中重试失败的端到端测试?

使用 xcodebuild 命令行工具导出失败错误

詹金斯 xcodebuild 失败

Xcode 7.2 使用 xcodebuild 构建项目失败

Xcodebuild 命令失败

xcodebuild 归档失败,CircleCI 上的退出状态为 65