Xcode UI测试-使用存储的凭据登录/注销

mll*_*llm 6 xcode objective-c ios ios-simulator xcode-ui-testing

我想在我的iOS应用(Xcode 7.2.1)中为登录过程运行功能(UI)测试。

该应用程序的行为是,成功登录后,将存储用户凭据,以便在下次启动时自动登录(不显示登录屏幕)。

因此,我在登录屏幕上设置了一系列UI事件,以使该应用首次在iOS模拟器中启动时通过登录测试。但是,下一次我运行测试将失败,因为登录屏幕甚至没有按预期显示。

我在这里看到两个选项,但似乎都不适合:

  1. 每次运行测试之前,请使用脚本重置iOS Simulator的内容和设置。我尝试Run ScriptBuild Phases带有:的测试目标中添加一个阶段xcrun simctl shutdown booted && xcrun simctl erase all && killall "Simulator",但这似乎不起作用(Simulator应用程序无法启动,并且测试卡住了)。
  2. 包含在-(void)tearDown一些代码中以清除存储的用户凭据。此选项不好,因为它不仅在每个测试方法之间运行(不是在每次测试启动时都运行),而且似乎我无权访问AuthManager用于清除用户凭据的类。

当用户界面测试登录过程时,您会怎么做?

Cra*_*her 4

我遇到过同样类型的问题。经过一番猛烈抨击后,我最好的方法是尝试让事情变得更简单。在我的眼泪中,我总是“放松”我可能做过的任何事情。有时这有点矫枉过正,但仍然是很好的做法。我在放松时发现了许多错误,如果我进行某种硬重置,我可能会忽略它们。IE:我将导航回主页(我的起点),如果我已登录,那么我只需注销即可。根据记录,在应用程序端,当用户注销时,他们的凭据将被删除。

例如,在我的 SignInTests.swift 类上,我将所有方法放在同一类文件的扩展中。这样我就可以简单地调用 SignInTests().signIn() 或 SignInTests().signOut() ,以便我可以从我可能调用的任何其他测试类访问它们。

这是我的场景,非常适合我。可能不是您的最佳选择,但我希望它能为您指明正确的方向。