循环在python行为中执行n-1次

时间:2016-03-04 20:27:26

标签: python python-behave

我有一个行为的步骤,调用另一个python类中的方法,如下所示

@when('we query for a specific resource')
def step_impl(context):

context.resource='myresource'
jsonutil=JSONUtil.JSONUtil()
response=jsonutil.parseJSON(context.resource)
assert True

parsejson方法在JSONUtil类

中如下所示
def parseJSON(self,resource):

    url= "http://"+data.test.engine_url+'/api/v1/policies?resource='+resource
    response=requests.get(url)
    time.sleep(5)
    json_data = json.loads(response.text)
    #time.sleep(5)
    #print(json_data)
    x=[1,2,3]
    for i in x:
        print("%d" % i)

    #for json_obj in json_data:
    #        if 'statements' in json_obj:
    #            print(json_obj['statements'][0]['resource'][0])

    return response

执行此步骤时。我得到以下输出

1
2
<<Note that 3 does not get printed>>

但是当以下列方式调用方法parsejson时

J=JSONUtil()
J.parseJSON('myJSON')

我得到以下输出

1
2
3

使用behave调用代码时为什么执行for循环n-1次的任何原因/指针?

1 个答案:

答案 0 :(得分:0)

只有我知道的事情可以解释为什么正确生成行为之外的预期行的代码突然产生缺少最后一行的输出如果在中运行:表示输出被覆盖表现的输出。默认情况下,在Behave运行一个步骤之前,它会在步骤运行后以中性色打印到屏幕上的步骤名称。使用步骤的名称覆盖输出的最后一行 ,颜色表示是否步骤失败,成功,未定义等等。

我的补救措施是在我的打印输出中添加更多换行符。您也可以使用--no-color。我更喜欢有颜色,所以我添加换行符。

这是一个例子。请考虑此功能文件:

Feature: foo

Scenario: foo
  When something
  And something else
  And and another thing

这些步骤:

@when("something")
def step_impl(context):
    for i in (1, 2, 3):
        print("%d" % i)

@when("something else")
def step_impl(context):
    for i in (1, 2, 3):
        print("%d" % i)
    print()

@when("and another thing")
def step_impl(context):
    pass

如果您运行behave --no-capture

behave --no-capture
Feature: foo # features/foo.feature:1

  Scenario: foo           # features/foo.feature:3
    When something        # features/steps/steps.py:1
1
2
    When something        # features/steps/steps.py:1 0.000s
    And something else    # features/steps/steps.py:6
1
2
3
    And something else    # features/steps/steps.py:6 0.000s
    And and another thing # features/steps/steps.py:12 0.000s

1 feature passed, 0 failed, 0 skipped
1 scenario passed, 0 failed, 0 skipped
3 steps passed, 0 failed, 0 skipped, 0 undefined
Took 0m0.000s

(上面的输出会被着色,但复制粘贴不会保留颜色。)

步骤“当某事物”缺少输出的最后一行,而“当其他东西”具有所有预期的行时,只是因为它在结尾处有一个额外的print。但是,请注意两个步骤的步骤,步骤名称在输出中出现两次。考虑颜色,在两种情况下,第一次出现步骤名称时,它是灰色的,第二次是绿色。如果您也使用--no-color运行它,则会获得:

Feature: foo # features/foo.feature:1

  Scenario: foo           # features/foo.feature:3
    When something        # features/steps/steps.py:1
1
2
3
    And something else    # features/steps/steps.py:6
1
2
3

    And and another thing # features/steps/steps.py:12

1 feature passed, 0 failed, 0 skipped
1 scenario passed, 0 failed, 0 skipped
3 steps passed, 0 failed, 0 skipped, 0 undefined
Took 0m0.000s

两个循环都输出预期的行,并且步骤的名称不会出现多次。