Usage

Simple usage with ejpiaj-cli.

A ejpiaj-cli tool has one command test:

$ ejpiaj-cli test --help

Usage: ejpiaj-cli test <yaml_file> [<debug>] [<module>] [<display_variables>]

Run tests using yaml file

Required Arguments:

  yaml_file

Options:

   -d --debug   run with debug mode
   -s --display_variables  display extracted variables
   -m --module  your module with custom extractors and assertions
   -e --env     initial variables in format var1=val1&var2=val2

A yaml_file is file with tests. Debug mode (-d) displays logs and returns content from requests.

A --module option allows you to specify own module with custom assertions and variables extractors. F.i.:

$ ejpiaj-cli test ./myapi.yml --module my_module -s

A -e allows you to pass initial variables f.i.:

$ ejpiaj-cli test ./myapi.yml --module my_module -s -e api_url=localhost

And use this variable in yml file:

requests:
  001_get_token:
    method: post
    url: http://{{api_url}}/api/v10/api-token-auth/
I will explain idea using example example_full.yml file:

All requests are written under key requests. Every request has unique name. It’s name is used to sort request while runing, so numeric prefix is very convinient.

Every request is build from elements:

  • method - request method like ‘get’, ‘post’, ‘put’, ‘options’ (under the hood is requests library)
  • url - full url to call
  • url_params - params added to url after ‘?’ sign
  • form_params - params used with POST method and PUT
  • body - POST or PUT body, if used then ‘form_params’ will be skipped
  • variables - variables to extract using registered variables extractors
  • assertions - assertions to run using also variables extractors and registered assertions

Simple example

First example:

requests:
  001_search_repos_with_django_in_name:
    method: get
    url: https://api.github.com/search/repositories
    url_params:
      q: django
      sort: stars
      order: desc

Run it with:

ejpiaj-cli test -s examples/example_001.yml

The result should be:

--------------------------------------------------------------------------------
P - passed assertions, F - failed assertions, V - extracted variables
--------------------------------------------------------------------------------
✓ 001_search_repos_with_django_in_name [P0,F0,V0] {}
--------------------------------------------------------------------------------

P0 means 0 passed assertions, F0 means 0 failed assertions, V0 means 0 extracted variables

Assertions

Now we are going to add first assertions:

requests:
  001_search_repos_with_django_in_name:
    method: get
    url: https://api.github.com/search/repositories
    url_params:
      q: django
      sort: stars
      order: desc
    assertions:
      response:
        - 'status_code equals 200'
      json:
        - 'items.[0].full_name contains ango'

Run it with:

ejpiaj-cli test -s examples/example_002.yml

The result should be:

--------------------------------------------------------------------------------
P - passed assertions, F - failed assertions, V - extracted variables
--------------------------------------------------------------------------------
✓ 001_search_repos_with_django_in_name [P2,F0,V0] {}
--------------------------------------------------------------------------------

Under key assertions we put any variables extractor registered name (json, request). Under this key we put list of assertions in format:

variable assertions parameter

variables is variable extractor parameter, assertion is assertion keyword and parameter is optional parameter for assertion (depends on assertion type)

In this example we used response extractor:

response:
 - 'status_code equals 200'

So we told response extractor to get status_code attribute from response object and test if it equals to 200

We used also json extractor:

json:
  - 'items.[0].full_name contains ango'

So we told json extractor to get items.[0].full_name from response:

{
  "total_count": 29532,
  "items": [
    {
      "id": 4164482,
      "name": "Django",
      "full_name": "django/django",
      "owner": {
        ...
      },
    }
}

and check if the full_name contains word ango

Variables extracting

We can use variables extractors to extract and store variables for further usage in next requests.

Extracting and using variables:

requests:
  001_search_repos_with_django_in_name:
    method: get
    url: https://api.github.com/search/repositories
    url_params:
      q: django
      sort: stars
      order: desc
    variables:
      json:
        total_count: count
        items.[0].full_name: repo_name
    assertions:
      response:
        - 'status_code equals 200'
      json:
        - 'items.[0].full_name contains ango'

  002_get_commits_from_first_repo:
    method: get
    url: https://api.github.com/repos/{{repo_name}}/commits
    assertions:
      response:
        - 'status_code equals 200'

Run it with:

ejpiaj-cli test -s examples/example_003.yml

The result should be:

--------------------------------------------------------------------------------
P - passed assertions, F - failed assertions, V - extracted variables
--------------------------------------------------------------------------------
✓ 001_search_repos_with_django_in_name [P2,F0,V2] {'count': 29532, 'repo_name': u'django/django'}
✓ 002_get_commits_from_first_repo [P1,F0,V0] {}
--------------------------------------------------------------------------------

We simply added variables key and used same variable extractor as in assertions:

variables:
  json:
    total_count: count
    items.[0].full_name: repo_name

And now we have variables:

count = 29532
repo_name = django/django

And we can use those variables in next request:

002_get_commits_from_first_repo:
  method: get
  url: https://api.github.com/repos/{{repo_name}}/commits

Variables are put between ‘{{‘ and ‘}}’ and can’t contains spaces’. For example:

{{repo_name}} - it's good
{{ repo_nama}} - it's wrong

Full example

Now you can could understand full example at file: