Xcode 中的批量 UI 测试

Posted

技术标签:

【中文标题】Xcode 中的批量 UI 测试【英文标题】:Batch UI tests in Xcode 【发布时间】: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

【问题讨论】:

【参考方案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() 来启动和停止应用程序。但我不确定是否要卸载。

以上是关于Xcode 中的批量 UI 测试的主要内容,如果未能解决你的问题,请参考以下文章

WPF DataGrid - 如何暂停数据绑定中的 UI 更新并稍后进行批量更新

批量上传

Xcode批量替换操作

实际项目中工作流程多测师

实际项目中工作流程多测师

PyTorch Lightning 中的批量测试及其存在的问题