【问题标题】:Swift: How to reset simulator by running shell commandSwift:如何通过运行 shell 命令重置模拟器
【发布时间】:2018-01-03 21:58:48
【问题描述】:

我正在尝试在每次测试后重置模拟器。 我发现最好的方法就是执行

xcrun simctl erase all

但我不知道如何在 swift 文件中添加 shell 命令来执行它。

我试过了

import Foundation
func shell(_ args: String...) -> Int32 {
    let task = Process()
    task.launchPath = "/usr/bin/env"
    task.arguments = args
    task.launch()
    task.waitUntilExit()
    return task.terminationStatus
  }

但出现错误,找不到进程 u\identifier 请帮忙。 我正在尝试在每次测试后重置模拟器。

我可以通过命令行从模拟器中卸载特定应用程序吗?或每个测试之间的任何其他方式,在 tearDown()

【问题讨论】:

    标签: swift xcode xcode-ui-testing


    【解决方案1】:

    我遇到了类似的问题,并且能够通过 SBTUITestTunnel 解决它。 我选择使用这个框架,因为我还必须在测试应用程序和我的实际应用程序之间进行通信以配置测试状态。

    实现 SBTUITestTunnel 后,您可以指定启动选项,您需要的是 SBTUITunneledApplicationLaunchOptionResetFilesystem。

    app.launchTunnel(withOptions: [SBTUITunneledApplicationLaunchOptionResetFilesystem]) {
     // do additional setup before the app launches
     // i.e. prepare stub request, start monitoring requests 
    }
    

    我建议您看看 SBTUITestTunnel,因为它可以让您做一些其他非常强大的事情。

    【讨论】:

    • 这是一个很好的建议,但它是一种解决方法。我会先尝试通过 shell 命令来完成,如果都失败了,请探索新框架。
    • 如果您需要从运行测试的主机运行特定的 shell 命令,您可以考虑SBTUITestTunnelHost,这是我沿着 SBTUItestTunnel 开发的另一个工具。它允许从 UI 测试目标运行任意 shell 命令。
    • 我在测试中添加了一个预构建步骤。转到编辑方案->单击测试旁边的三角形->+并添加预构建步骤-> xcrun simctl uninstall booted com.XYZ.client.main
    • 我不相信在逐个测试的基础上执行。它不会只在测试的初始运行时执行吗?您最初的问题是“每次测试后重置模拟器。”。
    猜你喜欢
    • 2012-06-01
    • 2019-11-26
    • 2013-01-05
    • 2019-02-05
    • 1970-01-01
    • 2014-11-13
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多