2015-09-09 19 views
6

Czy ktoś może mi pomóc w tym scenariuszu:jak przekazać parametry spocząć pewny

Gdy przywołuję tę usługę, http://restcountries.eu/rest/v1/, mam kilka informacji krajach.

Kiedy jednak chcę uzyskać informacje na temat konkretnego kraju, np. Finlandia, korzystam z usługi internetowej pod numerem http://restcountries.eu/rest/v1/name/Finland, aby uzyskać informacje dotyczące danego kraju.

Aby zautomatyzować powyższy scenariusz, w jaki sposób można sparametryzować nazwę kraju pod numerem Rest-Assured? Próbowałem poniżej, ale nie pomaga mi.

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

Odpowiedz

0

Niepoprawnie wywołujesz wywołanie GET.

The parameters("name","Finland") zostaną przekształcone tylko zapytania parametru lub postać parametr GET i PO/złożone odpowiednio

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

jest jedynym sposobem na. Ponieważ jest to DSL java, można skonstruować URL wszystko sam i przekazać go do get(), jeśli wymagane

Jeśli adres URL z prośbą GET musiał pobrać te same dane były jak:

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

DSL byłoby coś takiego:

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

Kiedy masz żądania GET, twoje parametry przekształcić queryParameters.

Więcej informacji z tego linku: https://code.google.com/p/rest-assured/wiki/Usage#Parameters

+0

Wygląda na to, że połączenie z serwisem sieciowym nie jest poprawne, kiedy wzywam, http://restcountries.eu/rest/v1?name=Finland, otrzymuję informacje o wszystkich krajach, a raczej jeśli spróbujesz "http://restcountries.eu/rest/v1/name/Finland "otrzymujesz szczegółowe informacje o kraju. – Uday

+0

Moja odpowiedź została już poprawiona. pls check –

+0

Jeśli przekazujemy parametr według wartości, jaka jest zaleta posiadania tutaj parametrów? \t String strCountryName = "Finlandia"; \t \t RestAssured.given(). // \t \t \t \t \t \t \t parametry ("nazwa", "Finlandia"). \t \t \t \t \t kiedy(). \t \t \t \t \t \t \t get ("http://restcountries.eu/rest/v1/name/" + strCountryName). \t \t \t \t \t następnie(). \t \t \t \t \t ciało ("kapitał", hasItem ("Helsinki")); Dlaczego potrzebuję parametru powyżej, który skomentowałem? – Uday

9

co dokumentacja wyjaśnia:

pewny, automatycznie spróbuje określić, który typ parametru (tj zapytanie lub parametr forma) w oparciu o metodę HTTP . W przypadku parametru parametry zapytania GET zostaną automatycznie użyte, aw przypadku POST zostaną użyte parametry formularza.

Ale w twoim przypadku wydaje się, że potrzebujesz parametru ścieżki zamiast parametrów zapytania. Pamiętaj też, że ogólny adres URL do uzyskania kraju to http://restcountries.eu/rest/v1/name/{country} , gdzie {country} to nazwa kraju.

Istnieje również wiele sposobów przesyłania parametrów ścieżki.

Oto kilka przykładów

Przykład wykorzystania 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")); 

Przykład wykorzystania zmiennej:

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")); 

Teraz, jeśli chcesz zadzwonić do różnych usług, można również parametryzują "usługa" w ten sposób:

// 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")); 

Po tym można również łatwo użyć JUnit @RunWith(Parameterized.class) do podania parametrów "svc" i "wartość" dla testu jednostkowego.

+1

To jest taki elegancki sposób parametryzowania wartości ścieżek! Tak jak zostało to określone przez API RequestSpecification, to podejście rzeczywiście poprawia czytelność i umożliwia ponowne wykorzystanie ścieżki! http://static.javadoc.io/com.jayway.restassured/rest-assured/1.2.3/com/jayway/restassured/specification/RequestSpecification.html#pathParameter(java.lang.String,%20java.lang. Obiekt) –