[![Crates.io](https://img.shields.io/crates/v/neocurl.svg)](https://crates.io/crates/neocurl)
[![Docs.rs](https://docs.rs/neocurl/badge.svg)](https://docs.rs/neocurl)
[![License](https://img.shields.io/crates/l/neocurl.svg)](LICENSE)

> [!tip]
> [Hosted on Forgejo](https://git.lovie.dev/levi/neocurl) and [mirrored on GitLab](https://gitlab.com/levilovie/neocurl) for people without local accounts. Issues and MRs are welcome everywhere. Visit [https://lovie.dev/code](https://lovie.dev/code) for more info.

# NeoCurl

A command line tool to test servers.

Read [the book](https://git.lovie.dev/levi/neocurl/src/branch/master/book/src/SUMMARY.md) for **quick start** and **guide**.

## Features

- [x] Sending requests
- [x] Asserts
- [x] Logs
- [x] Third-party libs
- [x] Async requests

## Example

```python
import neocurl as nc

@nc.define
def get(client):
    response = client.get("https://httpbin.org/get")
    nc.info(f"Response status: {response.status}, finished in {response.duration:.2f}ms")
    assert response.status_code == 200, f"Expected status code 200, but got {response.status_code} ({response.status})"
    response.print()
```
