Swift Localhost:使XCUITest再次出色

XCUITest的最简单的网络存根

端到端(E2E)UI测试不仅由于多个依赖关系而脆弱,而且执行起来也很慢且昂贵。 在我以前的工作中,我记得我们的组织花大量时间运行E2E测试,却由于本地客户端错误而导致测试失败,这真令人沮丧。 通过进行客户端集成测试,可以避免此类不必要的故障。

除了单元测试之外,鼓励iOS工程师编写UI自动化测试,作为完成功能所需工作的一部分。 这些测试将使用localhost模拟外部依赖关系。 我将使用此博客文章来说明使用cocoapods和XCode为现有的iOS项目设置localhost XCUITest的人多么容易。

通过4个步骤设置iOS XCUITest Localhost

这是4个简单的步骤(LAIM),用于在iOS项目中设置localhost XCUITest。

(L)本地主机

将SwiftLocalhost(https://github.com/depoon/SwiftLocalhost)安装到您的iOS项目中。

对于iOS 9,我们需要在“ Exception Domains”下将“ localhost”添加为项。

对于iOS 10及更高版本,只需添加NSAllowsLocalNetworking并将其设置为YES。

(M)模拟

创建用于准备模拟URLResponse数据的帮助程序类/函数。 在这里,我们可以指定用于测试的模拟响应文件的位置。

记录所有到达本地服务器的出站URLRequest。 对于给定的用例,我们可以使用SwiftLocalhost断言iOS应用正在按特定顺序发送特定的出站请求。

专注于模拟

工程师可以只关注模拟响应的内容,而无需知道如何启动本地Web服务器。 请记住,SwiftLocalhost的目标仅仅是实现客户端UI集成测试,而不是断言端到端的行为。

测试用例中的嘲弄

相同的XCUITest测试功能中描述了模拟响应的设置。 这有助于使测试用例更具可读性,尤其是在同一范围内可以看到测试代码和模拟响应时。

只需使用Swift

您只需要XCode和Cocoapods即可运行SwiftLocalhost。 iOS开发人员可以放心使用Swift作为应用程序开发语言和UI测试编程语言。

Cmd + U

使用SwiftLocalhost的最大优势在于其执行简单。 iOS开发人员只需按Cmd + U即可触发UI自动化测试。 因此,无需使用bash / shell来启动本地Web服务器。 此外,连续集成作业仅需要选择XCUITest方案即可运行测试。 是的,就是这么简单。

展示柜

为了展示在现有的iOS项目中设置SwiftLocalhost是多么容易 ,我分叉了一个我在Github上随机找到的iOS应用程序存储库项目,并应用了本文中突出显示的技术。

[派生] https://github.com/depoon/ios-movies-app

[原始] https://github.com/mkamhawi/ios-movies-app

此外,我还使用Firebase身份验证向应用程序引入了登录功能,以演示如何将第三方SDK的URLRequests也重定向到localhost。 您可能会观看下面的视频,以观察实际的请求重定向(从第15分钟开始)。

这是我在iOSConfSG 2019上发表的SwiftLocalhost演讲的视频

使用localhost使XCUITest再次出色

使用localhost – iOS Conf SG 2019 – Engineers.SG,使UITest再次出色
演讲者:Kenneth Poon,spgroup.com.sg“如果我无法控制自己的环境依赖项,那么我该如何测试所有…… engineer.sg

结尾

我希望本文能使您对SwiftLocalhost有深入的了解。 我强烈建议iOS开发人员在日常工作中使用此技术。 如果您成功获得成功或需要其他帮助以使其正常工作,请给我发送电子邮件de_poon@hotmail.com

[电子邮件] de_poon@hotmail.com

[Twitter] @de_poonkenneth

[Linkedin] https://www.linkedin.com/in/kenneth-poon-84217019/

[Github] https://github.com/depoon