https://github.com/mathiaspaulenko/behave-model
The canonical object model for Behave projects — Gherkin v6 Rules, Tag Expression v2, full Behave 1.3.x compatibility.
https://github.com/mathiaspaulenko/behave-model
bdd behave behave-model cucumber domain-model gherkin gherkin-v6 python tag-expressions testing
Last synced: 3 days ago
JSON representation
The canonical object model for Behave projects — Gherkin v6 Rules, Tag Expression v2, full Behave 1.3.x compatibility.
- Host: GitHub
- URL: https://github.com/mathiaspaulenko/behave-model
- Owner: MathiasPaulenko
- License: mit
- Created: 2026-07-01T14:33:45.000Z (4 days ago)
- Default Branch: main
- Last Pushed: 2026-07-01T17:33:31.000Z (4 days ago)
- Last Synced: 2026-07-01T19:16:21.341Z (4 days ago)
- Topics: bdd, behave, behave-model, cucumber, domain-model, gherkin, gherkin-v6, python, tag-expressions, testing
- Language: Python
- Size: 97.7 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: docs/contributing.md
- License: LICENSE
Awesome Lists containing this project
README
# behave-model
**The canonical object model for [Behave](https://github.com/behave/behave) projects.**
[](https://github.com/MathiasPaulenko/behave-model/actions/workflows/ci.yml)
[](https://pypi.org/project/behave-model/)
[](https://pypi.org/project/behave-model/)
[](https://opensource.org/licenses/MIT)
[](https://codecov.io/gh/MathiasPaulenko/behave-model)
[Documentation](https://mathiaspaulenko.github.io/behave-model/) · [Getting Started](https://mathiaspaulenko.github.io/behave-model/getting-started/quick_start/) · [API Reference](https://mathiaspaulenko.github.io/behave-model/api/overview/) · [Changelog](https://mathiaspaulenko.github.io/behave-model/changelog/)
---
`behave-model` provides a clean, stable, and extensible Python API that represents every element of a Behave project — features, rules, scenarios, steps, tags, tables, docstrings, and more.
**Why does this exist?** Every Behave tooling project parses `.feature` files independently, duplicating effort and producing inconsistent results. `behave-model` provides a single, well-tested domain model so that tools can depend on it instead of reinventing the parser.
## Installation
```bash
pip install behave-model
```
## Quick Example
```python
from behave_model import load_project
project = load_project("features/")
# Query scenarios by tag
for scenario in project.find_scenarios(tag="@smoke"):
print(scenario.name)
# Statistics
stats = project.statistics()
print(f"{stats['features']} features, {stats['scenarios']} scenarios, {stats['steps']} steps")
# Validate
from behave_model import Validator
issues = Validator().validate(project)
for issue in issues:
print(f"[{issue.severity}] {issue.message}")
```
## Requirements
- Python >= 3.11
- `behave >= 1.2.6` (only runtime dependency)
## Features
- **Gherkin v6** — Full `Rule` keyword support
- **Domain model** — Pure frozen dataclasses for every Gherkin element
- **Visitor pattern** — DFS/BFS tree traversal with custom visitors
- **Query API** — Filter by name, tag, keyword, or text content
- **Serializers** — Dict, JSON, and pretty-printed Gherkin output
- **Transformations** — Rename, sort, normalize, add/remove tags and scenarios
- **Validation** — Pluggable rule framework with built-in checks
- **Statistics** — Project metrics out of the box
## Documentation
All guides, API reference, examples, and architecture docs are at **[mathiaspaulenko.github.io/behave-model](https://mathiaspaulenko.github.io/behave-model/)**.
## Development
```bash
git clone https://github.com/MathiasPaulenko/behave-model.git
cd behave-model
pip install -e ".[dev]"
make test # run tests
make lint # lint with ruff
make docs-serve # serve docs locally
```
## Contributing
Contributions are welcome! See the [Contributing guide](https://mathiaspaulenko.github.io/behave-model/contributing/) for guidelines.
## License
MIT — see [LICENSE](https://github.com/MathiasPaulenko/behave-model/blob/main/LICENSE).