# reqman (3.X)
Reqman is a postman killer ;-)
**Reqman** is a [postman](https://www.getpostman.com/) killer. It shares the same goal, but without GUI ... the GUI is simply your favorite text editor, because requests/tests are only simple yaml files. **Reqman** is a command line tool, available on any platforms.
[Video (1minute)](https://www.youtube.com/embed/ToK-5VwxhP4?autoplay=1&loop=1&playlist=ToK-5VwxhP4&cc_load_policy=1)
All configurations is done via simple yaml files, editable with any text editors. Results are displayed in console and in an html output. It's scriptable, and can be used as a daemon/cron task to automate your tests.
[Documentation](https://manatlan.github.io/reqman/)
[Changelog](https://github.com/manatlan/reqman/blob/master/changelog) !
[Online tool to convert swagger/openapi3, OR postman collections](https://reqman-tools.glitch.me/) to reqman's tests
[DEMO](https://test-reqman.glitch.me)
**Features**
* Light (simple py3 module, 3000 lines of code, and x3 lines for unittests, in TDD mind ... cov:97%)
* Powerful (at least as postman free version)
* tests are simple (no code !)
* Variable pool
* can create(save)/re-use variables per request
* "procedures" (declarations & re-use/call), local or global
* Environment aware (switch easily)
* https/ssl ok (bypass)
* http 1.0, 1.1, 2.0
* proxy support (thru a reqman.conf var "proxy")
* headers inherits
* ~~tests inherits~~
* ~~timed requests + average times~~
* html tests renderer (with request/response contents)
* encoding aware
* cookie handling
* color output in console (when [colorama](https://pypi.org/project/colorama/) is present)
* variables can be computed/transformed (in a chain way)
* tests files extension : .yml or .rml (ReqManLanguage)
* generate conf/rml (with 'new' command)
* can paralleliz tests (option `--p`)
* versionning
* NEW 2.0 :
* rewrite from scratch, a lot stronger & speeder !
* advanced save mechanisms
* new switches system
* a lot of new options (auto open browser, set html filename, compare, ...)
* ability to save the state, to compare with newer ones
* ability to replay given tests (rmr file)
* dual mode : compare switches vs others switches (-env1 +env2) in html output
* shebang mode
* better html output
* fully compatible with reqman1 conf/ymls
* xml/xpath support tests
* used as a lib/module, you can add easily your own features (see below)
* NEW 3.0 : (simple py file -> real python module (multiple files))
* full rewrite of resolving mechanism (more robust, more maintanable) (the big improvment)
- "wait:" commands (time expressed in ms)
* "ignorable vars" (avoid ResolveException, with `<<var?>>`)
* --f option : to output full exchanges in html output
* --j && --j:file.xml : to output junit-xml file
**TODO** : need to rewrite this ^^ ;-)
## Getting started : installation
If you are on an *nix platform, you can start with pip :
$ pip3 install reqman
it will install the _reqman_ script in your path (perhaps, you'll need to Add the path `~/.local/bin` to the _PATH_ environment variable.)
If you are on microsoft windows, just download [reqman.exe (v3)](https://github.com/manatlan/reqman/blob/master/dist/reqman.exe).
[The old reqman.exe V2, is still there](https://github.com/manatlan/reqman/blob/ac7d96319bf53e08f5a01ff55c54ef820e839fa6/dist/reqman.exe), and add it in your path.
[The old reqman.exe V1, is still there](https://github.com/manatlan/reqman/blob/reqman1.4.4.0/dist/reqman.exe), and add it in your path.
## Getting started : let's go
Imagine that you want to test the [json api from pypi.org](https://wiki.python.org/moin/PyPIJSON), to verify that [it finds me](https://pypi.org/pypi/reqman/json) ;-)
(if you are on windows, just replace `reqman` with `reqman.exe`)
You can start a new project in your folder, like that:
$ reqman new https://pypi.org/pypi/reqman/json
It's the first start ; it will create a conf file _reqman.conf_ and a (basic) test file _0010_test.rml_. Theses files are [YAML](https://en.wikipedia.org/wiki/YAML), so ensure that your editor understand them !
(Following 'new' command will just create another fresh rml file if a _reqman.conf_ exists)
Now, you can run/test it :
$ reqman .
It will scan your folder "." and run all test files (`*.rml` or `*.yml`) against the _reqman.conf_ ;-)
It will show you what's happened in your console. And generate a `reqman.html` with more details (open it to have an idea)!
If you edit the `reqman.conf`, you will see :
```yaml
root: https://pypi.org
headers:
User-Agent: reqman (https://github.com/manatlan/reqman)
```
the **root** is a `special var` which will be prependded to all relative urls in your requests tests.
the **headers** (which is a `special var` too) is a set of `http headers` which will be added to all your requests.
Change it to, and save it :
```yaml
root: https://pypi.org
headers:
User-Agent: reqman (https://github.com/manatlan/reqman)
switches:
test:
root: https://test.pypi.org
```
Now, you have created your first _switch_. And try to run your tests like this:
$ reqman.py . -test
It will run your tests against the _root_ defined in _test_ section ; and the test is KO, because _reqman_ doesn't exist on test.pypi.org !
In fact; all declared things under _test_ will replace those at the top ! So you can declare multiple environments, with multiple switches !
But you can declare what you want, now edit _reqman.conf_ like this :
```yaml
root: https://pypi.org
headers:
User-Agent: reqman (https://github.com/manatlan/reqman)
package: reqman
switches:
test:
root: https://test.pypi.org
```
You have declared a _var_ **package** ! let's edit the test file _0010_test.rml_ like this :
```yaml
- GET: /pypi/<<package>>/json
tests:
- status: 200
```
Now, your test will use the **package** var which was declared in _reqman.conf_ ! So, you can create a _switch_ to change the package thru the command line, simply edit your _reqman.conf_ like that :
```yaml
root: https://pypi.org
headers:
User-Agent: reqman (https://github.com/manatlan/reqman)
package: reqman
switches:
test:
root: https://test.pypi.org
colorama:
package: colorama
```
Now, you can check that 'colorama' exists on pypi.org, like that :
$ reqman . -colorama
And you can check that 'colorama' exists on test.pypi.org, like that :
$ reqman . -colorama -test
As you can imagine, it's possible to make a lot of fun things easily. (see a more complex [reqman.conf](https://github.com/manatlan/reqman/blob/master/examples/reqman.conf))
Now, you can edit your rml file, and try the things available in this [tuto](https://github.com/manatlan/reqman/blob/reqman1.4.4.0/examples/tuto.yml).
Organize your tests as you want : you can make many requests in a rml file, you can make many files with many requests, you can make folders which contain many rml files. _Reqman_ will not scan sub-folders starting with "_" or ".".
_reqman_ will return an `exit code` which contains the number of KO tests : 0 if everything is OK, or -1 if there is a trouble (tests can't be runned) : so it's easily scriptable in your automated workflows !
# Ability to override reqman's features for your propers needs (reqman>=2.8.1)
Now, it's super easy to override reqman with your own features. Using 'reqman' as a lib/module for your python's code.
You can declare your own methods, to fulfill your specials needs (hide special mechanism, use external libs, ...):
(Thoses real python methods, just needs to respect the same signature as pyhon methods declared in confs.)
```python
import reqman
reqman.__usage__ = "USAGE: reqmanBis ..." # override usage or not ;-)
@reqman.expose
def SpecialMethod(x,ENV):
"""
Do what you want ...
Args:
'x' : the input var (any) or None.
'ENV' : the current env (dict)
Returns:
any
"""
...
return "What you need"
if __name__ == "__main__":
sys.exit(reqman.main())
```
Now, you can use `SpecialMethod` in your scripts, ex: `<<value|SpecialMethod>>` or `<<SpecialMethod>>`!
Use and abuse !
[![huntr](https://cdn.huntr.dev/huntr_security_badge.svg)](https://huntr.dev)
Raw data
{
"_id": null,
"home_page": "https://github.com/manatlan/reqman",
"name": "reqman",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": null,
"author": "manatlan",
"author_email": "manatlan@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/6b/c7/c31003f9e69828d5b5d8b5b544c405db92e46372ee93857076b4069ddeaa/reqman-3.1.0.tar.gz",
"platform": null,
"description": "# reqman (3.X)\nReqman is a postman killer ;-)\n\n**Reqman** is a [postman](https://www.getpostman.com/) killer. It shares the same goal, but without GUI ... the GUI is simply your favorite text editor, because requests/tests are only simple yaml files. **Reqman** is a command line tool, available on any platforms.\n\n[Video (1minute)](https://www.youtube.com/embed/ToK-5VwxhP4?autoplay=1&loop=1&playlist=ToK-5VwxhP4&cc_load_policy=1)\n\nAll configurations is done via simple yaml files, editable with any text editors. Results are displayed in console and in an html output. It's scriptable, and can be used as a daemon/cron task to automate your tests.\n\n[Documentation](https://manatlan.github.io/reqman/)\n\n[Changelog](https://github.com/manatlan/reqman/blob/master/changelog) !\n\n[Online tool to convert swagger/openapi3, OR postman collections](https://reqman-tools.glitch.me/) to reqman's tests\n\n[DEMO](https://test-reqman.glitch.me)\n\n\n**Features**\n * Light (simple py3 module, 3000 lines of code, and x3 lines for unittests, in TDD mind ... cov:97%)\n * Powerful (at least as postman free version)\n * tests are simple (no code !)\n * Variable pool\n * can create(save)/re-use variables per request\n * \"procedures\" (declarations & re-use/call), local or global\n * Environment aware (switch easily)\n * https/ssl ok (bypass)\n * http 1.0, 1.1, 2.0\n * proxy support (thru a reqman.conf var \"proxy\")\n * headers inherits\n * ~~tests inherits~~\n * ~~timed requests + average times~~\n * html tests renderer (with request/response contents)\n * encoding aware\n * cookie handling\n * color output in console (when [colorama](https://pypi.org/project/colorama/) is present)\n * variables can be computed/transformed (in a chain way)\n * tests files extension : .yml or .rml (ReqManLanguage)\n * generate conf/rml (with 'new' command)\n * can paralleliz tests (option `--p`)\n * versionning\n * NEW 2.0 :\n * rewrite from scratch, a lot stronger & speeder !\n * advanced save mechanisms\n * new switches system\n * a lot of new options (auto open browser, set html filename, compare, ...)\n * ability to save the state, to compare with newer ones\n * ability to replay given tests (rmr file)\n * dual mode : compare switches vs others switches (-env1 +env2) in html output\n * shebang mode\n * better html output\n * fully compatible with reqman1 conf/ymls\n * xml/xpath support tests\n * used as a lib/module, you can add easily your own features (see below)\n * NEW 3.0 : (simple py file -> real python module (multiple files))\n * full rewrite of resolving mechanism (more robust, more maintanable) (the big improvment)\n - \"wait:\" commands (time expressed in ms)\n * \"ignorable vars\" (avoid ResolveException, with `<<var?>>`)\n * --f option : to output full exchanges in html output\n * --j && --j:file.xml : to output junit-xml file\n\n**TODO** : need to rewrite this ^^ ;-)\n\n## Getting started : installation\n\nIf you are on an *nix platform, you can start with pip :\n\n $ pip3 install reqman\n\nit will install the _reqman_ script in your path (perhaps, you'll need to Add the path `~/.local/bin` to the _PATH_ environment variable.)\n\nIf you are on microsoft windows, just download [reqman.exe (v3)](https://github.com/manatlan/reqman/blob/master/dist/reqman.exe).\n [The old reqman.exe V2, is still there](https://github.com/manatlan/reqman/blob/ac7d96319bf53e08f5a01ff55c54ef820e839fa6/dist/reqman.exe), and add it in your path.\n [The old reqman.exe V1, is still there](https://github.com/manatlan/reqman/blob/reqman1.4.4.0/dist/reqman.exe), and add it in your path.\n\n\n## Getting started : let's go\n\nImagine that you want to test the [json api from pypi.org](https://wiki.python.org/moin/PyPIJSON), to verify that [it finds me](https://pypi.org/pypi/reqman/json) ;-)\n(if you are on windows, just replace `reqman` with `reqman.exe`)\n\nYou can start a new project in your folder, like that:\n\n $ reqman new https://pypi.org/pypi/reqman/json\n\nIt's the first start ; it will create a conf file _reqman.conf_ and a (basic) test file _0010_test.rml_. Theses files are [YAML](https://en.wikipedia.org/wiki/YAML), so ensure that your editor understand them !\n(Following 'new' command will just create another fresh rml file if a _reqman.conf_ exists)\n\nNow, you can run/test it :\n\n $ reqman .\n\nIt will scan your folder \".\" and run all test files (`*.rml` or `*.yml`) against the _reqman.conf_ ;-)\n\nIt will show you what's happened in your console. And generate a `reqman.html` with more details (open it to have an idea)!\n\nIf you edit the `reqman.conf`, you will see :\n\n```yaml\nroot: https://pypi.org\nheaders:\n User-Agent: reqman (https://github.com/manatlan/reqman)\n```\n\nthe **root** is a `special var` which will be prependded to all relative urls in your requests tests.\nthe **headers** (which is a `special var` too) is a set of `http headers` which will be added to all your requests.\n\nChange it to, and save it :\n\n```yaml\nroot: https://pypi.org\nheaders:\n User-Agent: reqman (https://github.com/manatlan/reqman)\n\nswitches:\n test:\n root: https://test.pypi.org\n```\n\nNow, you have created your first _switch_. And try to run your tests like this:\n\n $ reqman.py . -test\n\nIt will run your tests against the _root_ defined in _test_ section ; and the test is KO, because _reqman_ doesn't exist on test.pypi.org !\nIn fact; all declared things under _test_ will replace those at the top ! So you can declare multiple environments, with multiple switches !\n\nBut you can declare what you want, now edit _reqman.conf_ like this :\n\n```yaml\nroot: https://pypi.org\nheaders:\n User-Agent: reqman (https://github.com/manatlan/reqman)\n\npackage: reqman\n\nswitches:\n test:\n root: https://test.pypi.org\n```\n\nYou have declared a _var_ **package** ! let's edit the test file _0010_test.rml_ like this :\n\n```yaml\n- GET: /pypi/<<package>>/json\n tests:\n - status: 200\n```\n\nNow, your test will use the **package** var which was declared in _reqman.conf_ ! So, you can create a _switch_ to change the package thru the command line, simply edit your _reqman.conf_ like that :\n\n```yaml\nroot: https://pypi.org\nheaders:\n User-Agent: reqman (https://github.com/manatlan/reqman)\n\npackage: reqman\n\nswitches:\n test:\n root: https://test.pypi.org\n\n colorama:\n package: colorama\n```\n\nNow, you can check that 'colorama' exists on pypi.org, like that :\n\n $ reqman . -colorama\n\nAnd you can check that 'colorama' exists on test.pypi.org, like that :\n\n $ reqman . -colorama -test\n\nAs you can imagine, it's possible to make a lot of fun things easily. (see a more complex [reqman.conf](https://github.com/manatlan/reqman/blob/master/examples/reqman.conf))\n\n\nNow, you can edit your rml file, and try the things available in this [tuto](https://github.com/manatlan/reqman/blob/reqman1.4.4.0/examples/tuto.yml).\nOrganize your tests as you want : you can make many requests in a rml file, you can make many files with many requests, you can make folders which contain many rml files. _Reqman_ will not scan sub-folders starting with \"_\" or \".\".\n\n_reqman_ will return an `exit code` which contains the number of KO tests : 0 if everything is OK, or -1 if there is a trouble (tests can't be runned) : so it's easily scriptable in your automated workflows !\n\n\n# Ability to override reqman's features for your propers needs (reqman>=2.8.1)\nNow, it's super easy to override reqman with your own features. Using 'reqman' as a lib/module for your python's code.\nYou can declare your own methods, to fulfill your specials needs (hide special mechanism, use external libs, ...):\n(Thoses real python methods, just needs to respect the same signature as pyhon methods declared in confs.)\n\n```python\nimport reqman\n\nreqman.__usage__ = \"USAGE: reqmanBis ...\" # override usage or not ;-)\n\n@reqman.expose\ndef SpecialMethod(x,ENV):\n \"\"\"\n Do what you want ...\n\n Args:\n 'x' : the input var (any) or None.\n 'ENV' : the current env (dict)\n\n Returns:\n any\n \"\"\"\n ...\n return \"What you need\"\n\nif __name__ == \"__main__\":\n sys.exit(reqman.main())\n```\n\nNow, you can use `SpecialMethod` in your scripts, ex: `<<value|SpecialMethod>>` or `<<SpecialMethod>>`!\n\nUse and abuse !\n\n[![huntr](https://cdn.huntr.dev/huntr_security_badge.svg)](https://huntr.dev)\n",
"bugtrack_url": null,
"license": null,
"summary": "Create your http(s)-tests in simple yaml files, and run them with command line, against various environments",
"version": "3.1.0",
"project_urls": {
"Homepage": "https://github.com/manatlan/reqman",
"Repository": "https://github.com/manatlan/reqman"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "c03555a0929675bee76213eb1c6ffefee93601343aba23bf54772252bada416c",
"md5": "c505fff3ae65a3d7fed247cc46ac619b",
"sha256": "ff9cf74c37ece900b264b8daa493056f170a04fc1b9c3d920baf6d1366a06beb"
},
"downloads": -1,
"filename": "reqman-3.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "c505fff3ae65a3d7fed247cc46ac619b",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 44540,
"upload_time": "2024-11-24T19:25:38",
"upload_time_iso_8601": "2024-11-24T19:25:38.442737Z",
"url": "https://files.pythonhosted.org/packages/c0/35/55a0929675bee76213eb1c6ffefee93601343aba23bf54772252bada416c/reqman-3.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6bc7c31003f9e69828d5b5d8b5b544c405db92e46372ee93857076b4069ddeaa",
"md5": "c648c0e3ad96812fec633bbf8e6dd7b0",
"sha256": "ee984372635f7510208aece42d72ca5930c487d1b2e81bf321df05c294ba2890"
},
"downloads": -1,
"filename": "reqman-3.1.0.tar.gz",
"has_sig": false,
"md5_digest": "c648c0e3ad96812fec633bbf8e6dd7b0",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 41097,
"upload_time": "2024-11-24T19:25:40",
"upload_time_iso_8601": "2024-11-24T19:25:40.334758Z",
"url": "https://files.pythonhosted.org/packages/6b/c7/c31003f9e69828d5b5d8b5b544c405db92e46372ee93857076b4069ddeaa/reqman-3.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-11-24 19:25:40",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "manatlan",
"github_project": "reqman",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "aiohttp",
"specs": []
},
{
"name": "py-dom-xpath-six",
"specs": []
},
{
"name": "pyyaml",
"specs": [
[
">=",
"4.2b1"
]
]
},
{
"name": "stpl",
"specs": [
[
">=",
"1.13.2"
]
]
},
{
"name": "colorama",
"specs": []
},
{
"name": "pyjwt",
"specs": []
},
{
"name": "junit-xml",
"specs": []
},
{
"name": "pytest",
"specs": []
},
{
"name": "pytest-asyncio",
"specs": []
}
],
"lcname": "reqman"
}