Behave step matcher

  • behave 提供3中step匹配模式
  • 'parse'
  • 'cfparse' 基於parse的擴展,  支持cardinality field syntax?
  • 're' 支持在step中定義正則表達式

'parse'  是默認的step mathcer,  他被使用最多, 有如下特色正則表達式

  • 上手容易, 易讀性好, 好理解
  • 支持預約義的數據類型和用戶自定義類型
  • 能夠在自定義數據類型中使用re, 在step_impl中隱藏了re, 可讀性好

'cfparse' 是parse的擴展, 設計初衷是替代parse, 它有如下特色express

  • 繼承parse, 支持 the cardinality field syntax
  • 自動建立缺乏的類型轉換函數for fields with cardinality field part
  • 基於parse_type

're'有如下特色less

  • addresses some cases that cannot be solved otherwise (currently)
  • is backward compatible to cucumber (uses regular expressions)
  • is less ambiguous compared to the 「parse」 matcher (currently)

定義step matcher的兩種方法

  •  在environment.py中定義默認的matcher
    # -- FILE: features/environment.py
    from behave import use_step_matcher
    
    # -- SELECT DEFAULT STEP MATCHER: Use "re" matcher as default.
    # use_step_matcher("parse")
    # use_step_matcher("cfparse")
    use_step_matcher("re")
  • 在step definition文件中切換step matcher, 一樣使用use_step_matcher("re")
    從切換step matcher行後的全部step_impl都使用你切換的step matcher, 除非你再次切換

正則匹配

# 簡單的group捕獲, 並賦值給P<test>
#
-- SIMPLE GROUP: foo @when(u'I try to match "(?P<foo>foo)"') def step_when_I_try_to_match_foo(context, foo): context.foo = foo # -- SIMPLE GROUP: anything else @when(u'I try to match "(?P<anything>.*)"') def step_when_I_try_to_match_anything_else(context, anything): context.anything = anything

# 可選的的group: (?P<an_>an )?
@when(u'I try to match (?P<an_>an )?optional "(?P<foo>foo)"') def step_when_I_try_to_match_an_optional_foo(context, an_, foo): context.foo = foo context.an_ = an_

# 套嵌的正則

@when(u'I try to match nested "(?P<foo>foo(?P<bar>bar)?)"') def step_when_I_try_to_match_nested_foobar(context, foo, bar): context.foo = foo context.bar = bar
相關文章
相關標籤/搜索