https://github.com/bandwidth/pypony
A magical python CLI tool to contract test an API against its OAS
https://github.com/bandwidth/pypony
api contract-testing python
Last synced: 10 months ago
JSON representation
A magical python CLI tool to contract test an API against its OAS
- Host: GitHub
- URL: https://github.com/bandwidth/pypony
- Owner: Bandwidth
- License: mit
- Created: 2022-02-24T16:30:35.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2024-04-12T04:24:27.000Z (almost 2 years ago)
- Last Synced: 2024-04-14T06:09:00.877Z (almost 2 years ago)
- Topics: api, contract-testing, python
- Language: Python
- Homepage: https://pypi.org/project/pypony/
- Size: 4.74 MB
- Stars: 4
- Watchers: 30
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# PyPony

PyPony is a 🪄magical🪄 Python CLI tool for contract testing OpenAPI specifications against the live APIs that they define.
[](https://github.com/Bandwidth/pypony/actions/workflows/ci.yml)
```sh
pip install pypony
```
## Supported OAS Features
* JSON or YAML
* enums
* $ref
* oneOf
## Install Locally
```shell
make install-dependencies
make install-cli
```
## Remove Local Installation
```shell
make remove-cli
```
## Test
```shell
make test
```
### Generate Coverage Report
```shell
make test-coverage
```
## Run
```shell
pypony -st ./my_steps.yml -sp ./my_spec.yml -v
```
### Arguments
| Argument | Description |
|:--------------------:|:---------------------------------------------------------------------|
| '-st', '--step' | Relative path to step file |
| '-sp', '--spec' | Relative path to spec file |
| '-v', '--verbose' | Boolean verbose output (default=`False`) |
| '-ff', '--fail-fast' | Option to fail fast if an exception is encountered (default=`False`) | # Coming soon!
## Step File
The `step` file is what is used to make API calls - its where you provide information like base url, auth, path, request body, etc. PyPony uses the information in the step file to check against the OpenAPI spec, ensuring it matches the definiution, and then sends it using the [requests](https://pypi.org/project/requests/) library.
Step files export expressions and environment variables, allowing it to be run in a CI/CD pipeline and making data from previous steps accessible.
### Required Step File Fields
* BaseURL
* Steps
* name
* operation_id
* method
* path
* status_code
### Example Step File
```yml
---
base_url: https://voice.bandwidth.com/api/v2
auth:
username: ${{ env.BW_USERNAME }}
password: ${{ env.BW_PASSWORD }}
steps:
- name: createCall
operation_id: createCall
method: POST
path: /accounts/${{ env.BW_ACCOUNT_ID }}/calls
headers:
Content-Type: application/json
body:
to: ${{ env.USER_NUMBER }}
from: ${{ env.BW_NUMBER }}
applicationId: ${{ env.BW_VOICE_APPLICATION_ID }}
answerUrl: ${{ env.BW_ANSWER_URL }}
status_code: 201
- name: Get Call Info
operation_id: getCallState
method: GET
path: /accounts/${{ env.BW_ACCOUNT_ID }}/calls/${{ steps.createCall.response.data.callId }}
auth: # overrides global auth definition
username: ${{ env.VOXBONE_USERNAME }}
password: ${{ env.VOXBONE_PASSWORD }}
status_code: 200
- name: listConferences
operation_id: listConferences
method: GET
path: /accounts/${{ env.BW_ACCOUNT_ID }}/conferences
status_code: 200
```
The full step file schema can be found [here](https://github.com/Bandwidth/pypony/blob/main/src/steps_schema.yml).