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 details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

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

Uploaded Python 3

File details

Details for the file pypony-1.0.0.tar.gz.

File metadata

  • Download URL: pypony-1.0.0.tar.gz
  • Upload date:
  • Size: 12.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.12

File hashes

Hashes for pypony-1.0.0.tar.gz
Algorithm Hash digest
SHA256 67fdb8a39668bf3854542cf66df24343c08d096229327c133073b393d31d86db
MD5 2e214d95bb389b3af7b2fa4e426577ec
BLAKE2b-256 fcd97fb68b3c3df171ab78816984d11aa05f04806a66e095dd8f15d89a66447b

See more details on using hashes here.

File details

Details for the file pypony-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: pypony-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 17.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.12

File hashes

Hashes for pypony-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a30ce267049bc2c54710b1cf391d92b2cb85d34fe0b51a4015a27fa9d8cb7a16
MD5 7ed56f09684ff3efcc9d40bb9047c461
BLAKE2b-256 005ae9f23509040728b98ff51a050c801b4720e2e5299c706e9683cfb1d29b48

See more details on using hashes here.

Supported by

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