btest is a lightweight, flexible testing framework for Bash scripts. It provides a simple yet powerful way to organize, execute, and report on tests for shell scripts and command-line tools.
- Group tests into logical blocks for better organization
- Execute tests as standalone scripts
- Run batches of tests across multiple files or directories
- TAP (Test Anything Protocol) compatible output
- Conditional test execution
- Time tracking for performance analysis
- Detailed reporting and summaries
- Test file generation
- Parallel test execution
- Dry run mode
- Verbose output and configurable log levels
git clone https://github.com/muenalan/btest.git
cd btest
sudo make install
- Generate a test file:
btest generate my_first_test
- Edit the generated file
my_first_test.bash
:
#!/bin/bash
# BT_DIR will be set by btest at runtime
source $BT_DIR/btest.bash
bt_begin "My First Test" 2
bt_declare "Subtest 1"
bt_ok_if [[ 2 -eq 2 ]]
bt_declare "Subtest 2"
bt_ok_if [[ -f /etc/passwd ]]
bt_end
- Run the test:
btest file my_first_test.bash
btest supports a subcommand structure similar to docker:
Usage: btest <command> [options]
Commands:
file Run tests on specific files
folder Run tests on all files in a folder
generate Generate a new test file
status Show available tests
help Display help for a specific command
Global Options:
-v, --version Display the version of btest
-h, --help Display this help message
btest file [options] <file1> [file2 ...]
Options:
-r <reporter> Specify the reporter to use (default: tap)
-o <file> Write output to a file instead of stdout
-v, --verbose Enable verbose output
-l, --loglevel Set the log level
-d, --dry-run Perform a dry run without executing tests
Environment variables:
BTEST_REPORTER Set the default reporter
BTEST_OUTPUT_FILE Set the default output file
BTEST_VERBOSE Set verbose mode (0 or 1)
BTEST_LOG_LEVEL Set the default log level
BTEST_DRY_RUN Set dry run mode (0 or 1)
btest folder [options] <folder1> [folder2 ...]
Options:
-r <reporter> Specify the reporter to use (default: tap)
-o <file> Write output to a file instead of stdout
-v, --verbose Enable verbose output
-l, --loglevel Set the log level
-p, --parallel Run tests in parallel
-d, --dry-run Perform a dry run without executing tests
Environment variables:
BTEST_REPORTER
For detailed usage instructions, API reference, and examples, please see the full documentation.
We welcome contributions! Please see our Contributing Guide for details on how to submit pull requests, report issues, or suggest improvements.
This project is licensed under the GNU General Public License v3.0. See the LICENSE file for details.
Murat Ünalan murat.uenalan@gmail.com
Thanks to all contributors and users of btest who have helped improve and shape this project.