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 – 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