
Security News
Meet Socket at Black Hat and DEF CON 2025 in Las Vegas
Meet Socket at Black Hat & DEF CON 2025 for 1:1s, insider security talks at Allegiant Stadium, and a private dinner with top minds in software supply chain security.
A package devoted to agile implementation of class-based behavior tests. It consists of (see example):
Although this package is intended to be used with pytest, until version 2.0.0 the base test case class for all test suits bdd_coder.tester.tester.BaseTestCase
was a unittest.TestCase
subclass. From version 2.0.0 unittest.TestCase
is no longer supported, so that pytest
's setup and teardown functions - see pytest-xunit_setup - should be implemented instead. See pytest-unittest on the benefits of dropping unittest.TestCase
.
See mastermind for an example testing a Django REST Framework API.
Test this package with tox - see tox.ini.
This package was born as a study of Behavior Driven Development; and from the wish of having a handy implementation of Gherkin language in class-based tests, to be employed so that development cycles start with coding a behavior test suite containing the scenario specifications in test case method __doc__
s - as bdd_coder.tester
achieves.
In conjunction with bdd_coder.coder
, development cycles start with:
Each test suite (tester package) has a structure
āā __init__.py
āā base.py
āā test_stories.py
corresponding to a specifications directory with story YAML files
āā some-story.yml
āā another-story.yml
āā ...
āā this-story.yml
A story file corresponds to a test case class declared into test_stories.py
, consisting mainly of scenario declarations:
Title: <Story title> # --> class __name__
Story: |- # free text --> class __doc__
As a <user group>
I want <feature>
In order to/so that <goal>
Scenarios:
Scenario name: # --> scenario __doc__
- Given an event $(1) with $(A) and $first_param that gives `x` and `y`
- When it happens that...
- And the parameters $second and $third enter
- Then finally we assert that...
# ...
# ...
Only the keys Title
, Story
, Scenarios
are required and mean something.
A scenario declaration consists of a list of step declarations, which:
request
fixture as the tuple request.param
bdd_coder.tester.decorators.Gherkin
decorator instance, by name into its outputs
map of sequencesThe core of each test suite consists of the following required class declaration in its base.py
module:
from bdd_coder import decorators
from bdd_coder import tester
gherkin = decorators.Gherkin(logs_path='example/tests/bdd_runs.log')
@gherkin
class BddTester(tester.BddTester):
"""
The decorated BddTester subclass of this tester package.
It manages scenario runs. All test classes inherit from this one,
so generic test methods for this package are expected to be defined here
"""
Then, story test cases are declared in test_stories.py
, with the base
module imported, scenario declarations such as
class StoryTitle(BddTesterSubclass, AnotherBddTesterSubclass):
@base.gherkin.scenario(['param1_value1'], ['param1_value2'])
def test_scenario_name(self):
"""
Given $(input1) and $param1 step one gives `x` and `y`
...
Last step with $(input2) gives `result`
"""
that will run according to their __doc__
s, and the necessary step method definitions.
usage: bdd-make-yaml-specs [-h] [--overwrite] test_module specs_path
positional arguments:
test_module str. Passed to `importlib.import_module`
specs_path str. Will try to write the YAML files in here
keyword arguments:
--overwrite, -o
Additionally, validates code against generated specifications.
usage: bdd-blueprint [-h] [--base-class BASE_CLASS]
[--specs-path SPECS_PATH] [--tests-path TESTS_PATH]
[--test-module-name TEST_MODULE_NAME] [--overwrite]
keyword arguments:
--base-class BASE_CLASS, -b BASE_CLASS
str. Base test case class
--specs-path SPECS_PATH, -s SPECS_PATH
str. Default: behaviour/specs. Directory containing the YAML specs
--tests-path TESTS_PATH, -t TESTS_PATH
str. Default: next to specs
--test-module-name TEST_MODULE_NAME, -tm TEST_MODULE_NAME
str. Default: stories. Name for test_<name>.py
--overwrite, -o
The following:
bdd-coder$ bdd-blueprint -s example/specs -t example/tests --overwrite
will rewrite example/tests (with no changes if example/specs is unmodified), and run pytest
on the blueprint yielding the output, like
============================= test session starts ==============================
platform [...]
collecting ... collected 2 items
example/tests/test_stories.py::TestClearBoard::test_odd_boards PASSED [ 50%]
example/tests/test_stories.py::TestClearBoard::test_start_board PASSED [100%]
=========================== 2 passed in 0.04 seconds ===========================
Use this command in order to update a tester package with new YAML specifications. It removes scenario declarations only; it changes the scenario set, which may imply a new test class hierarchy with new stories and scenarios; it adds the necessary step methods, and new aliases (if any).
usage: bdd-patch [-h] test_module [specs_path]
positional arguments:
test_module str. Passed to `importlib.import_module`
specs_path str. Directory to take new specs from. Default: specs/ next to test package
The following:
bdd-coder$ bdd-patch example.tests.test_stories example/new_specs
will turn example/tests into example/new_tests, and run pytest
on the suite yielding something like
============================= test session starts ==============================
platform [...]
collecting ... collected 3 items
example/tests/test_stories.py::TestNewGame::test_even_boards PASSED [ 33%]
example/tests/test_stories.py::TestNewGame::test_funny_boards PASSED [ 66%]
example/tests/test_stories.py::TestNewGame::test_more_boards PASSED [100%]
=========================== 3 passed in 0.04 seconds ===========================
FAQs
Gherkin language in class-based tests - test suite blueprinting
We found that bdd-coder demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.Ā It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Meet Socket at Black Hat & DEF CON 2025 for 1:1s, insider security talks at Allegiant Stadium, and a private dinner with top minds in software supply chain security.
Security News
CAI is a new open source AI framework that automates penetration testing tasks like scanning and exploitation up to 3,600Ć faster than humans.
Security News
Deno 2.4 brings back bundling, improves dependency updates and telemetry, and makes the runtime more practical for real-world JavaScript projects.