Categorygithub.com/warrant-dev/apirunner
modulepackage
1.8.2
Repository: https://github.com/warrant-dev/apirunner.git
Documentation: pkg.go.dev

# README

API Runner

Go Report Card

A lightweight test runner for testing http APIs. Define test cases as json and execute them against any server (local or over the network).

Written in Go. Built by the Warrant team.

Usage

Install

go get github.com/warrant-dev/apirunner

Define API tests as json

Sample test file:

{
    "ignoredFields": [
        "internalId"
    ],
    "tests": [
        {
            "name": "createUser",
            "request": {
                "method": "POST",
                "url": "/users",
                "body": {
                    "email": "[email protected]"
                }
            },
            "expectedResponse": {
                "statusCode": 200,
                "body": {
                    "userId": "{{ createUser.userId }}",
                    "email": "[email protected]"
                }
            }
        },
        {
            "name": "getUserById",
            "request": {
                "method": "GET",
                "url": "/users/{{ createUser.userId }}"
            },
            "expectedResponse": {
                "statusCode": 200,
                "body": {
                    "userId": "{{ createUser.userId }}",
                    "email": "[email protected]"
                }
            }
        },
        {
            "name": "deleteUser",
            "request": {
                "method": "DELETE",
                "url": "/users/{{ createUser.userId }}"
            },
            "expectedResponse": {
                "statusCode": 200
            }
        }
    ]
}

Execute tests

import (
	"github.com/warrant-dev/apirunner"
)

// Execute all tests in 'mytestfile.json' and print results
func main() {
    runner, err := apirunner.NewRunner(apirunner.Config{
        TestFileName:  "mytestfile.json",
        BaseUrl:       "http://localhost:8000",
        CustomHeaders: nil,
    })
    if err != nil {
        panic(err)
    }
    runner.Execute()
}

Features

  • Supports all HTTP operations (GET, POST, PUT, DELETE etc.)
  • Deep comparison of json responses (objects and arrays)
  • Inject custom headers via config (useful for passing auth tokens)
  • ignoredFields to ignore specific attributes during comparison (ex. non-deterministic ids, timestamps)
  • Memoization of response attributes to support request chaining. For example, this test references an id of a resource created by a previous request:
{
    "name": "updateResourceTest",
    "request": {
        "method": "PUT",
        "url": "/resources/{{ createResourceTest.Id }}",
        "body": {
            "email": "[email protected]"
        }
    },
    "expectedResponse": {
        "statusCode": 200,
        "body": {
            "id": "{{ createResourceTest.Id }}",
            "email": "[email protected]"
        }
    }
}

Development

PRs welcome! Clone and develop locally:

git clone [email protected]:warrant-dev/apirunner.git
cd apirunner
go test

About Warrant

Warrant provides APIs and infrastructure for implementing authorization and access control.

# Packages

No description provided by the author

# Functions

ExecuteSuite executes a test suite and prints + returns the results.
No description provided by the author
No description provided by the author
Run executes all test files in 'testDir'.
No description provided by the author

# Constants

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# Structs

Expected test case response.
Request information for a single test case.
No description provided by the author
Result for an executed test case.
Spec defining a single test case.
A collection of tests defined within one test file.
Results for an executed TestSuite.
Spec defining the tests in a suite.

# Interfaces

Mock-able HttpClient interface.