api-check is a cli tool that allows you to simply and quickly test restful APIs. Written in Go, api-check can be used to test APIs written in any language.
api-check works by making HTTP requests to your server and then asserting that the correct response is received as defined in a test definition files within your project.
To install api-check from source do the following:
go get github.com/JonathonGore/api-check
cd ${GOPATH}/src/github.com/JonathonGore/api-check && go install
api-check has no external dependencies!
Note: You need to ensure ${GOPATH}/bin is in your PATH
Coming soon api-check available in Homebrew.
api-check can be used as a standalone binary, or can be integrated directly with go test.
api-check looks for test definitions stored in json files with the .ac.json extension stored in any subdirectory of your project.
You can run all test definitions in your project by running $ api-check run in the root of your project directory.
For more info on available commands you can run:
$ api-check help
In the root of your project create a file main_test.go with the following contents.
package main
import (
"testing"
"github.com/JonathonGore/api-check/suite"
)
func TestMain(t *testing.T) {
suite.Run(t)
}
The above will invoke api-check run and run all test definitions at or below the current directory.
Using api-check you can assert that your server produces exactly the correct JSON, by using the json key in the response body.
users.ac.json:
[{
"hostname": "http://localhost:3000",
"endpoint": "/users/Jack",
"method": "get",
"response": {
"code": 200,
"headers": {
"Content-Type": "application/json"
},
"json": {
"username": "Jack",
"email": "jack@gmail.com",
"first_name": "Jack",
"last_name": "Gore"
}
}
}]
Additionally, instead of asserting an exact JSON match, api-check also allows you to assert the structure of a JSON response using the ofType key:
[{
"hostname": "http://localhost:3000",
"endpoint": "/users/Jack",
"method": "get",
"response": {
"code": 200,
"headers": {
"Content-Type": "application/json"
},
"ofType": {
"username": "string",
"email": "string",
"user_id": "number"
"first_name": "string",
"last_name": "string",
"aliases": [
"string"
]
}
}
}]
The above is a test files each contain a single test definition.
These test definitions will make a GET request to http://localhost:3000/users/Jack. It will assert that it receives the response are specified in the response key.
api-check can be configured by placing a file named .ac.json in the directory where you will run your api-check commands.
The .ac.json file is a plain JSON (see examples/ for an exmaple of this file) file that supports the following keys:
setup-script- The name of a bash script to be ran before executing any of the test suites.
cleanup-script- The name of a bash script to be ran after the execution of all tests.
hostname- The default hostname to be used in your test definitions, allows you to not have to specify hostname in each test definition.