summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--python-rigor.spec600
-rw-r--r--sources1
3 files changed, 602 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..6a7f3bd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/rigor-0.7.5.tar.gz
diff --git a/python-rigor.spec b/python-rigor.spec
new file mode 100644
index 0000000..907dd32
--- /dev/null
+++ b/python-rigor.spec
@@ -0,0 +1,600 @@
+%global _empty_manifest_terminate_build 0
+Name: python-rigor
+Version: 0.7.5
+Release: 1
+Summary: rigor
+License: MIT license
+URL: https://github.com/genomoncology/rigor
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/a8/cd/2e17a450b807cd5c917a1c2837c2fd705bcf1f6b838cafae6c9cdcf83e25/rigor-0.7.5.tar.gz
+BuildArch: noarch
+
+Requires: python3-addict
+Requires: python3-aiofiles
+Requires: python3-beautifulsoup4
+Requires: python3-click
+Requires: python3-colorama
+Requires: python3-httpx
+Requires: python3-hyperlink
+Requires: python3-importlib-metadata
+Requires: python3-jmespath
+Requires: python3-related
+Requires: python3-structlog
+Requires: python3-xlwt
+
+%description
+`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.
+
+<a href='https://codecov.io/github/genomoncology/rigor/'><img src='https://codecov.io/github/genomoncology/rigor/branch/master/graph/badge.svg' align="right" /></a>
+<a href='https://pypi.python.org/pypi/rigor'><img src='https://img.shields.io/pypi/v/rigor.svg' align="right" /></a>
+
+<br/>
+
+
+# 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]
+
+
+[Click]: http://click.pocoo.org/
+[PyRestTest]: https://github.com/svanoort/pyresttest/
+[Related]: https://github.com/genomoncology/related
+[Swagger]: https://swagger.io/specification/
+[Tavern]: https://taverntesting.github.io/
+[aiohttp]: http://aiohttp.readthedocs.io/en/stable/
+[cucumber-sandwich]: https://github.com/damianszczepanik/cucumber-sandwich
+[jmespath.py]: https://github.com/jmespath/jmespath.py
+[requests]: http://docs.python-requests.org/en/master/
+[structlog]: http://www.structlog.org/en/stable/
+[tests/httpbin/]: ./tests/httpbin
+[comparisons.rigor]: ./tests/httpbin/comparisons.rigor
+[list]: ./.images/list.png
+[detail]: ./.images/detail.png
+[objects]: ./.images/objects.png
+[Genomoncology LLC]: http://genomoncology.com
+[Ian Maurer]: https://github.com/imaurer
+[jmespath]: jmespath.org
+
+
+
+%package -n python3-rigor
+Summary: rigor
+Provides: python-rigor
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-rigor
+`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.
+
+<a href='https://codecov.io/github/genomoncology/rigor/'><img src='https://codecov.io/github/genomoncology/rigor/branch/master/graph/badge.svg' align="right" /></a>
+<a href='https://pypi.python.org/pypi/rigor'><img src='https://img.shields.io/pypi/v/rigor.svg' align="right" /></a>
+
+<br/>
+
+
+# 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]
+
+
+[Click]: http://click.pocoo.org/
+[PyRestTest]: https://github.com/svanoort/pyresttest/
+[Related]: https://github.com/genomoncology/related
+[Swagger]: https://swagger.io/specification/
+[Tavern]: https://taverntesting.github.io/
+[aiohttp]: http://aiohttp.readthedocs.io/en/stable/
+[cucumber-sandwich]: https://github.com/damianszczepanik/cucumber-sandwich
+[jmespath.py]: https://github.com/jmespath/jmespath.py
+[requests]: http://docs.python-requests.org/en/master/
+[structlog]: http://www.structlog.org/en/stable/
+[tests/httpbin/]: ./tests/httpbin
+[comparisons.rigor]: ./tests/httpbin/comparisons.rigor
+[list]: ./.images/list.png
+[detail]: ./.images/detail.png
+[objects]: ./.images/objects.png
+[Genomoncology LLC]: http://genomoncology.com
+[Ian Maurer]: https://github.com/imaurer
+[jmespath]: jmespath.org
+
+
+
+%package help
+Summary: Development documents and examples for rigor
+Provides: python3-rigor-doc
+%description help
+`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.
+
+<a href='https://codecov.io/github/genomoncology/rigor/'><img src='https://codecov.io/github/genomoncology/rigor/branch/master/graph/badge.svg' align="right" /></a>
+<a href='https://pypi.python.org/pypi/rigor'><img src='https://img.shields.io/pypi/v/rigor.svg' align="right" /></a>
+
+<br/>
+
+
+# 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]
+
+
+[Click]: http://click.pocoo.org/
+[PyRestTest]: https://github.com/svanoort/pyresttest/
+[Related]: https://github.com/genomoncology/related
+[Swagger]: https://swagger.io/specification/
+[Tavern]: https://taverntesting.github.io/
+[aiohttp]: http://aiohttp.readthedocs.io/en/stable/
+[cucumber-sandwich]: https://github.com/damianszczepanik/cucumber-sandwich
+[jmespath.py]: https://github.com/jmespath/jmespath.py
+[requests]: http://docs.python-requests.org/en/master/
+[structlog]: http://www.structlog.org/en/stable/
+[tests/httpbin/]: ./tests/httpbin
+[comparisons.rigor]: ./tests/httpbin/comparisons.rigor
+[list]: ./.images/list.png
+[detail]: ./.images/detail.png
+[objects]: ./.images/objects.png
+[Genomoncology LLC]: http://genomoncology.com
+[Ian Maurer]: https://github.com/imaurer
+[jmespath]: jmespath.org
+
+
+
+%prep
+%autosetup -n rigor-0.7.5
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-rigor -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Thu May 18 2023 Python_Bot <Python_Bot@openeuler.org> - 0.7.5-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..6973220
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+de3042e1ecca319351ed7e469acbf869 rigor-0.7.5.tar.gz