BDD使用XCUITest的XCTActivity功能吗?

苹果公司最近宣布了XCUITest框架的新功能。 活动的一项重要功能就是可以将XCTest操作组织为人类可读的活动。 新协议XCTActivity已添加到XCTest框架。

注意:本文最初发布在我的个人博客上

什么是XCUITests中的活动

通常,UI Tests在执行过程中会执行许多操作,例如,点击按钮,滑动等。到目前为止,Xcode中的XCTest报告显示了测试报告中的所有操作,这些操作不是特别可读。 活动是通过提供有意义的名称将这些操作分组的方式,因此XCTest结果将在结果中使用该活动名称以使其更具可读性。 您可以在此处阅读有关Apple官方文档中活动的更多信息。 我们可以在任何动作上进行活动

什么是BDD

BDD aka行为驱动开发是通过使用Gherkin或类似格式的可执行规范来开发应用程序的过程,以便程序员可以将这些规范用于开发,而业务人员可以将其用于需求规范或实时文档。 BDD是一种由内而外的开发方法。 您可以在此处了解有关BDD的更多信息

我们可以使用XCTActivity进行BDD吗?

让我们尝试回答这个问题。 想象一下,我们将创建一个Greeter应用程序,该应用程序在输入时会向用户致意。 所以我们的应用有两个要求

  • 应用程序应具有输入按钮
  • 当用户点击输入按钮时,它应该显示问候消息

让我们来编写这个的Gherkin功能文件:

 功能:招呼用户 
 场景:用户应该看到问候语 

给定的应用程序启动
当用户点击输入按钮时
那我看一下问候语

现在,我们以人类可读的格式编写了所有需求。 让我们深入研究代码。 在Xcode内创建一个名为Greeter的新单视图应用程序,并包括UI测试。

在我们的UI测试中,我们可以添加带有方案名称的测试和带有步骤名称的“活动”,如下所示

  func testUserShouldSeeGreetingsMessage(){ 
XCTContext.runActivity(名称:“启动应用程序”)
XCUIApplication()。launch()
}
XCTContext.runActivity(名称:“当用户点击输入按钮时”)
XCUIApplication()。buttons [“ enter”]。tap()
}
XCTContext.runActivity(named:“然后我应该看到问候消息”){_
XCTAssertTrue(XCUIApplication()。staticTexts [“ Welcome”]。exists)
}

当我们第一次运行测试时,它将失败,因为没有按钮或静态文本。

我们可以轻松实现按钮和静态。 使用辅助功能标识符“输入”将按钮添加到主故事板,并添加标签“ welcomeText”。 现在创建IBAction到按钮以在点击时显示“欢迎”文本。 我们的ViewController将如下所示:

  @IBOutlet弱var welcomeText:UILabel! 
@IBAction func welcomeUser(_ sender:Any){
welcomeText.text =“欢迎”
}

我们将完全实施BDD方案,并且可以看到测试呈绿色。

源代码:

该演示项目的源代码可在Github’XCTActivity-BDD’上获得。

现在,我们已经使用XCUITest的“活动”功能实现了第一个BDD场景。 问题是我们可以以此进行BDD吗?

可能不是,因为活动有一些限制,例如

  • 我们不能在测试方法之外运行活动。
  • 我们不能将活动重用于其他测试,这意味着会有很多操作系统重复。
  • 这些活动只会反映在Xcode报告中,但是我们的测试看起来并不好。 测试将遍历所有活动。
  • 测试报告仅在Xcode中可用,并且很难将这些报告用作实时文档
  • BDD场景报告格式甚至无法与xcpretty一起使用,因为它只会在html报告中显示测试名称,而不显示实际活动。

缺少了什么 ?

XCTActivity是组织测试操作的一项很棒的功能,但是它仍然遗漏了一些有用的要点,以避免重复。 一些遗漏的点是

  • 重新使用XCTActivity,以便可以在测试之间共享活动。
  • runActivity(named:block :)的抽象很难。
  • 测试报告格式化程序以显示Xcode之外的活动。

您认为有什么方法可以利用XCTActivity的现有功能来实现BDD吗? 我希望o在评论或电子邮件中听到您的意见。

像XCBlog的 XCTEQ 发布的帖子一样 您可能还喜欢我们的一些服务,例如访客博客或Mobile DevOps(CI / CD)或测试自动化。 Github 搜索我们的 服务 ,开源项目, 或者在 Twitter Facebook Youtube LinkedIn 上关注我们 下载我们的 XCBlog iOS应用程序以离线阅读博客。

X CTEQ 一家专门从事基于Mobile DevOps,CI / CD,Mobile,AI / ML的测试自动化Checkout XCTEQ产品和服务的公司, 网址 http://www.xcteq.co.uk 或写信给我们info@xcteq.co。英国..