iOS上的Shazam:UI测试+ Shazam Pro用户提示

在Shazam,我们从一开始就尝试使用UI测试。 您还记得用Javascript编写这些测试脚本吗? 但是直到最近,我们还无法真正将其集成到我们的流程中。 在Javascript时代(严重的是,有人还记得这种技术的名字吗?),每个人都必须编写代码来消除弹出窗口,即使引入了最小的更改,即使是最直接的测试也变得无法使用。

当引入XCUITest时,它肯定会变得更好,但我们还缺少一件事-应用程序间通信和多应用程序测试。 当我们不得不将CFNotificationCenter用于这些目的时,感觉并不正确,因此我们放弃了一段时间。

但是从XCode 9开始,我们现在只需引用捆绑标识符即可在不同应用之间运行,终止和通信。

 让app1 = XCUIApplication(bundleIdentifier:“ com.Shazam.app1”) 
app1.launchEnvironment = [“键”:“值”]
app1.launch()let app2 = XCUIApplication(bundleIdentifier:“ com.Shazam.app2”)
app1.terminate()
app2.launch()

因此,现在我们可以运行多个应用程序。 只需别忘了将所有应用程序添加到UITests目标的“目标依赖项”,XCode会自动将其安装在您的设备或模拟器上。

因此,在Shazam中,我们关心Shazaming,并使用这些简单的工具现在可以为我们的核心功能构建一些UI测试。

多年前,在一次研讨会上,我听肯特·贝克(Kent Beck)的演讲时,我记得他提到音频是编写自动化测试最困难的事情之一。 的确是正确的(我们拥有用于测试内部音频工具的更复杂的测试),但是使用这些新工具,我们可以创建一个简单的设置来测试我们所需要的。

我们要求PlaybackApp播放一些音频(我们使用外部URL来下载和播放音频文件)。

  //启动播放应用并传递音频文件URLletplaybackApplication = XCUIApplication(bundleIdentifier:“ com.Shazam.TestPlaybackApp”)playbackApplication.launchEnvironment = [“ url”:playbackTest.urlString] playbackApplication.launch() 

现在我们启动Shazam应用程序并启动Shazaming!

  //启动播放应用并传递音频文件URLlet shazam = XCUIApplication(bundleIdentifier:“ com.Shazam。***”) 
shazam.launch()
让shazamButton = ...
shazamButton.tap()

现在,我们等待是否显示正确的标题(实际上,我们做的有些不同,但这也可以工作)。

 让artistLabel = shazam.staticTexts [“  优素福·拉特夫(Yusef Lateef)   “] 
让titleLabel = shazam.staticTexts [“ 斯巴达克斯的爱情主题 “]
//哦,是的,我们的口味很好,这里存在= NSPredicate(format:“ exists == 1”)

期望(对于:存在,评估为:artistLabel,处理程序:无)
期望(对于:存在,评估为:titleLabel,处理程序:无)
waitForExpectations(超时:10,处理程序:无)

我们擅长于我们的工作,并且实际测试运行得非常快!

如您所知,iPhone支持不同的方向:纵向,纵向颠倒,横向正确,等等。如果您曾经在代码中使用过这种方向,您就会知道它不是很准确,但是无论如何都没有错。

因此,我们对其进行了一些测量,很高兴地向您报告,始终将手机保持为纵向模式,从统计学上来说,正确操作轨道将为您带来重大收益! 因此,请停止转动手机,保持不动,然后等待几秒钟。 像这样。