如何在Python行为的示例表中传递无或空白或多种数据类型

时间:2019-02-05 19:24:29

标签: python-3.x gherkin python-behave

我是Python的新手-行为,现在被困住了,需要您的帮助。我有一个带有示例表的方案大纲,并且我想同时执行肯定和否定测试,所以我想为该列传递None或其他数据类型。例如。

Scenario Outline:
Given I have <text> different scenarios with <sample> parameter

Examples:
| text | Sample |
| 5    | 33     |
| a    |        |
|      | abc    |

现在,当我什么都不做时,我将无法执行该步骤。你能帮忙吗?

我尝试了以下代码:

@parse.with_pattern(r"\w+")
def parse_string(text):
    return text.strip()

register_type(Val=parse_string)
use_step_matcher("cfparse")

@given(u'I have {text:Val?} different scenarios with {sample:Val?} 
parameter')
def step_impl(context, text, sample):
   context.text = text
   context.sample = sample

,但是以上代码仅在我仅将寄存器类型与一个参数(即用于文本或样本)一起使用时起作用。如果我同时使用它们,那么我会得到一个错误,那就是未执行该步骤。

如果您可以建议我一种更好的方法,那么我将不胜感激。

1 个答案:

答案 0 :(得分:1)

非常感谢,这是一个简单的解决方法!注意给定步骤中使用的参数变量:

Given I have <text> different scenarios with <sample> parameter

第二个参数变量sample为小写。但是,示例表的第二列的标题为Sample,这是大写的。这些必须相同。将Sample更改为sample,测试应该成功运行!

这是我的机器上的输出内容:

$ behave --tags @temp
Feature: Temp Test # features/unit.feature:1

  @temp
  Scenario Outline:  -- @1.1                             # features/unit.feature:13
    Given I have 5 different scenarios with 33 parameter # features/steps/unit.py:22 0.001s

  @temp
  Scenario Outline:  -- @1.2                           # features/unit.feature:14
    Given I have a different scenarios with  parameter # features/steps/unit.py:22 0.000s

  @temp
  Scenario Outline:  -- @1.3                             # features/unit.feature:15
    Given I have  different scenarios with abc parameter # features/steps/unit.py:22 0.000s

1 feature passed, 0 failed, 2 skipped
3 scenarios passed, 0 failed, 19 skipped
3 steps passed, 0 failed, 57 skipped, 0 undefined
Took 0m0.002s