在Xcode中多次自动运行测试用例

时间:2014-07-12 01:58:24

标签: ios xcode xctest

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

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

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

我的解决方案是为应用程序的那一部分运行测试100次,并设置异常断点,以尝试在我的开发环境中触发错误。但我不知道如何自动完成这项工作。

3 个答案:

答案 0 :(得分:4)

在Xcode中,没有。

您可以创建一个XCTestCase类,它挂接到它继承的测试运行方法以返回多次运行,但这往往很烦人且大部分没有文档。

可能更容易进行"元测试"这会反复调用你的其他测试方法:

func testOnce() {}

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

您可能需要调出一些按测试设置/拆卸方法。你也许可以解决这个问题,而不是让循环体成为:

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

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

答案 1 :(得分:0)

您可以阅读我的this答案

基本上,您需要覆盖invokeTest方法

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

答案 2 :(得分:0)

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

来自 Xcode 13 release notes

<块引用>

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