Lela 0.3.1

Lela 0.3.1

测试已测试
语言语言 Objective C++Objective C++
许可证 自定义
发布最后发布2017年8月

Tony MannJustin Martin 维护。



Lela 0.3.1

  • 作者
  • Brian Nickel

Lela iOS 感知差异测试框架

KIF 很棒。KIF 允许您保持应用功能,鼓励您使用辅助功能,等等。KIF 的一个弱点是它无法告诉您应用是否 视觉上是 发生了变化。您仍然需要测试人员手动检查应用,眯起眼睛查看应用并问“是否与线框图匹配?”

Lela 正在这里帮助 KIF! Lela,代表 Less Eyeballing Large Apps(可以不用那么细看大型应用),是一个在 KIF 之上构建的库,如果您是 Lela 的用户。Lela 可以告诉你屏幕是否发生了变化。Lela 为不同屏幕尺寸、密度、操作系统版本和设备类型具有特定的图像名称,这意味着您可以将不同类型的设备插入 CI 服务器,并让 Lela 验证它们。

重要说明: Lela 使用的代码来自 Perceptual Image Diff,并受 GPL 许可证的许可。在大多数情况下这不重要,因为您没有分发测试,但如果您分叉项目或计划将其包装到产品中,请记住这一点。

查看 Lela 动作

Lela 附带一个演示项目,展示三种不同的结果模式(通过、图像不满足预期、预期图像缺失)对于一个非视网膜的 iOS 6.1 模拟器。我知道这很具体,但这就是需要做到的!

![测试结果](https://github.com/kif-framework/Lela/raw/master/Images/TestResults.png)

您会注意到的一个重要事情是,测试在 Lela 检测到不匹配时不会停止。由于破碎的外观不一定意味着 UI 破碎,测试继续进行以收集更多屏幕并平稳退出测试。

在您的流程中使用 Lela

当您的业务合作伙伴可以确认应用的某个部分时,Lela 最佳。这里有一个如何实施的例子。

  1. 您获得一个新的用户故事与线框图。您编写代码,编写您的 KIF 测试。您使用具有类似 "登录屏幕"、"登录失败" 等逻辑名称的 Lela 测试步骤。
  2. 这些测试将失败并生成具有类似 "Login screen-320x480@1x~iphone,iOS6.1.png" 等名称的有用图像,这些图像存储在您的应用程序文档目录下的测试运行文件夹中。(路径将出现在测试日志中。)
  3. 打包这些图像,发送给您的业务合作伙伴,请他们确认。
  4. 当每个人都在笑的时候,将图片复制到你的测试包中。测试将不再失败(假设UI保持不变)。

当发生更改时,无论是故意的还是无意的,你将得到一个包含三个文件(预期、实际和差异)的测试错误。如果是由于bug,则修复它!如果不是,再次将截图发送给你的业务伙伴。一旦你得到认可,将批准的图片复制到你的测试包中,你就可以设置了。

Three output files showing differences

你可能想使用现有的KIF测试目标来测试这些文件,或者创建一个新的目标。这完全取决于你是否愿意在生产服务器上的KIF测试中看到大量测试失败。

安装

Lela可以通过CocoaPods进行安装。

target 'Acceptance Tests' do
  pod 'Lela', '~> 0.2'
end

示例

这个示例假设你已经熟悉KIF,并借鉴了那个项目的示例。你实际上只需要做两件事。

  1. 将Lela头文件添加到你的测试用例文件中

    #import <Lela/Lela.h>
  2. 在你的测试中添加expectScreenToMatchImageNamed:步骤。

    - (void)testSuccessfulLogin
    {
        [tester enterText:@"[email protected]" intoViewWithAccessibilityLabel:@"Login User Name"];
        [tester enterText:@"thisismypassword" intoViewWithAccessibilityLabel:@"Login Password"];
        [tester tapViewWithAccessibilityLabel:@"Log In"];
    
        // Test that the login screen looks correct.
        [tester expectScreenToMatchImageNamed:@"Filled Out Login Screen"];
    
        // Verify that the login succeeded
        [tester waitForTappableViewWithAccessibilityLabel:@"Welcome"];
    
        // Test that the welcome screen looks correct.
        [tester expectScreenToMatchImageNamed:@"Welcome screen"];
    }

如果你的视图需要一段时间才能稳定,你可能会想要添加一些waitForTimeInterval:步骤。

高级使用 - 处理图像模糊可变性

在某些情况下,某些视图/图像在你应用程序中的渲染可能会有轻微的运行时可变性。当处理模糊图像时这种情况最明显。

为了处理这种情况,你可以指定如果差异不超过X像素,则Lela应认为视图与预期图像匹配。

你可以这样指定这个阈值

        // Test that the login screen looks correct within a threshold
        NSUInteger numberOfPixelsThatCanDiffer = 100;
        [tester expectScreenToMatchImageNamed:@"Filled Out Login Screen" options:@{LECompareOptionThresholdPixels : @(numberOfPixelsThatCanDiffer) }];