【问题标题】:Which are good practices for writing/organizing JBehave stories?哪些是编写/组织 JBehave 故事的好习惯?
【发布时间】:2013-07-18 09:51:20
【问题描述】:

我们的项目(Java、Selenium)中有很多 JBehave 故事。有时,不同故事中的步骤在语法上相同,但背后的逻辑却不同。例如步骤:

When saves data

在一个故事中意味着简单地点击保存按钮,但在另一种情况下需要更复杂的行为。 可以在故事中以不同方式定义这些步骤,例如:

When saves Employee data
When clicks Save button and confirms save

但在大型项目中,有很多故事,很难编辑这样的故事。有时商界人士也反对这种故事修改。 您能否在此类情况下建议一些最佳实践或代码示例?可能在技术上可以定义测试范围 - 就像这些将是员工屏幕的故事和方法,但这些是用于项目屏幕的?或者还有其他想法如何处理?

附加信息:现在测试被组织在文件夹中,就像这里建议的那样:Organising JBehave stories,但它们被安装程序视为一个。设置与这些非常相似:http://jbehave.org/reference/stable/developing-stories.html#configuring

【问题讨论】:

    标签: java selenium bdd jbehave


    【解决方案1】:

    一般来说,如果用户能分辨出区别,那么自动化应该也能做到。

    使用您的自动化工具查找可以显示您所处环境的内容。例如,如果您有两个屏幕,一个用于“联系人”,一个用于“员工数据”,请查找该文本,然后您'会知道你在哪个屏幕上。或者,您可以查看 URL,或包含自动化工具将找到的特定隐藏标识符。

    这类似于“IsPurchased()”步骤here(我使用的是 DSL 而不是 JBehave,它是 C#,但原理相同)。如果你真的look at the code for that step,你会看到我在寻找一种支付类型,如果没有选择一个有效的,那么我选择一个。

    在您的情况下,您的上下文比单选按钮大一点;这是一整页。我建议您将“联系人”步骤与“员工数据”步骤和“共享”步骤分开,并调用适合您的上下文的任何一个。

    【讨论】:

    • 感谢您的回复。寻找地址或特定 ID 有效,但将 if 放入代码 (if getScreenName().equals("Employees") { do methods1... })else if (getScreenName().equals(){do methods2...} 可能不太优雅?关于分离 - 这正是一个问题,我不知道如何在技术上做到这一点。
    • 最好用一种对业务有意义的语言来表达凌乱的代码和干净的场景(顺便感谢您坚持这一点!)。我想你只会有几个这样的步骤,所以应该不会太讨厌。
    • 最后我们按照您的建议分离了上下文。从技术上讲,我们已经覆盖了这里提到的 stepsFactory stackoverflow.com/questions/16525464/…
    猜你喜欢
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多