Package: reqman
reqman (3.X)Reqman is a postman killer ;-)Reqmanis apostmankiller. It shares the same goal, but without GUI ... the GUI is simply your favorite text editor, because requests/tests are only simple yaml files.Reqmanis a command line tool, available on any platforms.Video (1minute)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.DocumentationChangelog!Online tool to convert swagger/openapi3, OR postman collectionsto reqman's testsDEMOFeaturesLight (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 poolcan create(save)/re-use variables per request"procedures" (declarations & re-use/call), local or globalEnvironment aware (switch easily)https/ssl ok (bypass)http 1.0, 1.1, 2.0proxy support (thru a reqman.conf var "proxy")headers inheritstests inheritstimed requests + average timeshtml tests renderer (with request/response contents)encoding awarecookie handlingcolor output in console (whencoloramais 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)versionningNEW 2.0 :rewrite from scratch, a lot stronger & speeder !advanced save mechanismsnew switches systema lot of new options (auto open browser, set html filename, compare, ...)ability to save the state, to compare with newer onesability to replay given tests (rmr file)dual mode : compare switches vs others switches (-env1 +env2) in html outputshebang modebetter html outputfully compatible with reqman1 conf/ymlsxml/xpath support testsused 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 fileTODO: need to rewrite this ^^ ;-)Getting started : installationIf you are on an *nix platform, you can start with pip :$ pip3 install reqmanit will install thereqmanscript in your path (perhaps, you'll need to Add the path~/.local/binto thePATHenvironment variable.)If you are on microsoft windows, just downloadreqman.exe (v3).The old reqman.exe V2, is still there, and add it in your path.The old reqman.exe V1, is still there, and add it in your path.Getting started : let's goImagine that you want to test thejson api from pypi.org, to verify thatit finds me;-)
(if you are on windows, just replacereqmanwithreqman.exe)You can start a new project in your folder, like that:$ reqman new https://pypi.org/pypi/reqman/jsonIt's the first start ; it will create a conf filereqman.confand a (basic) test file0010_test.rml. Theses files areYAML, so ensure that your editor understand them !
(Following 'new' command will just create another fresh rml file if areqman.confexists)Now, you can run/test it :$ reqman .It will scan your folder "." and run all test files (*.rmlor*.yml) against thereqman.conf;-)It will show you what's happened in your console. And generate areqman.htmlwith more details (open it to have an idea)!If you edit thereqman.conf, you will see :root:https://pypi.orgheaders:User-Agent:reqman (https://github.com/manatlan/reqman)therootis aspecial varwhich will be prependded to all relative urls in your requests tests.
theheaders(which is aspecial vartoo) is a set ofhttp headerswhich will be added to all your requests.Change it to, and save it :root:https://pypi.orgheaders:User-Agent:reqman (https://github.com/manatlan/reqman)switches:test:root:https://test.pypi.orgNow, you have created your firstswitch. And try to run your tests like this:$ reqman.py . -testIt will run your tests against therootdefined intestsection ; and the test is KO, becausereqmandoesn't exist on test.pypi.org !
In fact; all declared things undertestwill replace those at the top ! So you can declare multiple environments, with multiple switches !But you can declare what you want, now editreqman.conflike this :root:https://pypi.orgheaders:User-Agent:reqman (https://github.com/manatlan/reqman)package:reqmanswitches:test:root:https://test.pypi.orgYou have declared avarpackage! let's edit the test file0010_test.rmllike this :-GET:/pypi/<<package>>/jsontests:-status:200Now, your test will use thepackagevar which was declared inreqman.conf! So, you can create aswitchto change the package thru the command line, simply edit yourreqman.conflike that :root:https://pypi.orgheaders:User-Agent:reqman (https://github.com/manatlan/reqman)package:reqmanswitches:test:root:https://test.pypi.orgcolorama:package:coloramaNow, you can check that 'colorama' exists on pypi.org, like that :$ reqman . -coloramaAnd you can check that 'colorama' exists on test.pypi.org, like that :$ reqman . -colorama -testAs you can imagine, it's possible to make a lot of fun things easily. (see a more complexreqman.conf)Now, you can edit your rml file, and try the things available in thistuto.
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.Reqmanwill not scan sub-folders starting with "_" or ".".reqmanwill return anexit codewhich 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.)importreqmanreqman.__usage__="USAGE: reqmanBis ..."# override usage or not ;-)@reqman.exposedefSpecialMethod(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 useSpecialMethodin your scripts, ex:<<value|SpecialMethod>>or<<SpecialMethod>>!Use and abuse !