python - String variable args are treated as dict types in robot framework -
*** test cases *** log test   run keyword logtype  *** keyword *** logtype   ${type_object}= evaluate  type( ${tc_args} )      log console  type object ${type_object}   when run command, pybot -v tc_args:'{"a":"b"}' a.robot , robot prints,
the type object <type 'dict'>   but, isn't default behavior treat single quoted literals strings? so, ideally must have printed <type 'str'> instead of <type 'dict'>. 
your variable string. check it, try dictionary keyword on (like "get dictionary" collections lib) , see fails.
run code see it:
*** settings *** library  collections  *** test cases *** log test   # let's test proper dictionary    ${dict} =  create dictionary   b   ${value} =  dictionary  ${dict}    should equal  ${value}  b   log console  ${\n}this real dictionary   # ${tc_args} passed on command line   # evaluate might let thing have dict   ${type_object} =  evaluate  type( ${tc_args} )      log console  type object ${type_object}   # in fact string , doing dict operation fail   dictionary  ${type_object}    to understand why dict type evaluate, have understand evaluate "evaluating given expression in python , returns results.". take argument plain string launch python on python command line.
now if check argument on python command line, here get:
$ python python 2.7.9 (default, dec 19 2014, 06:00:59) [gcc 4.2.1 compatible apple llvm 6.0 (clang-600.0.56)] on darwin type "help", "copyright", "credits" or "license" more information. >>> type({"a":"b"}) <type 'dict'>   which totally normal, because "string" {"a":"b"} how declare dictionary in python.
so:
- be careful "evaluate"
 - if need pass dictionary robot command line, pass string, , loads json python library.
 
Comments
Post a Comment