# ApiRquest_core
ApiRquest is a tool for testing Api Rest. Written in Rust, it allows you to use the Rhai scripting language to increase test flexibility. It uses Gherkin syntax for test scenarios.
## Features
### Example
```` gherkin
Feature: api.restful-api.dev
Background:
# Use for command line
# https://restful-api.dev/
* def url = https://api.restful-api.dev
* def load read_rhai("scripts_rhai/scripts.rhai")
@scenario_get
Scenario: get
# Recovery of all items
Given path /objects
And header content-type: application/json
And request
"""
"""
When method get
Then status 200
And print "Response.response: ${response}"
@scenario_unknown_url
Scenario: Unknown url
Given path /objectsx
And header content-type: application/json
And request
"""
"""
When method get
Then status 404
And print "Response.response: ${response}"
And match ${response} == {"timestamp":"#string","status": 404,"error":"Not Found","path":"/objectsx"}
````
## Scripting with Rhai
ApiRquest use [Rhai](https://github.com/rhaiscript/rhai) for scripting scenario.
### Predefined variables
Variables can be used in Rhai scripts
| status | code status http | 200
| headers | list of http request headers (map) | #{"content-length": "105", "content-type": "application/json", "date": "Fri, 24 Jan 2025 20:58:48 GMT", "server": "Rocket"}
| response | The http response (string) | {"date_event":"2025-01-24 20:55:00","temperature":20.05316,"humidite":60.10489,"sensor_name":"legardien"}
| request_duration_millis | Query duration in milliseconds (u128) | 80
.Define the rhai script to load
```` gherkin
* def url = https://api.restful-api.dev
* def load read_rhai("scripts_rhai/scripts.rhai")
````
.Call a function with a parameter
```` gherkin
# index retrieval (id)
# Call a function with a parameter
And call id = get_json_field ${response} "id"
````
The `id` variable can be reused later in the delete operation.
.Path with a parameter
```` gherkin
And print "Delete ${id}"
Given path /objects/${id}
````
Include ApiRquest in yours tests
````rust
use log::{debug, error};
use apirquest_core::Runner;
fn main() {
log4rs::init_file("config/log4rs.yaml", Default::default()).unwrap();
debug!("runner: apiRquest");
debug!("Load script file: ../../features/api_restful_api.feature");
let mut runner = Runner::new("./features/api_restful_api.feature".to_string());
runner.tags(vec!["@scenario_get"]);
let r = runner.run();
r.unwrap_or_else(|e| error!("Error: {}", e))
}
````
## Using ApiRquest in a Cargo project
You can use apiRquest in your project to test your apirest.