# gRPC Testify (Rust)
<img align="right" width="150" height="150" src="https://github.com/user-attachments/assets/d331a8db-4f4c-4296-950c-86b91ea5540a">
[](https://coveralls.io/github/gripmock/grpctestify-rust?branch=master)
[](https://github.com/gripmock/grpctestify-rust/releases/latest)
[](https://gripmock.github.io/grpctestify-rust/)
[](https://opensource.org/licenses/MIT)
Native CLI for gRPC testing with `.gctf` files.
## Documentation
- [Docs](https://gripmock.github.io/grpctestify-rust/)
- [Repository](https://github.com/gripmock/grpctestify-rust)
## Key Features
- Unary, client streaming, server streaming, and bidirectional streaming tests
- Assertions with built-in operators and plugin functions (`@header`, `@trailer`, `@uuid`, `@email`, etc.)
- Parallel execution, timeouts, coverage, snapshot mode (`--write`)
- Output formats: `console`, `json`, `yaml`, `junit`, `allure`, `html`
- Load/benchmark testing (`bench`) with regression gating (`bench-compare`)
- Web UI playground (`play`) with proto reflection, saved requests, history, and environments
- Extra tools for developer workflows: `check`, `fmt`, `inspect`, `explain`, `reflect`, `lsp`, `call`, `gen`,
`grpcurl`, `list`, `index`, `query`, `health`, `scaffold`
## Requirements
- No external runtime dependencies for CLI execution
- Docker is optional (for integration examples)
## Installation
### Homebrew (macOS and Linux)
```bash
brew tap gripmock/tap
brew install gripmock/tap/grpctestify
```
### Cargo
```bash
cargo install grpctestify
```
### Prebuilt binaries (GitHub Releases)
- Download from [GitHub Releases](https://github.com/gripmock/grpctestify-rust/releases/latest)
- Available for macOS, Linux, and Windows (amd64/arm64)
Verify installation:
```bash
grpctestify --version
```
## Quick Start
1. Create `hello.gctf`:
```gctf
--- ADDRESS ---
localhost:4770
--- ENDPOINT ---
hello.HelloService/SayHello
--- REQUEST ---
{
"name": "World"
}
--- ASSERTS ---
.message == "Hello, World!"
```
1. Run test:
```bash
grpctestify hello.gctf
```
## Common Commands
```bash
# Run tests
grpctestify tests/
# Parallel run
grpctestify tests/ --parallel 4
# JSON report
grpctestify tests/ --log-format json --log-output results.json
# JUnit report
grpctestify tests/ --log-format junit --log-output junit.xml
# Validate syntax (recurses into directories — no shell glob needed)
grpctestify check tests/
# Format files
grpctestify fmt -w tests/
# Scaffold a .gctf test from server reflection
grpctestify scaffold --endpoint pkg.Service/Method --reflect --address localhost:4770
# Load test with regression gate
grpctestify bench tests/ --duration 30s --concurrency 10 --log-format json --log-output baseline.json
grpctestify bench tests/ --duration 30s --concurrency 10 --log-format json --log-output current.json
grpctestify bench-compare baseline.json current.json
# Launch the web UI playground
grpctestify play
```
## Contributing
Issues and PRs are welcome: [GitHub Issues](https://github.com/gripmock/grpctestify-rust/issues)
## License
[MIT](LICENSE)