XC UI 测试的存根数据
Stub data for XC UI Tests
所以,让我先解释一下我的问题。
我不想中继我的网络服务器数据,我想为我的 XCUI测试存根数据。
所以,我会确保它 return 100% 正确数据,有时我需要测试一些特定的(例如错误,或空状态)情况,而网络服务器可能不会 return 就在那一刻。
所以,我尝试过的是 运行 我的 XCUITest 中的本地 server 然后存根一些请求,但事实证明它没有成功,因为 XC UI 测试 运行 在完全独立的包(甚至是独立的进程)中进行,本地服务器无法绑定到本地主机,因此我的主应用程序包无法连接到该服务器。
我尝试过的另一个解决方案是通过 XCUIApplication().launchArguments 传递一些参数,并基于此参数 - 运行 主应用程序存根,但随后 - 它有点问题:"I have local-proxy server in main app",我只需要 UI 测试。
我知道,我也可以创建存根服务器并将其公开到网络上,也就是说,为 UI tesitng 创建一种开发环境,但对于我。因为在那种情况下,只为我的项目维护 UI 个测试是一项巨大的努力。
所以,我的问题是,有没有人有更好的解决方案?有没有办法在不修改主应用程序和 运行 宁外部网络服务器的情况下解决这个问题?
您可以使用 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
}
}
添加完后,您就可以开始了。您可以 add/remove 存根到您的 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
}
所以,让我先解释一下我的问题。
我不想中继我的网络服务器数据,我想为我的 XCUI测试存根数据。 所以,我会确保它 return 100% 正确数据,有时我需要测试一些特定的(例如错误,或空状态)情况,而网络服务器可能不会 return 就在那一刻。 所以,我尝试过的是 运行 我的 XCUITest 中的本地 server 然后存根一些请求,但事实证明它没有成功,因为 XC UI 测试 运行 在完全独立的包(甚至是独立的进程)中进行,本地服务器无法绑定到本地主机,因此我的主应用程序包无法连接到该服务器。
我尝试过的另一个解决方案是通过 XCUIApplication().launchArguments 传递一些参数,并基于此参数 - 运行 主应用程序存根,但随后 - 它有点问题:"I have local-proxy server in main app",我只需要 UI 测试。
我知道,我也可以创建存根服务器并将其公开到网络上,也就是说,为 UI tesitng 创建一种开发环境,但对于我。因为在那种情况下,只为我的项目维护 UI 个测试是一项巨大的努力。
所以,我的问题是,有没有人有更好的解决方案?有没有办法在不修改主应用程序和 运行 宁外部网络服务器的情况下解决这个问题?
您可以使用 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
}
}
添加完后,您就可以开始了。您可以 add/remove 存根到您的 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
}