XC UI 测试的存根数据

Posted

技术标签:

【中文标题】XC UI 测试的存根数据【英文标题】:Stub data for XC UI Tests 【发布时间】:2016-08-25 12:17:45 【问题描述】:

所以,让我先解释一下我的问题。

我不想中继我的网络服务器数据,我想为我的 XCUITests 存根数据。 因此,我将确保它在 100% 的时间内返回正确的数据,并且有时我需要测试一些特定的(例如错误或空状态)情况,这些情况 Web 服务器可能不会在那个时候准确返回。 所以,我尝试过的是在我的 XCUITest 中运行本地 server,然后存根一些请求,但事实证明它没有成功,因为 XC UI 测试在完全独立的包中运行(甚至是独立的进程)和本地服务器无法绑定到 localhost,因此我的主应用程序包无法连接到此服务器。

我尝试过的另一个解决方案是通过 XCUIApplication().launchArguments 传递一些参数,并基于此参数 - 在主应用程序上运行存根,但是 - 这有点问题:“我有本地 -主应用程序中的代理服务器”,我只需要进行 UI 测试。

我知道,我也可以创建 stub-server 并将其公开给网络,也就是说,创建一种开发环境,只是为了 UI 测试,但对我来说似乎是极端的。因为在这种情况下,只为我的项目维护 UI 测试是一项很大的工作。

所以,我的问题是,有没有人有更好的解决方案?有什么办法可以在不修改主应用程序和运行外部网络服务器的情况下解决这个问题?

【问题讨论】:

我还写了一篇博文,介绍如何使用少数类和扩展轻松完成此任务。 developer.soundcloud.com/blog/… 【参考方案1】:

您可以使用SBTUITestTunnel。这个库允许以简单的方式动态地存根网络请求(除其他外)。

添加库最简单的方法是使用 cocoapods,然后重写 AppDelegate 的初始化方法:

import UIKit
import SBTUITestTunnel

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate 
    var window: UIWindow?

    override class func initialize() 
        SBTUITestTunnelServer.takeOff()
        super.initialize()
    

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
        return true
    

添加后,您就可以开始使用了。您可以向 UI 测试添加/删除网络请求的存根,如下例所示:

func testThatSomethingStubbedWorks() 
  let app = SBTUITunneledApplication()
  app.launch()

  let stubId = app.stubRequestsMatching:SBTRequestMatch(SBTRequestMatch.URL("google.com"), returnJsonDictionary: ["key": "value"], returnCode: 200, responseTime: SBTUITunnelStubsDownloadSpeed3G)

  // from here on network request containing 'google.com' will return a JSON "request" : "stubbed" 
  ...

  app.stubRequestsRemoveWithId(stubId) // To remove the stub either use the identifier
  app.stubRequestsRemoveAll() // or remove all active stubs

【讨论】:

以上是关于XC UI 测试的存根数据的主要内容,如果未能解决你的问题,请参考以下文章

区分 UI 测试的首次启动

单元测试 - 存根 SqlDataReader

使用 AWS 设备场进行 XC UI 测试时出现错误“跳过设置测试:找不到足够的套件来执行”?

一起使用 XCUI 测试和 XC 测试

如何在 Flutter 集成测试中最好地存根/模拟 rest API 调用

CreateProcessWithLogonW 错误 1783:存根收到错误数据