Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/aviaviavi/curl-runnings
A declarative test framework for quickly and easily writing integration tests against JSON APIs.
https://github.com/aviaviavi/curl-runnings
testing testing-framework
Last synced: about 1 month ago
JSON representation
A declarative test framework for quickly and easily writing integration tests against JSON APIs.
- Host: GitHub
- URL: https://github.com/aviaviavi/curl-runnings
- Owner: aviaviavi
- License: mit
- Created: 2018-02-28T18:04:50.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2023-06-25T21:43:04.000Z (over 1 year ago)
- Last Synced: 2024-11-28T14:11:55.526Z (about 1 month ago)
- Topics: testing, testing-framework
- Language: Haskell
- Homepage:
- Size: 213 KB
- Stars: 158
- Watchers: 8
- Forks: 13
- Open Issues: 15
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# curl-runnings
[![Hackage](https://img.shields.io/hackage/v/curl-runnings.svg)](https://hackage.haskell.org/package/curl-runnings)
_Feel the rhythm! Feel the rhyme! Get on up, it's testing time! curl-runnings!_
A common form of black-box API testing boils down to simply making requests to
an endpoint and verifying properties of the response. curl-runnings aims to make
writing tests like this fast and easy.curl-runnings is a framework for writing declarative tests for your APIs in a
fashion equivalent to performing `curl`s and verifying the responses. Write your
tests quickly and correctly with a straight-forward specification in
[Dhall](https://dhall-lang.org/), yaml, or json that can encode simple but
powerful matchers against responses.Alternatively, you can use the curl-runnings library to write your tests in
Haskell (though a Haskell setup is absolutely not required to use this tool).### Installing
Binaries are available on the Releases section of the GitHub page.
You can also compile from source with stack.
### Writing a test specification
Curl runnings tests are just data! A test spec is an object containing an array
of `cases`, where each item represents a single curl and set of assertions about
the response. Write your tests specs in a Dhall, yaml or json file. Note: the legacy
format of a top level array of test cases is still supported, but may not be in
future releases.```dhall
let JSON = https://prelude.dhall-lang.org/JSON/package.dhalllet CurlRunnings = ./dhall/curl-runnings.dhall
in CurlRunnings.hydrateCase
CurlRunnings.Case::{
, expectData = Some
( CurlRunnings.ExpectData.Exactly
( JSON.object
[ { mapKey = "okay", mapValue = JSON.bool True },
{ mapKey = "message", mapValue = JSON.string "a message" }]
)
)
, expectStatus = 200
, name = "test 1"
, requestMethod = CurlRunnings.HttpMethod.GET
, url = "http://your-endpoing.com/status"
}
``````yaml
---
# example-test.yaml
#
# specify all your test cases as an array keys on `cases`
cases:
- name: A curl runnings test case
url: http://your-endpoint.com/status
requestMethod: GET
# Specify the json payload we expect here
expectData:
# The 1 key in this object specifies the matcher we want
# to use to test the returned payload. In this case, we
# require the payload is exactly what we specify.
exactly:
okay: true
msg: 'a message'
# Assertions about the returned status code. Pass in
# an acceptable code or list of codes
expectStatus: 200```
See /examples for more example curl runnings specifications, which walk
through some of the other features that can be encoded in your tests such as:
- reference data from previous responses of previous test cases
- reference environment variables
- various easy-to-use json matchers
- support for importing data from other yaml files in your spec### Running
Once you've written a spec, simply run it with:
```curl-runnings -f path/to/your/spec.yaml ```
(hint: try using the --verbose flag for more output)
If all your tests pass, curl-runnings will cleanly exit with a 0 code. A code of
1 will be returned if any tests failed.You can also select specific test cases by filtering via regex by using the
`--grep` flag. Just make sure your case isn't referencing data from previous
examples that won't get run!For more info:
```curl-runnings --help ```
### Running With Docker
A dockerfile is included in the root of the project. The Dockerfile will expect the linux based curl-runnings executable in the same directory as the Dockerfile and a `tests.yml` file. You can download the latest executable from the release page : https://github.com/aviaviavi/curl-runnings/releases .``` docker build . -t curl-runnings-tests```
``` docker run curl-runnings-tests```
If you use docker-compose, you can add this to docker-compose.yml:
```
tests:
build:
context: .
dockerfile: ./Dockerfile
```### Contributing
Contributions in any form are welcome and encouraged. Don't be shy! :D