reqman


Namereqman JSON
Version 3.2.0 PyPI version JSON
download
home_pagehttps://github.com/manatlan/reqman
SummaryCreate your http(s)-tests in simple yaml files, and run them with command line, against various environments
upload_time2024-11-27 13:59:44
maintainerNone
docs_urlNone
authormanatlan
requires_python>=3.8
licenseNone
keywords
VCS
bugtrack_url
requirements aiohttp python-dotenv py-dom-xpath-six pyyaml stpl colorama pyjwt junit-xml pytest pytest-asyncio
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 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/95/16/673a5cf39ea754252b3902fe81d0bf3c92710a0427e3fa47b6dbc7c9b6df/reqman-3.2.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.2.0",
    "project_urls": {
        "Homepage": "https://github.com/manatlan/reqman",
        "Repository": "https://github.com/manatlan/reqman"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ebd76bb82b2ae525b9e722b2ce99dac61ced841e5b604133562663269e77214d",
                "md5": "2fd3f32ba2b3950098477a6fdfbe648f",
                "sha256": "5cd3c6435d513cc37f83df9316bb6417aca35fc44dfc1ed9c373127767f98465"
            },
            "downloads": -1,
            "filename": "reqman-3.2.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "2fd3f32ba2b3950098477a6fdfbe648f",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 44628,
            "upload_time": "2024-11-27T13:59:43",
            "upload_time_iso_8601": "2024-11-27T13:59:43.776921Z",
            "url": "https://files.pythonhosted.org/packages/eb/d7/6bb82b2ae525b9e722b2ce99dac61ced841e5b604133562663269e77214d/reqman-3.2.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9516673a5cf39ea754252b3902fe81d0bf3c92710a0427e3fa47b6dbc7c9b6df",
                "md5": "af03500600d8e01979071e9f9561c824",
                "sha256": "bdc7d0ab1a78cd6bb2e1945029b3a001bd2e0db15f5c0cc0697c9cadf76d7e55"
            },
            "downloads": -1,
            "filename": "reqman-3.2.0.tar.gz",
            "has_sig": false,
            "md5_digest": "af03500600d8e01979071e9f9561c824",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 41203,
            "upload_time": "2024-11-27T13:59:44",
            "upload_time_iso_8601": "2024-11-27T13:59:44.848400Z",
            "url": "https://files.pythonhosted.org/packages/95/16/673a5cf39ea754252b3902fe81d0bf3c92710a0427e3fa47b6dbc7c9b6df/reqman-3.2.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-11-27 13:59:44",
    "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": "python-dotenv",
            "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"
}
        
Elapsed time: 0.38142s