#scenario #rhai #scripting-language #response #syntax #increase #rest

apirquest_core

ApiRquest is a library 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.

1 unstable release

new 0.6.2 Mar 9, 2025

#526 in Web programming


Used in apirquest_bin

Apache-2.0

115KB
2K SLoC

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

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 for scripting scenario.

Predefined variables

Variables can be used in Rhai scripts

Variable Description Example
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

    * def url = https://api.restful-api.dev
    * def load read_rhai("scripts_rhai/scripts.rhai")

.Call a function with a parameter

# 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

   And print "Delete ${id}"
   Given path /objects/${id}

Include ApiRquest in yours tests

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.

Dependencies

~12–24MB
~368K SLoC