2015-09-09 10 views
6

mir jemand in diesem Szenario helfen:Wie man Parameter übergeben, um Rest-Assured

Als ich diesen Dienst aufrufen, http://restcountries.eu/rest/v1/, erhalte ich einige Länder Informationen.

Aber wenn ich bestimmte Länderinformationen wie Finnland erhalten möchte, rufe ich den Webservice unter http://restcountries.eu/rest/v1/name/Finland an, um die landesspezifischen Informationen zu erhalten.

Um das obige Szenario zu automatisieren, wie kann ich den Ländernamen in Rest-Assured parametrieren? Ich habe es unten versucht, aber es hilft mir nicht.

RestAssured.given(). 
        parameters("name","Finland"). 
      when(). 
        get("http://restcountries.eu/rest/v1/"). 
      then(). 
       body("capital", containsString("Helsinki")); 

Antwort

0

Sie rufen den GET-Aufruf falsch auf.

Die parameters("name","Finland") wird nur als Abfrage Parameter oder Form Parameter für GET und POST/PUT bzw.

RestAssured.when(). 
        get("http://restcountries.eu/rest/v1/name/Finland"). 
      then(). 
       body("capital", containsString("Helsinki")); 

ist der einzige Weg zu tun, umgewandelt werden. Da es sich um eine Java-DSL ist, können Sie die URL alle von selbst konstruieren und weitergeben(), wenn

erforderlich zu erhalten, wenn die URL mit einer GET-Anforderung wie die gleichen Details gewesen zu holen hatte:

http://restcountries.eu/rest/v1?name=Finland,

Der Ihre DSL etwas sein würde:

RestAssured.given().parameters("name","Finland"). 
       when(). 
         get("http://restcountries.eu/rest/v1") 

Wenn Sie eine GET-Anforderung haben, verwandeln Sie Ihre Parameter in queryParameters.

Mehr Informationen über diesen Link: https://code.google.com/p/rest-assured/wiki/Usage#Parameters

+0

Es scheint, ur Web-Service-Aufruf ist nicht korrekt, wenn ich aufrufen, http://restcountries.eu/rest/v1?name=Finland, ich bekomme Informationen aller Länder, eher wenn Sie versuchen, "http://restcountries.eu/rest/v1/name/Finland "erhalten Sie spezifische Länderinformationen. – Uday

+0

Meine Antwort wurde bereits korrigiert. Bitte überprüfen Sie –

+0

Wenn wir Parameter nach Wert übergeben, was ist der Vorteil von Parametern hier? \t String strCountryName = "Finnland"; \t \t RestAssured.given(). // \t \t \t \t \t \t \t Parameter ("Name", "Finnland"). \t \t \t \t \t wenn(). \t \t \t \t \t \t \t get ("http://restcountries.eu/rest/v1/name/" + strCountryName). \t \t \t \t \t dann(). \t \t \t \t \t \t Körper ("Hauptstadt", hasItem ("Helsinki")); Warum brauche ich Parameter, über die ich kommentiert habe? – Uday

9

Als Dokumentation erläutern:

REST Assured automatisch zu bestimmen versuchen, dem Parametertypen (dh Abfrage oder Formular-Parameter) basierend auf der HTTP-Methode . Im Fall von werden GET-Abfrageparameter automatisch verwendet und im Falle von POST werden die Formularparameter verwendet.

Aber in Ihrem Fall scheint es, dass Sie Pfadparameter statt Abfrageparameter benötigen. Beachten Sie auch, dass die generische URL zum Abrufen eines Landes http://restcountries.eu/rest/v1/name/{country} ist, wobei {country} der Name des Landes ist.

Dann gibt es auch mehrere Möglichkeiten, Pfadparameter zu übertragen.

Hier sind einige Beispiele

Beispiel mit pathParam():

// Here the key name 'country' must match the url parameter {country} 
RestAssured.given() 
     .pathParam("country", "Finland") 
     .when() 
      .get("http://restcountries.eu/rest/v1/name/{country}") 
     .then() 
      .body("capital", containsString("Helsinki")); 

Beispiel mit Variable:

String cty = "Finland"; 

// Here the name of the variable have no relation with the URL parameter {country} 
RestAssured.given() 
     .when() 
      .get("http://restcountries.eu/rest/v1/name/{country}", cty) 
     .then() 
      .body("capital", containsString("Helsinki")); 

Nun, wenn Sie verschiedene Dienste aufrufen müssen, können Sie auch die Parametrisierung "Service" wie folgt:

// Search by name 
String val = "Finland"; 
String svc = "name"; 

RestAssured.given() 
     .when() 
      .get("http://restcountries.eu/rest/v1/{service}/{value}", svc, val) 
     .then() 
      .body("capital", containsString("Helsinki")); 


// Search by ISO code (alpha) 
val = "CH" 
svc = "alpha" 

RestAssured.given() 
     .when() 
      .get("http://restcountries.eu/rest/v1/{service}/{value}", svc, val) 
     .then() 
      .body("capital", containsString("Bern")); 

// Search by phone intl code (callingcode) 
val = "359" 
svc = "callingcode" 

RestAssured.given() 
     .when() 
      .get("http://restcountries.eu/rest/v1/{service}/{value}", svc, val) 
     .then() 
      .body("capital", containsString("Sofia")); 

Danach können Sie auch einfach die JUnit @RunWith(Parameterized.class) verwenden, um die Parameter 'svc' und 'value' für einen Komponententest einzugeben.

+1

Das ist eine elegante Art, Wegwerte zu parametrieren! Wie von der RequestSpecification API angegeben, verbessert dieser Ansatz tatsächlich die Lesbarkeit und ermöglicht die Wiederverwendung von Pfaden! http://static.javadoc.io/com.jayway.restassured/rest-assured/1.2.3/com/jayway/restassured/specification/RequestSpecification.html#pathParameter(java.lang.String,%20java.lang. Objekt) –

Verwandte Themen