如何访问 Xcode UI 测试中的授权部分



我有带有登录屏幕的应用程序和登录后出现的屏幕(授权部分(。

从授权部件测试这些屏幕的最佳方法是什么?

我有几个想法:

1(不知何故,我需要在每次测试之前从钥匙串中删除所有数据,然后每次我都会浏览整个流程以进入登录后的第一个屏幕。当我需要向后端发送登录请求时,我使用

let nextGame = self.app.staticTexts["Main Screen Text"]
let exists = NSPredicate(format: "exists == true")
expectation(for: exists, evaluatedWithObject: nextGame, handler: nil)
waitForExpectations(timeout: 5, handler: nil)

2(我在这里传递一些论点

app = XCUIApplication(bundle:….)
app.launchArguments = [“notEmptyArguments”:”value”]
app.launch()

所以我可以通过一个假token,后端将接受这个token,这样我的应用程序就会知道它必须将我路由到主屏幕,并且所有请求都会成功,因为我的网络服务有这个假token

但我填补了这是一种不可变的安全方式。

您是否有任何想法什么是最佳方法,也许您可以就更好的方法提供建议?

你提到的第二个想法是在测试中跳过登录屏幕的好方法。此外,实现令牌传递对开发团队也有帮助。这些启动参数可以存储在运行方案设置中。

此外,如果您以同样的方式实施深度链接,它将为 QA 和开发团队带来更多的速度增强。

当然,这些"快捷方式"只能在运行debug配置时访问(使用#if DEBUG...(

在我看来,您的登录服务或您的应用程序可能需要执行或显示某些用例的任何service都应该mocked。这意味着在您的自动化unit/ui testing环境中,您的应用程序将与模拟的服务实现进行通信,这意味着登录服务或授权服务响应应该被模拟为成功或失败,以便您可以测试它们。

为了实现这一点,您的服务应全部表示为接口/protocols并且实现/实现详细信息应在生产、开发或自动化testing环境中。

我永远不会在自动化测试中涉及任何网络。您应该创建授权服务的模拟实现,例如,在自动测试环境中,可以根据您正在运行的测试来模拟它以给出成功或失败的响应(您可以在 setup(( 方法中进行此设置(。

最真实的测试套件将在每次测试开始时登录(如果需要(,并在拆卸期间适当时注销。这使每个测试保持独立,并允许每个测试使用一组不同的凭据,而无需检查它是否已登录/需要更改为不同的用户帐户,因为测试将始终在最后注销。

这不是一个万无一失的方法,因为如果测试失败,拆解代码可能并不总是能够正确执行(因为应用可能不处于拆解预期的状态,具体取决于你的实现(,但如果你正在寻找端到端测试,仅使用生产用户使用的代码路径, 这是您可以做到的一种方法。

引入模拟/存根可以使测试更加独立和可靠 - 由你选择在测试中反映生产用户体验的程度。

最新更新