0

我的业务用户喜欢使用 then 句子“它应该被创建”,它由场景的上下文决定。例如:

Given I have gift certificate for "<name>"
When I enter the gift certificate
Then It should be created

或者

Given Customer order return for order "<order_no>"
When I create the customer order return
Then It should be created

在“那么它应该被创建”中,我想检索创建的礼券或客户订单退货以进行比较。但是,它们具有完全不同的 API 和对象。

首先,有没有办法在 Python Behave 中做到这一点而不会得到“Exception AmbiguousStep:”?

如果不是,那么在 BDD 世界中最好的做法是什么,而不用强迫用户不断重复自己说“那么应该创建礼券”或“那么应该创建客户订单退货”?

谢谢。

4

1 回答 1

1

在您在这里给我们的特定情况下,我会更详细地编写步骤以避免“它”。所以我会写“然后应该创建礼券”等。我更愿意避免让步骤依赖于通过的状态context

然而...

有时这样做会有问题。在你的情况下,也许与你的业务用户打交道的政治使得要求更多的冗长不会很好。或者可能有技术原因导致我上面建议的内容不受欢迎或完全不可行。

如果您不能使用更详细的步骤,您可以做的是让该Then it should be created步骤依赖于context被设置为一个值的字段,该值将为该步骤提供足够的信息以执行其工作。它可能是类似的东西context.created_object。创建对象的步骤会将此字段设置为适当的值,以便Then it should be created可以执行其工作。您将在其中存储的具体内容取决于您的应用程序的具体情况。

对于我的一个应用程序,我根据浏览器窗口中的鼠标单击测试上下文菜单的外观,有时我记录的是对用户右键单击以显示菜单的 DOM 元素的引用. 有时它是一个提供 x、y 坐标的对象。这是我的应用程序执行检查所需要的。在这种情况下,最好让信息通过,context因为在以后的步骤中让 Selenium 重新查询 DOM 在网络上可能会非常昂贵。通过数十次测试,它可以轻松地增加测试套件的运行时间,然后考虑必须针对浏览器、操作系统和浏览器版本的多种组合运行该套件。

于 2015-07-15T16:48:18.103 回答