10 releases (1 stable)
1.0.0 | Jan 29, 2023 |
---|---|
0.3.0 | Oct 30, 2022 |
0.2.1 | Oct 22, 2022 |
0.1.15 | Oct 22, 2022 |
0.0.0 |
|
#224 in Testing
27 downloads per month
38KB
948 lines
LUCIFER 🐲
Free, Open source, Cross-platform, Illuminating CLI testing written in Rust.
What is lucifer?
Lucifer is a CLI testing tool designed for running suites of tests. It is designed around the idea that your integration tests need to scale alongside your code base.
Cucumber is a great example of a framework that separates the code that interprets and executes a test from the test itself. This idea is the foundation of lucifer. By isolating the code which exercises your CLI from the requirements you need to specify, the complexity of your test codebase can scale linearly with the tests that you run.
All lucifer tests are specified in plain YAML to maximise the readability and ease of writing. Developers, QA, Analysts, and anyone else who knows what a CLI is can read these tests easily.
This comes at the tradeoff of customizability. Lucifer is responsible for executing the data, which makes it harder to customize the tool should you have a need to. If you find that you need to do something lucifer doesn't offer, there are a few options.
1. Create an issue (Or better yet, a pull request!)
Lucifer may be missing features. Use the issue tab in GitHub to create new feature requests and connect with me about what you're looking for.
2. Consider whether it should be an integration test.
Lucifer supports many different types of tests. If there's something specific that happens which lucifer doesn't cover, consider whether that should be a unit test.
More information on the testing pyramid
3. Write your own tool
If worst comes to worst, you can write a simple bash script to wrap your tool and validate what needs to be validated. Just remember that performance metrics will envolve any custom verification steps.
Why is it called Lucifer?
I was talking with a friend of mine who studies these things and he told me that the original translations of "the Satan" actually translate better as "the challenger." This alters the understanding of what happened with Job (in the book of Job in the old testament) - it's not that God and "Satan" were talking, it's that God was discussing something and someone spoke up, making them "the Satan" in that scenario.
Of course, I'm misrepresenting all of this by calling this project lucifer and not satan. Lucifer is the reference to the fallen angel as far as I am aware. But darn it, lucifer sounded better.
This project aims to challenge your assumptions of what your code looks like. And in doing so, become "the Satan" for you so that you don't have to.
Getting Started
Install
Prerequisites:
lucifer is built and distributed using Rust. You'll need a copy of Rust's package manager, cargo, installed on your local system.
To install lucifer, run the following command in your terminal of choice:
cargo install lucifer-testing
Running a test
Once you have lucifer installed, it's time to start testing! Let's create a simple test.
- Create a yaml file called "feature.yaml" or any meaningful name.
- Paste this yaml into the file
command: echo
tests:
- name: echo replies
description: |
Given any string
When echo is called
Then that string should be returned
args:
- hello
expectations:
- output: hello
Run this file with the command:
lucifer -i ./feature.yaml
For more examples, visit the test syntax reference.
Alternatives
Lucifer may not be the right choice for you. That's ok. I hope you will consider supporting one of these other open source projects:
Finally
If you try out lucifer, please give it a start on GitHub. I love knowing that someone thought this effort was valuable.
Dependencies
~330KB