2017-12-05 3 views
1

in unter drei Testfällen Get Requests1, Get Requests2 und Get Requests3. Ich habe versucht, erhalten/RestResponse/Ergebnisknotenwert durch drei unterschiedliche Art und Weise, aber es gleiche Fehler zeigtZugriff auf Json-Daten mit RequestsLibrary von Robotframework: TypeError: erwartete Zeichenfolge oder Puffer

*** Settings *** 
Library Collections 
Library OperatingSystem 
Library HttpLibrary.HTTP 
Library RequestsLibrary 

*** Test Cases *** 
Get Requests1 
    # create a HTTP session to a server 
    Create Session countryname http://services.groupkt.com 
    # store response 
    ${resp}= Get Request countryname /country/get/all 
    log ${resp.content} 
    # ${resp.content} display entire json response, now tring to get node value of /RestResponse/result 
    ${getResponseJson} Get Json Value ${resp} /RestResponse/result 
    # shows error TypeError: expected string or buffer 
    log ${getResponseJson.content} 

Get Requests2 
    # create a HTTP session to a server 
    Create Session countryname http://services.groupkt.com 
    # store response 
    ${resp}= Get Request countryname /country/get/all 
    log ${resp.content} 
    # ${resp.content} display entire json response, now tring to get node value of /RestResponse/result 
    ${responseContent}= to json ${resp.content} 
    # shows error TypeError: expected string or buffer 
    ${getResponseJson} Get Json Value ${responseContent} /RestResponse/result 
    log ${getResponseJson.content} 


Get Requests3 
    # create a HTTP session to a server 
    Create Session countryname http://services.groupkt.com 
    # store response 
    ${resp}= Get Request countryname /country/get/all 
    log ${resp.content} 
    # ${resp.content} display entire json response,parse json 
    ${data} Parse Json ${resp} 
    # shows error TypeError: expected string or buffer 
    ${getResponseJson} Get Json Value ${resp} /RestResponse/result 

Json-Datei Antwort

{ 
    "RestResponse": { 
     "messages": [ 
      "Total [249] records found." 
     ], 
     "result": [ 
      { 
       "name": "Afghanistan", 
       "alpha2_code": "AF", 
       "alpha3_code": "AFG" 
      }, 
      { 
       "name": "\ufffd\ufffdland Islands", 
       "alpha2_code": "AX", 
       "alpha3_code": "ALA" 
      }, 
      { 
       "name": "Albania", 
       "alpha2_code": "AL", 
       "alpha3_code": "ALB" 
      }, 
      { 
       "name": "Algeria", 
       "alpha2_code": "DZ", 
       "alpha3_code": "DZA" 
      } 
     ] 
    } 
} 

Antwort

2

Sie benötigen Get Json Value aus dem JSON zu rufen, nicht aus dem Request-Objekt . In Ihrem Code ist ${resp} ein Objekt, das die JSON-Daten und andere Dinge enthält, über die json-Parser nicht wissen.

${getResponseJson} Get Json Value ${resp.content} /RestResponse/result 

${resp} ist ein Python-Objekt. Es hat die JSON-Daten, aber es hat auch den HTTP-Return-Code und andere Informationen. Sie können es nicht an etwas übergeben, das JSON akzeptiert.

${resp.content} ist der Hauptteil der HTTP-Antwort. Wie Sie in Ihren Kommentaren schreiben, sind dies die JSON-Daten. Jedes Keyword, das JSON-Daten akzeptiert, sollte dies akzeptieren.

${resp.json} ist die JSON-Zeichenfolge der Antwort in ein Python-Objekt konvertiert. Es ist nicht mehr JSON, es ist ein Python-Wörterbuch. Sie können dies nicht an eine Funktion übergeben, für die JSON erforderlich ist. Sie können es jedoch wie ein normales Python-Wörterbuch behandeln.

Nach dem Ausführen des Codes wird ${getResponseJson} die Daten haben, die Sie erwarten. Es ist eine Unicode-Zeichenfolge und Unicode-Zeichenfolgen haben kein content Attribut.

+0

Danke für die Antwort. Ich habe es mit $ {resp.content} versucht. Es zeigt $ {getResponseJson.content} 'fehlgeschlagen: AttributeError:' Unicode 'Objekt hat kein Attribut' Inhalt '. Ich habe auch versucht mit $ {resp.json}, zeigt TypeError: erwartete Zeichenfolge oder Puffer – madhur

+0

@madhur: Sehen Sie sich genauer an, was ich eingegeben und was Sie eingegeben haben, und Ihre eigenen Ergebnisse. In Ihren Kommentaren sagen Sie, dass '$ {resp.content}' die JSON-Zeichenkette anzeigt. Diese Zeichenfolge ist, was Sie für die anderen Daten suchen müssen. Nicht '$ {getResponseJson.content}', und nicht '$ {resp.json}'. –

+0

Zweifellos zeigt $ {resp.content} json string. aber Bibliotheksmethoden zeigen Fehler wie in Frage erwähnt, wenn ich versuche, auf diese Variable zuzugreifen. – madhur

Verwandte Themen