Skip to main content

pytest-play plugin driving the famous Python requests library for making HTTP calls

Project description

play requests

https://img.shields.io/pypi/v/play_requests.svg https://travis-ci.org/davidemoro/play_requests.svg?branch=develop Documentation Status https://codecov.io/gh/davidemoro/play_requests/branch/develop/graph/badge.svg

pytest-play plugin driving the famous Python requests library for making HTTP calls.

More info and examples on:

Features

This pytest-play command provider let you drive a Python requests HTTP library using a YAML configuration file containing a set of pytest-play commands.

you can see a pytest-play script powered by a command provided by the play_requests plugin:

- provider: play_requests
  type: GET
  assertion: "'pytest-play' in response.json()"
  url: https://www.google.it/complete/search
  parameters:
    headers:
      Host: www.google.it
      User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:57.0) Gecko/20100101
        Firefox/57.0
      Accept: "*/*"
      Accept-Language: en-US,en;q=0.5
      Referer: https://www.google.it/
      Connection: keep-alive
    params:
    - - client
      - psy-ab
    - - hl
      - it
    - - gs_rn
      - '64'
    - - gs_ri
      - psy-ab
    - - gs_mss
      - pytest-
    - - cp
      - '11'
    - - gs_id
      - '172'
    - - q
      - pytest-play
    - - xhr
      - t
    timeout: 2.5

The above example:

  • performs a GET call to https://www.google.it/complete/search?client=psy-ab&hl=it&… with the provided headers, a timeout (if it takes more than 2.5 seconds a timeout exception will be raised) and an assertion expression that verifies that the response meets the expected value

play_requests supports all the HTTP verbs supported by the requests library:

  • OPTIONS

  • HEAD

  • GET

  • POST

  • PUT

  • PATCH

  • DELETE

You’ll find other play_requests command examples in the following sections.

Authentication cookies

Manages cookies and prepare them for you so you don’t have to create cookie headers by yourself using the auth=('username', 'password'):

- provider: play_requests
  type: GET
  url: http://something/authenticated
  parameters:
    auth:
      - username
      - password

Upload files

Post a csv file:

- provider: play_requests
  type: POST
  url: http://something/1
  parameters:
    files:
      filecsv:
      - report.csv
      - some,data

Post a csv file with custom headers:

- provider: play_requests
  type: POST
  url: http://something/1
  parameters:
    files:
      filecsv:
      - report.csv
      - some,data
      - application/csv
      - Expires: '0'

Post a file providing the path:

- provider: play_requests
  type: POST
  url: http://something/1
  parameters:
    files:
      filecsv:
      - file.csv
      - path:$base_path/file.csv

assuming that you have a $base_path variable.

Save the response to a variable

You can save a response elaboration to a pytest-play variable and reuse in the following commands:

- provider: play_requests
  type: POST
  url: http://something/1
  variable: myvar
  variable_expression: response.json()
  assertion: variables['myvar']['status'] == 'ok'
  parameters:
    json:
      foo: bar
    timeout: 2.5

It the endpoint returns a non JSON response, use response.text instead.

Default payload

If all your requests have a common payload it might be annoying but thanks to play_requests you can avoid repetitions.

You can set variables in many ways programatically using the pytest-play execute command or execute commands. You can also update variables using the play_python exec command:

- provider: python
  type: store_variable
  name: bearer
  expression: "'BEARER'"
- provider: python
  type: store_variable
  name: play_requests
  expression: "{'parameters': {'headers': {'Authorization': '$bearer'}}}"
- provider: play_requests
  type: GET
  url: "$base_url"

and all the following HTTP calls will be performed with the authorization bearer provided in the default payload.

Merging rules:

  • if a play_requests command provides any other header value, the resulting HTTP call will be performed with merged header values (eg: Authorization + Host)

  • if a play_requests command provides a conflicting header value or any other default option, the Authorization header provided by the command will win and it will override just for the current call the default conflicting header value

Assert response status code

- provider: play_requests
  type: POST
  url: http://something/1
  variable: myvar
  variable_expression: response.json()
  assertion: response.status_code == 200
  parameters:
    json:
      foo: bar

of if you want you can use the expression response.raise_for_status() instead of checking the exact match of status code.

The raise_for_status call will raise an HTTPError if the HTTP request returned an unsuccessful status code.

Post raw data

If you want to send some POST data or send a JSON payload without automatic JSON encoding:

- provider: play_requests
  type: POST
  url: http://something/1
  parameters:
    data: '{"foo"  : "bar"    }'

Redirections

By default requests will perform location redirection for all verbs except HEAD:

You can disable or enable redirects playing with the allow_redirects option:

- provider: play_requests
  type: POST
  url: http://something/1
  variable: myvar
  variable_expression: response.json()
  assertion: response.status_code == 200
  parameters:
    allow_redirects: false
    json:
      foo: bar

Twitter

pytest-play tweets happens here:

Credits

This package was created with Cookiecutter and the cookiecutter-play-plugin (based on audreyr/cookiecutter-pypackage project template).

CHANGES

0.0.5 (2019-04-08)

  • Manages cookies and prepare them for you so you don’t have to create cookie headers by yourself using the auth=('username', 'password')

0.0.4 (2019-01-25)

  • Supports new pytest-play >= 2.0 YAML based syntax (json no more supported)

0.0.3 (2018-01-22)

  • remove condition option (already implemented by pytest-play’s skip_condition)

  • documentation improvements

0.0.2 (2018-01-16)

  • Refactor internal methods

  • Remove merge commands with default payload (already implemented in pytest-play >= 1.1.0)

0.0.1 (2018-01-10)

  • First release

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

play_requests-0.0.5.tar.gz (21.6 kB view details)

Uploaded Source

Built Distribution

play_requests-0.0.5-py2.py3-none-any.whl (9.9 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file play_requests-0.0.5.tar.gz.

File metadata

  • Download URL: play_requests-0.0.5.tar.gz
  • Upload date:
  • Size: 21.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/41.0.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.6.3

File hashes

Hashes for play_requests-0.0.5.tar.gz
Algorithm Hash digest
SHA256 bc2ef513d8078acb61cd17ce0882a4c9168c859a490e1e3b700d1d14ddde1d49
MD5 fbb7b661c1ec3134960307b16a5bed04
BLAKE2b-256 e09dff726a4616e053359712d55243a86e1905e85e7e7355761c137ee70ee700

See more details on using hashes here.

Provenance

File details

Details for the file play_requests-0.0.5-py2.py3-none-any.whl.

File metadata

  • Download URL: play_requests-0.0.5-py2.py3-none-any.whl
  • Upload date:
  • Size: 9.9 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/41.0.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.6.3

File hashes

Hashes for play_requests-0.0.5-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 0c5c8e9a09c806c383d62da9044918c3df48261cb7a41211df4eddc8dd8b5a29
MD5 6e77f25465c84c4d7c59fa2c7c568ffc
BLAKE2b-256 40acb40659015844589bffbe58d1d1153750d5ca637a3cc42c79a5c321310c44

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page