iOS中的UI测试

简介✍️

在本文中,我们将首先解释如何使用Xcode编写UI测试,然后如何添加可视化差异,最后解释如何在Bitrise中进行配置。

为什么要测试用户界面(UI)?

对于产品发布,要测试每个用例并确保没有回归是很痛苦的。 您可能忘记测试一个流程,或者认为您的更改不会影响代码的其他部分……但是有时会这样做。 这是在Appaloosa上为我们的iOS应用程序所发生的情况,其中一些错误逐渐消失。 例如,当发布iOS 11时,我们在导航栏中添加了约束,但是此功能在以前的版本中不可用,并且该应用在iOS 10中崩溃。

它很快被发现并修复,但是警报提醒我们采取更强有力的措施来防止此类问题。

UI测试和单元测试

使用单元测试,您可以独立测试每个小代码,并专注于代码的逻辑方面。

使用UI测试,您可以模拟用户交互和用户流。 让我们以用户尝试登录您的应用程序为例。 它将在整个过程中测试用户与我们的应用程序的不同交互。

设置📚

在Xcode上转到您的项目,单击“ +”按钮(请参见下图)并添加iOS UI测试包。 还将创建一个新目标。

您还可以在Xcode上创建项目时添加它。

样例项目

这是一个示例项目。 我们要测试多个用户流,并确保它们都能按预期工作。

您可以在github上找到完整的代码。

目的是确保我们的登录页面在不同步骤中显示正确的视图。 因此,我们将需要访问页面的不同视图以评估其在测试期间的行为。

您可以通过多种方式检索应用程序的元素:

  • 您可以使用Xcode中的“录制”按钮,它将自动生成您的代码。
  • 您可以在视图上添加可访问性标识符,以更轻松地访问它。
  • 您可以手动编写代码,在这种情况下,您需要知道如何访问元素。 您可以使用LLDB中的以下命令来打印可见屏幕的详细视图层次结构:

(lldb)po打印(app.debugDescription)

我更喜欢这最后一种方法,代码更具可读性。

编写您的第一个UI测试

使用无效的凭据登录:

如果用户输入无效的凭据,我们希望该应用程序显示错误消息:

让我们看看它如何转换为代码。

用户想要显示他的应用程序列表:

在这里,我们被迫等待假服务器的响应。 我们需要告诉Xcode等待,直到应用程序完成了视图的渲染。 如果不这样做,则由于目标对象尚未出现,我们的测试将失败。

为了强制Xcode等待,我对XCTestCase使用了扩展名:

用户希望查看应用程序的详细信息:

从Xcode 9开始,我们不再能够比较长度超过128个字符的字符串,因此我们不得不使用谓词: