【问题标题】:Automatically Running a Test Case Many Times in Xcode在 Xcode 中自动多次运行测试用例
【发布时间】:2014-09-02 17:43:13
【问题描述】:

在 Xcode 中,有没有办法让我自动运行一个测试用例 n 次?

这样做的原因是我的一些 beta 测试人员在我的应用程序中遇到随机崩溃。我在 TestFlight 中看到了崩溃日志以及堆栈跟踪,但我无法重现崩溃。

崩溃很少发生,但当它发生时,它总是在用户尝试创建数据库记录时发生,然后将其上传到服务器。崩溃日志的问题是我的代码没有出现在他们的堆栈跟踪中(所有 UIKit 和 CoreFoundation 的东西 - 每次都不同)。

我的解决方案是对应用程序的该部分运行 100 次测试,并设置异常断点,以尝试在我的开发环境中触发错误。但我不知道如何自动执行此操作。

【问题讨论】:

  • 我知道这不是您正在寻找的,但您总是可以将测试用例的主体包裹在一个循环中。
  • 嗯...我可能会这样做,只是暂时将我的设置/拆卸代码移动到实际的测试用例中,然后运行那个。

标签: ios xcode xctest


【解决方案1】:

花了 7 年时间,但从 Xcode 13 开始,现在内置了对重复测试的支持。

来自 Xcode 13 release notes

在您的测试计划xcodebuild 中启用测试重复,或者通过按住 Control 单击并选择 Run Repeatedly 以打开测试重复对话框从测试菱形运行您的测试。

【讨论】:

    【解决方案2】:

    你可以阅读我的回答here

    基本上你需要重写invokeTest 方法

    override func invokeTest() {
        for time in 0...15 {
            print("this test is being invoked: \(time) times")
            super.invokeTest()
        }
    }
    

    【讨论】:

    • 爱它。这有助于追踪内存泄漏!!您可以将其添加到一个测试类或基础测试类。你是怎么找到这个的?
    • 太棒了!有了这个,您还可以点击 XCTest 中的一项测试,并重复执行该一项测试。巨大的帮助!
    【解决方案3】:

    在 Xcode 中,没有。

    您可以创建一个 XCTestCase 类,该类挂钩到它继承的测试运行方法以返回多次运行,但这往往很烦人并且大多没有记录。

    使用“元测试”重复调用您的其他测试方法可能更容易:

    func testOnce() {}
    
    func testManyTimes() {
        for _ in 0..<1000 { testOnce() }
    }
    

    您可能需要调用一些针对每个测试的设置/拆卸方法。您也许可以通过将循环体改为:

    let test = XCTestCase(selector: #selector(testOnce))
    test.invokeTest()
    

    这将依赖于您的标准测试使用的 XCTest 机器,但它可能会抱怨没有连接到 XCTestCaseRun(或没有)。

    【讨论】:

      猜你喜欢
      • 2013-08-17
      • 2017-08-09
      • 2020-02-29
      • 1970-01-01
      • 2012-02-06
      • 2019-12-10
      • 2010-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多