表现(BDD)AmbiguousStep错误

时间:2014-10-12 04:51:44

标签: python bdd python-behave

开始使用Behave BDD测试,我发现没有步骤定义命名空间的东西,这很容易导致AmbiguousStep异常。这里的最佳做法是什么?我认为当你的测试项目越来越大时,这将成为一个问题。

以下是我要做的事情:

特征-1:

Feature: feature1
  Scenario: f1s1
    When take action
    Then it's ok

特征-2:

Feature: feature1
  Scenario: f2s1
    When take action
    Then it's ok

foo4feature1.py:

@when('take action')
def step_impl(context):
    assert True

@then("it's ok")
def step_impl(context):
    assert True

bar4feature2.py:

@when('take action')
def step_impl(context):
    assert True # some other logic here according to feature2

我的两个功能( feature-1 feature-2 )都有步骤采取行动。这些两个步骤在它们的场景中具有彼此不同的含义。它们恰好是相同的名称(例如,采取行动)。我知道我可以仔细选择步骤的名称(例如,使用"采取行动f2"而不是"采取行动"在 feature2 )以避免冲突。然而,在一个大型测试项目中,您无法确保每个人都记住其他人的功能中的步骤名称。作为BDD的新手,我正在寻找最佳实践来解决这个问题。

3 个答案:

答案 0 :(得分:0)

BDD是一种通信和协作技术。存在直接自动化客户,开发人员和测试人员共同发现的示例的工具,但这些场景应该用无处不在的语言编写。你的域名(参见Eric Evans的Domain Driven Design一书)。

因此,简短的回答是,最佳实践需要协作定义共享词汇。这些场景更容易阅读和理解....这是一件好事。

答案 1 :(得分:0)

通常,您需要简明扼要地执行您的步骤(大多数BDD框架都是如此)。因此,一个目录范围内的同一步骤只能有一个含义。如果您对同一步骤(文本)需要两种不同的含义,则当前需要使用不同的目录。

将来,行为将提供特定功能"范围概念。这将使您完全符合您的要求。

答案 2 :(得分:0)

将此添加到environment.py中解决了我的问题。 您需要导入解析。

@parse.with_pattern(r'[^"]*')
def parse_unquoted(text):
  """Parse/match string(s) that do not contain double-quote characters."""
  return text