本项目旨在简化 iOS 上的 UI 测试。
SwiftSnapshotTesting
帮助您用几行代码即可检查应用程序的 UI。不再需要手动管理参考图像。
该框架能够
XCUIElement
的屏幕截图Metal
比较新屏幕截图和先前记录的屏幕截图之间的差异并突出显示差异在内部,SwiftSnapshotTesting
在快照比较期间使用 MTLTextures
。此外,它还使用 Resources Bridge Monitor
应用程序在 Mac 上读取和写入文件。
5.2
11.0
.package(url: "https://github.com/eugenebokhan/SwiftSnapshotTesting.git",
.upToNextMinor(from: "0.1.6"))
创建 SnapshotTestCase
的子类
class MyCoolUITest: SnapshotTestCase { ...
通过覆盖 snapshotsReferencesFolder
变量来选择 Mac 上用于存储参考快照的文件夹
override var snapshotsReferencesFolder: String {
"/Path-To-Snapshots-Folder/"
}
断言 UI 元素
assert(element: XCUIElement,
testName: String,
ignore rects: Set<CGRect>,
configuration: Configuration,
recording: Bool) throws
element
- 要比较的元素。testName
- 测试的名称。它将用于参考图像文件的名称rects
- 要忽略的矩形(可能子视图的 frame)。configuration
当前测试配置。recording
- 通过将此参数设置为 true
,您将记录参考快照。通过将此参数设置为 false
,您将把该元素与先前记录的快照进行比较。断言屏幕截图
assert(screenshot: XCUIScreenshot,
testName: String,
ignore ignorables: Set<Ignorable>,
configuration: Configuration,
recording: Bool) throws
screenshot
- 要测试的屏幕截图。ignorables
- 要忽略的 UI 元素。 Ignorable
可以是 XCUIElement
、自定义 CGRect
或预定义的 .statusBar
。为了使 SwiftSnapshotTesting
在 iOS 14 上运行时工作,您需要在应用程序的 Info.plist 文件中包含两个键。这些键是 Privacy - Local Network Usage Description
(NSLocalNetworkUsageDescription
) 和 Bonjour services
(NSBonjourServices
)。 对于隐私键,请包含一段人类可读的描述,说明用户允许您的应用程序访问本地网络上的设备可以获得什么好处。 Bonjour 服务键是您的应用程序将浏览的服务类型数组。 对于 SwiftSnapshotTesting
,此键的值应为 _ResourcesBridge._tcp
。
如果您没有正确配置上述键,则 SwiftSnapshotTesting
将无法在真机上运行。
在每次断言测试之后,SnapshotTestCase
提供一个附件,其中包含快照和相应参考之间的逐像素 L2 距离,以及一个突出显示差异的 MTLTexture
。您可以使用 MTLTextureViewer
查看差异。
您可以在 ImageFlip
仓库中找到一个关于使用 SwiftSnapshotTesting
的小型 示例。
MIT