Skip to main content

A python utility for contract testing APIs

Project description

PyPony

PyPony Logo

PyPony is a 🪄magical🪄 Python CLI tool for contract testing OpenAPI specifications against the live APIs that they define.

Unit Tests

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pypony-1.0.0.tar.gz (12.4 kB view hashes)

Uploaded Source

Built Distribution

pypony-1.0.0-py3-none-any.whl (17.5 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page