Skip to main content

Rigor is a Domain Specific Language (DSL) and Command Line Interface (CLI) for making HTTP requests, extracting data, and validating responses. The main intent of Rigor is to be an HTTP-based API (e.g. REST) Testing Framework for automated functional or integration testing.


Requirements

  • Python 3.12+

Installation

Install using pip...

pip install rigor

Feature List

  • Functional testing without the need to write glue code. (e.g. Cucumber)
  • Runs in either synchronous (requests) or asynchronous (aiohttp) mode.
  • YAML-based format for Test Case files for easy test creation and maintenance.
  • Response transformation using jmespath.py to reduce test fragility.
  • Pretty HTML test execution reports using cucumber-sandwich.
  • Swagger path coverage report to ensure API surface area coverage.
  • Syntax highlighted console or JSON-based logging using structlog.
  • Profiles for switching between different environments and settings.
  • Tags and CLI options for selectively executing subsets of the test suite.
  • Scenario Outlines (i.e. Tables) for cases with numerous scenarios.
  • Beautiful Soup parsing for extraction from HTML data.
  • Proper error code ($?) on suite success (0) or failure (!0)
  • Case-scenario unique identifier (uuid) for managing session and race conditions.

Command Line Interface (CLI) Options

$ rigor --help
Usage: rigor [OPTIONS] [PATHS]...

Options:
  --profile TEXT             Profile name (e.g. test)
  --host TEXT                Host name (e.g. http://localhost:8000)
  -i, --includes TEXT        Include tag of cases. (e.g. smoke)
  -e, --excludes TEXT        Exclude tag of cases to run. (e.g. broken)
  -p, --prefixes TEXT        Filter cases by file prefix. (e.g. smoke_)
  -e, --extensions TEXT      Filter cases by file extension. (e.g. rigor)
  -c, --concurrency INTEGER  # of concurrent HTTP requests. (default: 5)
  -o, --output TEXT          Report output folder.
  -q, --quiet                Run in quiet mode. (warning/critical level only)
  -v, --verbose              Run in verbose mode. (debug level logging)
  -j, --json                 JSON-style logging.
  -h, --html                 Generate HTML report.
  -g, --coverage             Generate Coverage report.
  -r, --retries INTEGER      # of retries for GET calls only. (default: 0)
  -s, --sleep INTEGER        Retry sleep (seconds multiplied by retry).
                            (default: 60)
  -f, --retry_failed         Retries all failed scenarios at the end.
  --version                  Logs current version and exits.
  --help                     Show this message and exit.

Simple Example

(rigor) /p/tmp> cat test.rigor
name: Simple case.

steps:
  - description: Simple step.
    request:
      host: https://httpbin.org
      path: get

(rigor) /p/tmp> rigor test.rigor --html
2018-02-08 13:18.06 [info     ] no config file not found       [rigor] paths=('test.rigor',)
2018-02-08 13:18.06 [info     ] collecting tests               [rigor] cwd=/private/tmp paths=['test.rigor']
2018-02-08 13:18.06 [info     ] tests collected                [rigor] queued=1 skipped=0
2018-02-08 13:18.06 [info     ] execute suite complete         [rigor] failed=0 passed=1 timer=0.119s
2018-02-08 13:18.07 [info     ] launching browser              [rigor] report_path=/var/folders/b_/2hlrn_7930x81r009mfzl50m0000gn/T/tmps_8d7nn_/html-2018-02-08-08-18-06/cucumber-html-reports/cucumber-html-reports/overview-features.html

list

detail

Object Model

  • suite: set of cases that gets built dynamically based on cli arguments.
  • case: set of scenarios and steps in a .rigor file.
  • scenario: namespace for 1 run of case steps.
  • step: request with response extract, validate, etc.
  • iterate: repeats an individual step by iterating through iterable.
  • request: http call (get, post, etc.) to path with parameters, data, or uploads
  • extract: extract nested data from a response into a variable available to following steps.
  • validate: check an actual value against an expected value using a comparator.
  • transform: using jmespath to shape a JSON response into a specific format.

objects

Comparators

Comparators are used by the validation phase of each step to check whether an actual value is returning as expected. See the comparisons.rigor example for more details.

  • equals
  • not equals
  • same
  • not same
  • greater than
  • less than
  • greater than or equals
  • less than or equals
  • type
  • in
  • not in
  • regex
  • subset
  • not subset
  • length
  • superset
  • not superset
  • keyset
  • not keyset
  • contains
  • not contains

Related Projects

  • Tavern is an extremely similar project that was released a little too late for us to use.
  • Pyresttest was the first library we used before deciding to roll our own testing framework.
  • Click is the library used to build out the command-line options.
  • [Related] is the library used for parsing the YAML test suite into an Python object model.

More Examples

More examples can be found by reviewing the tests/httpbin/ folder of this project.

License

The MIT License (MIT) Copyright (c) 2017 Ian Maurer, Genomoncology LLC

Release files for rigor 1.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for rigor 1.0.1
File Size Uploaded
rigor-1.0.1.tar.gz 38.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for rigor 1.0.1
File Interpreter ABI Platform
rigor-1.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 71.8 kB

Release files / rigor-1.0.1.tar.gz

Download URL rigor-1.0.1.tar.gz
Size 38.8 kB
Tags Source
SHA-256 checksum
How to use checksums
d0327bafc85aba0fddec5f39e8ac0b39bd5e1869322c2b54ba1fa252a97c0f99
BLAKE2b-256 checksum
How to use checksums
c8a011796c28c75fe67197aa16be2646ac222de920ac0f0db0bbdbffd29007df
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.0

Release files / rigor-1.0.1-py3-none-any.whl

Download URL rigor-1.0.1-py3-none-any.whl
Size 33.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
caa0251a2ca0c6779abae95f61961f137d42fa67d9ecdc648d76bc37bffced2d
BLAKE2b-256 checksum
How to use checksums
852e126cbe8aef7d2d7f7073f8f474edd168c22fdc40774dc155e003aee82f92
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.0

Release history Release notifications | RSS feed

This release

1.0.1 This release

2 release files

0.8.0

2 release files

0.7.5

2 release files

0.7.4

2 release files

0.7.3

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.19

1 release file

0.5.17

2 release files

0.5.16

2 release files

0.5.15

2 release files

0.5.14

2 release files

0.5.9

2 release files

0.5.7

2 release files

0.5.6

2 release files

0.5.5

1 release file

0.5.4

2 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.1

1 release file

0.5.0

1 release file

0.4.4

3 release files

0.4.3

3 release files

0.4.2

3 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.7

2 release files

0.3.6

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.20

2 release files

0.0.19

2 release files

0.0.18

2 release files

0.0.17

2 release files

0.0.15

2 release files

0.0.14

2 release files

0.0.13

2 release files

0.0.12

2 release files

0.0.9

2 release files

0.0.8

2 release files

0.0.7

3 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page