All Projects → genomoncology → rigor

genomoncology / rigor

Licence: MIT License
HTTP-based DSL for for validating RESTful APIs

Programming Languages

python
139335 projects - #7 most used programming language
Makefile
30231 projects

Projects that are alternatives of or similar to rigor

python3-concurrency
Python3爬虫系列的理论验证,首先研究I/O模型,分别用Python实现了blocking I/O、nonblocking I/O、I/O multiplexing各模型下的TCP服务端和客户端。然后,研究同步I/O操作(依序下载、多进程并发、多线程并发)和异步I/O(asyncio)之间的效率差别
Stars: ✭ 49 (-24.62%)
Mutual labels:  aiohttp, requests, asyncio
Python3 Concurrency Pics 02
爬取 www.mzitu.com 全站图片,截至目前共5162个图集,16.5万多张美女图片,使用 asyncio 和 aiohttp 实现的异步版本只需要不到2小时就能爬取完成。按日期创建图集目录,保存更合理。控制台只显示下载的进度条,详细信息保存在日志文件中。支持异常处理,不会终止爬虫程序。失败的请求,下次再执行爬虫程序时会自动下载
Stars: ✭ 275 (+323.08%)
Mutual labels:  aiohttp, requests, asyncio
Python Simple Rest Client
Simple REST client for python 3.6+
Stars: ✭ 143 (+120%)
Mutual labels:  aiohttp, requests, asyncio
waio
Is a pretty simple and fully asynchronous framework for WhatsApp Business API written in Python 3.7 with asyncio and aiohttp.
Stars: ✭ 18 (-72.31%)
Mutual labels:  aiohttp, asyncio
python-logi-circle
Python 3.6+ API for Logi Circle cameras
Stars: ✭ 23 (-64.62%)
Mutual labels:  aiohttp, asyncio
tomodachi
💻 Microservice library / framework using Python's asyncio event loop with full support for HTTP + WebSockets, AWS SNS+SQS, RabbitMQ / AMQP, middleware, etc. Extendable for GraphQL, protobuf, gRPC, among other technologies.
Stars: ✭ 170 (+161.54%)
Mutual labels:  aiohttp, asyncio
aioneo4j
asyncio client for neo4j
Stars: ✭ 29 (-55.38%)
Mutual labels:  aiohttp, asyncio
dvhb-hybrid
A package to mix django and asyncio in one application
Stars: ✭ 45 (-30.77%)
Mutual labels:  aiohttp, asyncio
netunnel
A tool to create network tunnels over HTTP/S written in Python 3
Stars: ✭ 19 (-70.77%)
Mutual labels:  aiohttp, asyncio
aiohttp-jwt
aiohttp middleware and helper utils for working with JSON web token.
Stars: ✭ 70 (+7.69%)
Mutual labels:  aiohttp, asyncio
fbemissary
A bot framework for the Facebook Messenger platform, built on asyncio and aiohttp
Stars: ✭ 30 (-53.85%)
Mutual labels:  aiohttp, asyncio
pytest-aiohttp
pytest plugin for aiohttp support
Stars: ✭ 110 (+69.23%)
Mutual labels:  aiohttp, asyncio
yutto
🧊 一个可爱且任性的 B 站视频下载器(bilili V2)
Stars: ✭ 383 (+489.23%)
Mutual labels:  aiohttp, asyncio
trellio
Python3 asyncio based microframework for microservice architecture
Stars: ✭ 19 (-70.77%)
Mutual labels:  aiohttp, asyncio
pyladies-courseware
Homework/task submit and review web app · based on React and Python aiohttp
Stars: ✭ 14 (-78.46%)
Mutual labels:  aiohttp, asyncio
aiodogstatsd
An asyncio-based client for sending metrics to StatsD with support of DogStatsD extension
Stars: ✭ 26 (-60%)
Mutual labels:  aiohttp, asyncio
stream video server
demonstrates how to create video streaming server with the help of aiohttp and opencv
Stars: ✭ 15 (-76.92%)
Mutual labels:  aiohttp, asyncio
glQiwiApi
The ultrarapid and multifunctional wrapper over QIWI and YooMoney
Stars: ✭ 44 (-32.31%)
Mutual labels:  aiohttp, asyncio
aiohttp-client-cache
An async persistent cache for aiohttp requests
Stars: ✭ 63 (-3.08%)
Mutual labels:  aiohttp, requests
aioScrapy
基于asyncio与aiohttp的异步协程爬虫框架 欢迎Star
Stars: ✭ 34 (-47.69%)
Mutual labels:  aiohttp, asyncio

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.6

Installation

Install using pip3...

pip3 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

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].