简体   繁体   中英

How to load a json data file into a variable in robot framework?

I Am trying to load a json data file into a variable directly in Robot Framework. Can anyone please elaborate with an eg giving the exact syntax as to how to do it? Thanks in advance :)

One way would be to use the Get File keyword from the OperatingSystem library, and then use the built-in Evaluate keyword to convert it to a python object.

For example, consider a file named example.json with the following contents:

{
    "firstname": "Inigo",
    "lastname": "Montoya"
}

You can log the name with something like this:

*** Settings ***
| Library | OperatingSystem

*** Test Cases ***
| Example of how to load JSON
| | # read the raw data
| | ${json}= | Get file | example.json
| | 
| | # convert the data to a python object
| | ${object}= | Evaluate | json.loads('''${json}''') | json
| | 
| | # log the data
| | log | Hello, my name is ${object["firstname"]} ${object["lastname"]} | WARN

Of course, you could also write your own library in python to create a keyword that does the same thing.

There is a library available for this: HttpLibrary.HTTP

${json}= | Get file | example.json
${port}  | HttpLibrary.HTTP.Get Json Value | ${json} | /port
log      | ${port}

API Document is available here: http://peritus.github.io/robotframework-httplibrary/HttpLibrary.html

A common use is passing the json data to another library like Http Library Requests . You could do:

*** Settings ***
Library        OperatingSystem
Library        RequestsLibrary

*** Test Cases ****
Create User
         #...
   ${file_data}= 
    ...  Get Binary File    ${RESOURCES}${/}normal_user.json
         Post Request       example_session    /user    data=${file_data} 
         #...

No direct python involved and no intermediary json object.

Thanks Vinay .. that helped now we can retrieve data from json file in robot framework as well

*** Settings ***
Library           HttpLibrary.HTTP
Library           OperatingSystem

*** Test Cases ***
Login_to_SalesForce_Json
    ${jsonfile}    Get File    c:/pathtojason/Data/testsuite.json
    ${username}    Get Json Value    ${jsonfile}    /test_case1/username
    log    ${username}

Below is the json file structure

{
    "test_case1": 
        {
            "username":"User1",
            "password":"Pass1"
        }
    ,
    "test_case2":
        {
            "username1":"User2",
            "password1":"Pass2"
        }


}

Prerequiste is:pip install --trusted-host pypi.python.org robotframework-httplibrary

I had similar issue and this work fine with me:
${json} Get Binary File ${json_path}nameOfJsonFile.json

It works for me on API testing, to read .json and POST, like here

*** Settings ***
Library    Collections
Library    ExtendedRequestsLibrary 
Library    OperatingSystem
*** Variables ***  
${uri}    https://blabla.com/service/
${json_path}    C:/home/user/project/src/json/
*** Test Cases ***
Name of Robot Test Case  
    Create Session    alias    ${uri}    
    &{headers}  Create Dictionary  Content-Type=application/json; charset=utf-8
    ${json}  Get Binary File  ${json_path}nameOfJsonFile.json
    ${resp}    Post Request    alias    data=${shiftB}    headers=${headers}
    Should Be Equal As Strings    ${resp.status_code}    200

There are also cases when you will need to transform read binary file (in my case ${json} to a dictionary but first try this simple solution.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM