Declarative API Scenario Testing in YAML - Easily define and run API tests using YAML.
Project description
Dasty: Declarative API Scenario Testing in YAML
Dasty is a Python package designed to simplify the process of testing APIs by allowing tests to be defined declaratively in YAML format. This approach enables easy-to-write, easy-to-read API test scenarios, making API testing more accessible and maintainable.
Features
- Declarative Syntax: Define API tests in a simple, human-readable YAML format.
- Flexible Test Scenarios: Support various HTTP methods and validations.
- Easy Variable Substitution: Define and use variables within your YAML test scenarios.
- Dynamic Variable Passing Between Steps: Extract and reuse values from responses in subsequent steps.
Installation
To install Dasty, simply use pip:
pip install dasty_api
Usage
Quickstart
This repository comes with a sample server and Scenarios that can be used for quick hands-on sandboxing.
To run these Scenarios, do the following:
- From the
examples
sub-directory
cd ./examples
- Install the dependencies required for the examples
pip install -r requirements.txt
- Run the simple server. This will create a simple server that listens on
localhost:2396
python3 simple_server.py
- Run the ScenarioRunner
python3 scenario_runner.py
- If successful, the output should look as follows:
Running scenario Add, Get, and Delete Users defined in examples/scenarios/add_get_delete_users.yaml...
Running step Reset the server's memory... Success ✅
Running step Get existing users... Success ✅
Running step Add a new user... Success ✅
Running step Get existing users, check that Dave was added... Success ✅
Running step Delete a user... Success ✅
Running step Get existing users, check that Charlie was deleted... Success ✅
Running step Try to delete a user that doesn't exist... Success ✅
Add, Get, and Delete Users Success ✅
Running scenario Sample Service: Health Checks defined in examples/scenarios/healthchecks.yaml...
Running step Health Check... Success ✅
Running step Readiness Check... Success ✅
Sample Service: Health Checks Success ✅
Using dasty in your project
Dasty allows you to define your API test scenarios in YAML files. Here's a basic example:
name: "Users Service: Health Checks"
description:
- "Health checks for the Users service"
variables:
BASE_URL: "http://127.0.0.1:8003/api/v1/"
steps:
- name: "Health Check"
method: "GET"
url: "${BASE_URL}/healthz"
expected_status_code: 200
- name: "Readiness Check"
method: "GET"
url: "${BASE_URL}/readyz"
expected_status_code: 200
More examples can be found in the examples
subdirectory.
The recommended structure is creating a folder named dasty_tests
, containing a sub-folder named scenarios
, containing the Scenario YAML files, along with a scenario_runner.py
file which looks like:
from dasty_api.ScenarioRunner import ScenarioRunner
if __name__ == "__main__":
runner = ScenarioRunner("./scenarios")
runner.run()
Then, the dasty-tests
folder should look like:
.
├── scenario_runner.py
└── scenarios
├── ...
└── sample_scenario.yaml
Once main.py
is executed, the output should look as follows:
╰─ python3 main.py
Running scenario Users Service: Health Checks defined in scenarios/healthcheck_users.yaml...
Running step Health Check... Success ✅
Running step Readiness Check... Success ✅
Users Service: Health Checks Success ✅
Features
Dynamic Variable Passing
Dasty supports dynamic variable passing between steps in a scenario. This allows you to extract values from the response of one step and use them in subsequent steps. For example:
steps:
- name: "Get user ID"
method: "GET"
url: "${BASE_URL}/users/name=John"
save_response_values:
- name: user_id
from: id
- name: "Use the User ID in another request"
method: "GET"
url: "${BASE_URL}/users/id=${user_id}"
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for dasty_api-0.3.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1dbd920f5c177d6e9f5ead0caf7cf5a7d6de32dc003c3f496f58f41dc3cc9bba |
|
MD5 | 1f26efaaad5cea6ef5628f898cccb7b1 |
|
BLAKE2b-256 | 7b87974d2bc98600beec72d5c117be314583d992c71f9dc22431494e59474e49 |