Add examples data in the scenario report. closes #145

This commit is contained in:
Anatoly Bubenkov 2015-08-31 16:39:02 +02:00
parent 342e02dc99
commit fbaf239e83
1 changed files with 209 additions and 0 deletions

View File

@ -0,0 +1,209 @@
"""Test scenario reporting."""
import textwrap
class equals_any(object):
"""Helper object comparison to which is always 'equal'."""
def __init__(self, type=None):
self.type = type
def __eq__(self, other):
return isinstance(other, self.type) if self.type else True
def __cmp__(self, other):
return 0 if (isinstance(other, self.type) if self.type else False) else -1
string = type(u'')
def test_step_trace(testdir):
"""Test step trace."""
feature = testdir.makefile('.feature', test=textwrap.dedent("""
@feature-tag
Feature: One passing scenario, one failing scenario
@scenario-passing-tag
Scenario: Passing
Given a passing step
And some other passing step
@scenario-failing-tag
Scenario: Failing
Given a passing step
And a failing step
Scenario Outline: Outlined
Given there are <start> cucumbers
When I eat <eat> cucumbers
Then I should have <left> cucumbers
Examples:
| start | eat | left |
| 12 | 5 | 7 |
| 5 | 4 | 1 |
"""))
relpath = feature.relto(testdir.tmpdir.dirname)
testdir.makepyfile(textwrap.dedent("""
import pytest
from pytest_bdd import given, when, then, scenarios
@given('a passing step')
def a_passing_step():
return 'pass'
@given('some other passing step')
def some_other_passing_step():
return 'pass'
@given('a failing step')
def a_failing_step():
raise Exception('Error')
@given('there are <start> cucumbers')
def start_cucumbers(start):
assert isinstance(start, int)
return dict(start=start)
@when('I eat <eat> cucumbers')
def eat_cucumbers(start_cucumbers, eat):
assert isinstance(eat, float)
start_cucumbers['eat'] = eat
@then('I should have <left> cucumbers')
def should_have_left_cucumbers(start_cucumbers, start, eat, left):
assert isinstance(left, str)
assert start - eat == int(left)
assert start_cucumbers['start'] == start
assert start_cucumbers['eat'] == eat
scenarios('test.feature', example_converters=dict(start=int, eat=float, left=str))
"""))
result = testdir.inline_run('-vvl')
assert result.ret
report = result.matchreport('test_passing', when='call').scenario
expected = {'feature': {'description': u'',
'filename': feature.strpath,
'line_number': 2,
'name': u'One passing scenario, one failing scenario',
'rel_filename': relpath,
'tags': [u'feature-tag']},
'line_number': 5,
'name': u'Passing',
'steps': [{'duration': equals_any(float),
'failed': False,
'keyword': 'Given',
'line_number': 6,
'name': u'a passing step',
'type': 'given'},
{'duration': equals_any(float),
'failed': False,
'keyword': 'And',
'line_number': 7,
'name': u'some other passing step',
'type': 'given'}],
'tags': [u'scenario-passing-tag'],
'examples': []}
assert report == expected
report = result.matchreport('test_failing', when='call').scenario
expected = {'feature': {'description': u'',
'filename': feature.strpath,
'line_number': 2,
'name': u'One passing scenario, one failing scenario',
'rel_filename': relpath,
'tags': [u'feature-tag']},
'line_number': 10,
'name': u'Failing',
'steps': [{'duration': equals_any(float),
'failed': False,
'keyword': 'Given',
'line_number': 11,
'name': u'a passing step',
'type': 'given'},
{'duration': equals_any(float),
'failed': True,
'keyword': 'And',
'line_number': 12,
'name': u'a failing step',
'type': 'given'}],
'tags': [u'scenario-failing-tag'],
'examples': []}
assert report == expected
report = result.matchreport('test_outlined[12-5.0-7]', when='call').scenario
expected = {'feature': {'description': u'',
'filename': feature.strpath,
'line_number': 2,
'name': u'One passing scenario, one failing scenario',
'rel_filename': relpath,
'tags': [u'feature-tag']},
'line_number': 14,
'name': u'Outlined',
'steps': [{'duration': equals_any(float),
'failed': False,
'keyword': 'Given',
'line_number': 15,
'name': u'there are <start> cucumbers',
'type': 'given'},
{'duration': equals_any(float),
'failed': False,
'keyword': 'When',
'line_number': 16,
'name': u'I eat <eat> cucumbers',
'type': 'when'},
{'duration': equals_any(float),
'failed': False,
'keyword': 'Then',
'line_number': 17,
'name': u'I should have <left> cucumbers',
'type': 'then'}],
'tags': [],
'examples': [{'line_number': 19,
'name': None,
'row_index': 0,
'rows': [['start', 'eat', 'left'],
[[12, 5.0, '7'], [5, 4.0, '1']]]}],
}
assert report == expected
report = result.matchreport('test_outlined[5-4.0-1]', when='call').scenario
expected = {'feature': {'description': u'',
'filename': feature.strpath,
'line_number': 2,
'name': u'One passing scenario, one failing scenario',
'rel_filename': relpath,
'tags': [u'feature-tag']},
'line_number': 14,
'name': u'Outlined',
'steps': [{'duration': equals_any(float),
'failed': False,
'keyword': 'Given',
'line_number': 15,
'name': u'there are <start> cucumbers',
'type': 'given'},
{'duration': equals_any(float),
'failed': False,
'keyword': 'When',
'line_number': 16,
'name': u'I eat <eat> cucumbers',
'type': 'when'},
{'duration': equals_any(float),
'failed': False,
'keyword': 'Then',
'line_number': 17,
'name': u'I should have <left> cucumbers',
'type': 'then'}],
'tags': [],
'examples': [{'line_number': 19,
'name': None,
'row_index': 1,
'rows': [['start', 'eat', 'left'],
[[12, 5.0, '7'], [5, 4.0, '1']]]}],
}
assert report == expected