【问题标题】:Batch UI tests in XcodeXcode 中的批量 UI 测试
【发布时间】:2018-05-18 08:03:11
【问题描述】:

我想批量 UI 测试(现在,我想单元测试会在一段时间内有用)

到目前为止,Xcode UI 测试和“fastlane scan”似乎都没有对此提供任何固有的支持。有没有好的又简单的方法?

情况

我需要测试某个 UI 测试 N 次。

现实世界的情况

我需要对某个 UI 测试进行 100 次测试并在批处理结束时获得输出:

  • 成功/失败的迭代次数
  • 失败迭代的任何日志

我已经尝试过(目前正在做的)

在快速文件中,fastlane scan可以像这样用于批处理。然而,输出文件最终都位于单独的目录中,并且聚合所有这些结果将是相当(?)一些工作。这不像scan 返回一个布尔值或任何表示测试成功状态的东西? (实际上扫描也可能不支持运行某个测试,它会运行所有测试)

100.times do |index|
    puts "Running test iteration #{index}..."
    scan(scheme: schemefortesting,
        output_directory: "fastlane/tests/test_output_#{index}",
        destination: 'name=Myrealworldiphonename'
    )
end

【问题讨论】:

    标签: xcode xcode-ui-testing fastlane fastlane-scan


    【解决方案1】:

    据我所知,不支持此功能。我想最好的方法是创建一个方法来执行测试,然后让测试用例多次运行它,跟踪整体结果并记录到控制台。比如:

    func runTheTest() -> Bool {
        app.launch()
        // Run your test
        let passing = // Make your asserts
        return passing
    }
    
    func testManyTimes() {
        var allTestsPassing = true
        for n in 0...100 {
            let thisLoopPassing = runTheTest()
            print("Loop \(n) returned \(thisLoopPassing)")
            allTestsPassing = allTestsPassing && thisLoopPassing
        }
        XCTAssertTrue(allTestsPassing)
    }
    

    部分来自Automatically Running a Test Case Many Times in Xcode 的想法。

    【讨论】:

    • 这是我同意的另一种方式,我一开始也尝试过。它可能适用于某些特定的测试。我需要测试每次都需要全新启动的东西,即每次开始一个新的进程。但是,我认为没有办法在一个测试过程中完全关闭该过程并再次启动它(?)。在我的情况下,一遍又一遍地运行设置和清理方法是不够的。
    • 您应该能够使用 app.launch() 和 app.terminate() 来启动和停止应用程序。但我不确定是否要卸载。
    猜你喜欢
    • 2015-12-13
    • 2015-10-14
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多