Skip to content

Commit b6786a0

Browse files
v-buriakolegpidsadnyi
authored andcommitted
Possible to relax Gherkin validation for simple steps generator.
1 parent f3b92bd commit b6786a0

File tree

3 files changed

+31
-3
lines changed

3 files changed

+31
-3
lines changed

README.rst

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1175,6 +1175,16 @@ It will print the generated code to the standard output so you can easily redire
11751175
pytest-bdd generate features/some.feature > tests/functional/test_some.py
11761176

11771177

1178+
If your scenarios are not written in `proper` Gherkin language, e.g. they are more like textual scripts, then
1179+
you might find it hard to use `pytest-bdd generate` as by default it validates the order of step types (given-when-then).
1180+
To relax that validation, just pass ``--strict-gherkin=False`` to the ``scenario`` steps generator:
1181+
1182+
1183+
::
1184+
1185+
pytest-bdd generate --strict-gherkin=False <feature file name> .. <feature file nameN>
1186+
1187+
11781188
Advanced code generation
11791189
------------------------
11801190

pytest_bdd/generation.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,15 +126,15 @@ def _find_step_fixturedef(fixturemanager, item, name, type_, encoding="utf-8"):
126126
return fixturedefs
127127

128128

129-
def parse_feature_files(paths):
129+
def parse_feature_files(paths, **kwargs):
130130
"""Parse feature files of given paths.
131131
132132
:param paths: `list` of paths (file or dirs)
133133
134134
:return: `list` of `tuple` in form:
135135
(`list` of `Feature` objects, `list` of `Scenario` objects, `list` of `Step` objects).
136136
"""
137-
features = get_features(paths)
137+
features = get_features(paths, **kwargs)
138138
scenarios = sorted(
139139
itertools.chain.from_iterable(feature.scenarios.values() for feature in features),
140140
key=lambda scenario: (scenario.feature.name or scenario.feature.filename, scenario.name),

pytest_bdd/scripts.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,20 +47,38 @@ def check_existense(file_name):
4747

4848
def print_generated_code(args):
4949
"""Print generated test code for the given filenames."""
50-
features, scenarios, steps = parse_feature_files(args.files)
50+
features, scenarios, steps = parse_feature_files(args.files, strict_gherkin=args.strict_gherkin)
5151
code = generate_code(features, scenarios, steps)
5252
if six.PY2:
5353
print(code.encode("utf-8"))
5454
else:
5555
print(code)
5656

5757

58+
def str2bool(val):
59+
"""Convert string to boolean."""
60+
if "True" == val:
61+
return True
62+
elif "False" == val:
63+
return False
64+
else:
65+
return val
66+
67+
5868
def main():
5969
"""Main entry point."""
6070
parser = argparse.ArgumentParser(prog="pytest-bdd")
6171
subparsers = parser.add_subparsers(help="sub-command help", dest="command")
6272
subparsers.required = True
6373
parser_generate = subparsers.add_parser("generate", help="generate help")
74+
parser_generate.add_argument(
75+
"--strict-gherkin",
76+
default=True,
77+
choices=[True, False],
78+
type=str2bool,
79+
metavar="[True|False]",
80+
help="To strict or relax the validation (given-when-then)",
81+
)
6482
parser_generate.add_argument(
6583
"files",
6684
metavar="FEATURE_FILE",

0 commit comments

Comments
 (0)