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。英国..