BDD真的适用于UI层吗?

时间:2012-04-27 18:35:10

标签: testing bdd

BDD是一种" out-in" 方法,据我所知,这意味着你从你所知道的开始。您编写故事和场景,然后实现最外层的域对象,移动"向内"并且"故意"通过服务层,域层等向下发现协作者。对于尚未存在的协作者,您可以模拟它(或者#34;伪造它")直到您创建它。 (我直接从Dan North和Kent Beck那里窃取了一些这些条款)。

那么,UI如何适应这个?

借用北方的一个blog entries,他改写了这个:

Given an unauthenticated user
When the user tries to navigate to the welcome page
Then they should be redirected to the login page
When the user enters a valid name in the Name field
And the user enters the corresponding password in the Password field
And the user presses the Login button
Then they should be directed to the welcome page

进入这个:

Given an unauthenticated user
When the user tries to access a restricted asset
Then they should be directed to a login page
When the user submits valid credentials
Then they should be redirected back to the restricted content

他这样做是为了消除非相关域中的语言,其中一个是UI("名称字段","密码字段","登录按钮" )。现在,用户界面可以改变,故事(或者更确切地说,故事的意图)不会破坏。

所以当我为这个故事编写实现时,我是否使用UI?是否更好的启动浏览器并执行"用户提交有效的凭据"通过Selenium测试,或直接连接底层实现(如身份验证服务)?顺便说一下,我使用jBehave作为我的BDD框架,但它可以很容易地成为Cucumber,rSpec或其他许多人。

我倾向于不以自动化的方式测试用户界面,我对像Selenium这样的GUI自动化工具持谨慎态度,因为我认为测试(1)可能过于脆弱,(2)在执行成本的情况下运行是最伟大的。所以我倾向于手动测试用户界面的美学和可用性,并将业务逻辑留给更低,更容易实现自动化的层。 (可能层不太可能改变。)

但是我可以接受转换。那么,BD的BDD是不是?

PS。我已经阅读了关于这个主题的所有帖子,我没有真正解决我的问题。 This one最接近,但我不是在谈论将UI分成单独的故事;相反,我正在谈论完全出于BDD的目的忽略它。

3 个答案:

答案 0 :(得分:17)

大多数使用自动BDD工具的人在UI层使用它。我已经看到一些团队将它带到下一层 - 控制器或演示者层 - 因为他们的UI变化太频繁了。一个团队在其面向客户的站点和管理站点上的控制器上从UI自动化,因为如果某些东西被破坏,他们可以轻松地修复它。

大多数情况下,BDD旨在帮助您与利益相关者进行清晰,明确的对话(或帮助您发现存在歧义的地方!)并将语言带入代码中。对话比工具重要得多。

如果您在编写步骤时使用业务使用的语言,并将其保持在Dan建议的高级别,那么它们应该不那么脆弱且易于维护。这些场景并不是真正的测试;他们是您将如何使用系统的示例,您可以在对话中使用该系统,并将测试作为一个不错的副产品。围绕示例进行对话比自动化更重要,无论您采用哪种级别。

我要说,如果您的用户界面稳定,请尝试自动操作,如果它不适合您,请降低到较低级别或确保您已获得足够的手动测试。如果您正在测试美学,那将有助于(并且永远不会使用自动化来测试美学!)如果您的用户界面不稳定,请不要自动化 - 您只需添加对某些内容的承诺你知道可能会改变,在这种情况下自动化将使其变得更难。

答案 1 :(得分:2)

我自己是BDD的新手,但我发现cuke4ninja网站在这方面有所帮助。他们的建议(我的解释)是你有高级别和UI不可知的步骤定义,调用“工作流程”类,将“点击此按钮”,“填充此字段”等细节分组为捕获的方法正在测试的工作流,它调用一个“屏幕驱动程序”类来处理该特定屏幕的UI自动化。这样,所有UI自动化代码都从步骤定义中抽象出来并且位于单个位置,如果UI发生更改,您只需更改“屏幕驱动程序”中的代码而不是所有多个测试。 Here是讨论它的相关页面。

答案 2 :(得分:0)

BDD在描述什么?

在遵循行为驱动开发(BDD)的团队中,验收标准(即规则)应描述“系统做什么”,而不是“系统如何做”。

那么,遵循BDD的团队在哪里捕获了UI / UX详细信息?

在使用BDD的团队中,用户界面(UI)和用户体验(UX)(按钮,单击,动画等)层的详细信息不应在票证下以文本格式作为接受标准(即规则)包括在内(例如,随JIRA,GitLab等软件出票工具一起发行)。相反,它们应该包含在设计屏幕中(线框,用户行程,各个屏幕等)。例如,文本注释可以带有注释嵌入到设计屏幕中,也可以作为注释嵌入屏幕旁边。