A python utility for contract testing APIs
Project description
PyPony
PyPony is a 🪄magical🪄 Python CLI tool for contract testing OpenAPI specifications against the live APIs that they define.
Supported OAS Features
- JSON or YAML
- enums
- $ref
- oneOf
Install Locally
make install-dependencies
make install-cli
Remove Local Installation
make remove-cli
Test
make test
Generate Coverage Report
make test-coverage
Run
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 ) |
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 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
---
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.
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.