efrisby alternatives and similar packages
Based on the "Testing" category.
Alternatively, view efrisby alternatives based on common mentions on social networks and blogs.
-
proper
PropEr: a QuickCheck-inspired property-based testing tool for Erlang -
bypass
Bypass provides a quick way to create a custom plug that can be put in place instead of an actual HTTP server to return prebaked responses to client requests. -
StreamData
Data generation and property-based testing for Elixir. ๐ฎ -
amrita
A polite, well mannered and thoroughly upstanding testing framework for Elixir -
power_assert
Power Assert in Elixir. Shows evaluation results each expression. -
shouldi
Elixir testing libraries with nested contexts, superior readability, and ease of use -
katt
KATT (Klarna API Testing Tool) is an HTTP-based API testing tool for Erlang. -
FakeServer
FakeServer integrates with ExUnit to make external APIs testing simpler -
Stubr
Stubr is a set of functions helping people to create stubs and spies in Elixir. -
mix_test_interactive
Interactive watch mode for Elixir's mix test. https://hexdocs.pm/mix_test_interactive/ -
mecks_unit
A simple Elixir package to elegantly mock module functions within (asynchronous) ExUnit tests using Erlang's :meck library -
test_selector
Elixir library to help selecting the right elements in your tests. -
factory_girl_elixir
Minimal implementation of Ruby's factory_girl in Elixir. -
toxiproxy_ex
ToxiproxyEx is an Elixir API client for the resilience testing tool Toxiproxy. -
ex_parameterized
This library support parameterized test with test_with_params macro. -
cobertura_cover
Output test coverage information in Cobertura-compatible format -
ex_unit_fixtures
A library for defining modular dependencies (fixtures) for ExUnit tests.
Collect and Analyze Billions of Data Points in Real Time
Do you think we are missing an alternative of efrisby or a related project?
README
efrisby
A REST API testing framework for erlang inspired by frisby-js
Installation
By adding the following dependency to your rebar.config
file :
%% Rebar3 test profiles
{profiles, [
{test, [
{deps, [
{efrisby, "0.2.0"}
]}
]}
]}.
Basic Usage.
You have to start all efrisby
dependencies before using any of the functions
To start in the console run:
$ rebar3 shell
And run the following command to start all of the application it depends on:
> application:ensure_all_started(efrisby).
%% > ok,[idna,mimerl,certifi,hackney,efrisby]}
> efrisby:get("http://localhost/api/1.0/users/3.json", [
{status, 200},
{content_type, "application/json"},
{json_types, [
{<<"id">>, integer},
{<<"is_admin">>, boolean},
{<<"username">>, bitstring}
]},
{json, [
{<<"id">>, 3},
{<<"is_admin">>, false},
{<<"username">>, <<"johndoe">>}
]}
]).
%% > {ok, Response}
Write Tests
efrisby tests start with one by calling one of get
, post
, put
, options
, delete
, or head
to generate an HTTP request and assert the response.
efrisby has many built-in test assertions like :
status
to easily test HTTP status codescontent_type
to test content type headerheaders
to test expected HTTP headersjson
to test expected JSON keys/valuesjson_types
to test JSON value types
eq :
{ok, Response} = efrisby:get("https://api.github.com/users/FabioBatSilva", [
{status, 200},
{content_type, "application/json; charset=utf-8"},
{json_types, [
{<<"id">>, integer},
{<<"url">>, bitstring},
{<<"login">>, bitstring}
]},
{json, [
{<<"id">>, 588172},
{<<"login">>, <<"FabioBatSilva">>},
{<<"url">>, <<"https://api.github.com/users/FabioBatSilva">>}
]}
]).
> efrisby_resp:json(Response).
[
{<<"id">>, 588172},
{<<"login">>, <<"FabioBatSilva">>},
{<<"url">>, <<"https://api.github.com/users/FabioBatSilva">>}
]
Expectations
Expectation are used to generate assertions on the response. These helpers make testing API response bodies and headers easy with minimal time and effort.
{status, integer()}
Assert that HTTP Status code equals expectation.
efrisby:get("https://api.github.com/users/FabioBatSilva", [
{status, 200}
]).
%% > {ok, Response}
{headers, list()}
Assert the HTTP response headers.
efrisby:get("https://api.github.com/users/FabioBatSilva", [
{headers, [
{<<"content-type">>, <<"application/json; charset=utf-8">>}
]}
]).
%% > {ok, Response}
{json, bitstring() | none(), list() | integer() | atom() | bitstring()}
Tests that response JSON body contains the provided keys/values in the response.
efrisby:get("https://api.github.com/users/FabioBatSilva", [
{json, [
{<<"id">>, 588172},
{<<"login">>, <<"FabioBatSilva">>}
]}
]).
%% > {ok, Response}
efrisby:get("https://api.github.com/users/FabioBatSilva", [
{json, ".id", 588172},
{json, ".login", <<"FabioBatSilva">>}
]).
%% > {ok, Response}
{json_types, bitstring() | none(), list()}
Tests that response JSON body contains the provided keys/values types.
efrisby:get("https://api.github.com/users/FabioBatSilva", [
{json_types, [
{<<"id">>, integer},
{<<"login">>, bitstring}
]}
]).
%% > {ok, Response}
Using Paths with json
and json_types
Both json
and json_types
accept a tuple containing a path.
The path value can be a nested path separated by periods, like args.foo.mypath
, a simple path like .results
or .
to test the whole JSON value.
efrisby:get("http://httpbin.org/get?foo=bar&bar=baz", [
{json_types, ".args", [
{<<"bar">>, bitstring},
{<<"foo">>, bitstring}
]},
{json, ".args", [
{<<"foo">>, <<"bar">>},
{<<"bar">>, <<"baz">>}
]}
]).
%% > {ok, Response}
Request Methods
efrisby support your basic HTTP verbs..
efrisby:get(url(), expectations(), options())
efrisby:head(url(), expectations(), options())
efrisby:options(url(), expectations(), options())
efrisby:put(url(), body(), expectations(), options())
efrisby:post(url(), body(), expectations(), options())
efrisby:patch(url(), body(), expectations(), options())
efrisby:delete(url(), body(), expectations(), options())
Every request method accepts an optional list of parameters as its last argument, Request options control various aspects of a request including, headers, timeout settings and more.
eq :
-define(OPTIONS, [
{failure_callback, fun erlang:display/1},
{http_options, [{timeout, 150000}]},
{base_url, "https://myapi.local"},
{headers, [
{"Accept", "application/json"}
]}
]).
http_options
Options for hackney http client (see https://github.com/benoitc/hackney)failure_callback
Assertion failure callback functionbase_url
Base request urlheaders
Http headers
efrisby:get(url(), expectations(), options())
GET request.
efrisby:get("/users/FabioBatSilva", [
{status, 200}
], ?OPTIONS).
%% > {ok, Response}
efrisby:post(url(), body(), expectations(), options())
POST request.
Body = [
{<<"login">>, <<"FabioBatSilva">>},
{<<"name">>, <<"Fabio B. Silva">>}
],
Expectations = [
{status, 200},
{content_type, "application/json"},
{json_type, [
{id, integer}
]}
],
efrisby:post("/users", Body, Expectations, ?OPTIONS).
%% > {ok, Response}