choreo
choreo is an executable Domain-Specific Language (DSL) for writing automated, behaviour-driven tests for command-line
applications and system interactions. It uses a structured, human-readable format inspired by Gherkin to define test
scenarios that are easy to write, read, and maintain.
The goal of choreo is to provide the power and expressiveness of a BDD framework like Cucumber, but in a self-contained, executable format specifically designed for testing the shell.
Key Features
- Human-Readable BDD Syntax: Uses a
given-when-thenstructure withintestblocks to create clear, self-documenting tests. - Executable Scripts:
.chorfiles are complete, runnable tests. No separate "step definition" or "glue code" files are required. - Stateful Scenarios: Capture variables from command output and reuse them in subsequent steps to test complex workflows.
- Multi-Actor System: Interact with and assert against multiple parts of your system in a single test.
- Terminal: Control an interactive pseudo-terminal, check
stdout, `stderr, and command exit codes. - FileSystem: Create, delete, and verify files and directories as part of your test setup and assertions.
- Terminal: Control an interactive pseudo-terminal, check
- Configurable Test Runner: Control test behavior with a settings block for features like timeouts and custom shell paths.
- CI-Friendly Reporting: Generates standard JSON reports for easy integration with CI/CD pipelines.
Example Usage
Here is a simple script that tests that tee correctly writes its input to both standard output and a
file.
# feature: "Tee Utility"
# This test verifies that tee correctly writes its input to both
# standard output and the specified file.
See test_medi_env_workflow.chor for a more comprehensive example using medi as the tools to test
Full Documentation
For a complete guide to all keywords, actions, conditions, and features, please see the official Choreo DSL Reference.
Getting Started
Prerequisites
You need Rust and Cargo installed.
Build
Run a script
Use the run command to execute a .chor file. Use the --verbose flag for detailed debug output.
# Run a test script
# Run with verbose logging
Status & Roadmap
Choreo is currently in the alpha stage. The core engine is functional, but it is not yet ready for production use.
The journey ahead includes:
- A
default_actorsetting to reduce verbosity in tests. - More Actors
WebActorfor making and asserting against HTTP API calls.
- Generate JUnit XML reports.
- Revisit the vhs inspiration by adding an option to record the terminal session as a GIF.
- An even richer vocabulary of built-in matchers and assertions.
- A dedicated editor with syntax highlighting and linting.
- A website with tutorials, examples, and documentation.
Contributing
Contributions are welcome! Please feel free to open an issue or submit a pull request.