# Lot
A simple, async-native load testing framework for Rust.
`lot` is a load testing framework built on top of `tokio` that allows you to define and run scenarios against your services. It's designed to be lightweight and easy to use, while still providing the flexibility to model complex user behaviors.
## Getting Started
To start using `lot`, add it to your `Cargo.toml`:
```toml
[dependencies]
lot = "0.3"
```
Then, you can create a test scenario and run it using the `Executor`.
## Example
Here's an example of a simple load test that makes HTTP requests to a local server:
```rust
use std::time::Duration;
use anyhow::Result;
use lot::executor::Executor;
use lot::scenario::Scenario;
use reqwest::Client;
use std::future::Future;
async fn call_localhost(client: Client) -> Result<()> {
let response = client.get("https://localhost:8080").send().await?;
let response = response.error_for_status()?;
response.bytes().await?;
Ok(())
}
// 2. Configure and run the executor
#[tokio::main]
async fn main() {
let mut executor = Executor::new();
// Ramp up from 0 to 100 rps over 10 seconds
executor.add_stage(0, 100, Duration::from_secs(10));
// Stay at 100 rps for 10 seconds
executor.add_stage(100, 100, Duration::from_secs(10));
// Ramp down from 100 to 0 rps over 10 seconds
executor.add_stage(100, 0, Duration::from_secs(10));
let client = Client::new();
executor.run(|| call_localhost(client.clone())).await;
}
```
This example demonstrates a multi-stage load test:
1. A ramp-up phase.
2. A sustained load phase.
3. A ramp-down phase.
## Contributing
Contributions are welcome! If you have a feature request, bug report, or pull request, please feel free to open an issue.
## License
This project is licensed under the terms of the [LICENSE](LICENSE) file.