このシナリオで誰かが私を助けてくれますか?
このサービスhttp://restcountries.eu/rest/v1/
を呼び出すと、いくつかの国の情報が表示されます。
しかし、フィンランドなどの特定の国の情報を取得したい場合は、http://restcountries.eu/rest/v1/name/Finland
としてWebサービスを呼び出し、国に関連する情報を取得します。
上記のシナリオを自動化するには、国名をRest-Assuredでパラメーター化する方法を教えてください。以下を試しましたが、役に立ちません。
RestAssured.given().
parameters("name","Finland").
when().
get("http://restcountries.eu/rest/v1/").
then().
body("capital", containsString("Helsinki"));
ドキュメントが説明するように:
RESTアシュアードは、HTTPメソッドに基づいて、どのパラメータータイプ(クエリまたはフォームパラメーター)かを自動的に判断しようとします。 GETの場合はクエリパラメータが自動的に使用され、POSTの場合はフォームパラメータが使用されます。
しかし、あなたの場合、クエリパラメータの代わりにパスパラメータが必要なようです。国を取得するための一般的なURLは_http://restcountries.eu/rest/v1/name/{country}
_であり、_{country}
_は国名であることに注意してください。
次に、パスパラメータを転送する方法も複数あります。
ここにいくつかの例があります
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"));
_
変数を使用した例:
_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"));
_
別のサービスを呼び出す必要がある場合は、次のように「サービス」をパラメータ化することもできます。
_// 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"));
_
JUnit @RunWith(Parameterized.class)
を使用して、単体テストのパラメーター「svc」と「value」を簡単に入力することもできます。
GET呼び出しを誤って呼び出しています。
parameters("name","Finland")
はqueryパラメーターまたはformパラメーターとしてのみ変換されます[〜#〜] get [〜#〜]およびPOST/PUTそれぞれ
RestAssured.when().
get("http://restcountries.eu/rest/v1/name/Finland").
then().
body("capital", containsString("Helsinki"));
唯一の方法です。 Java DSLなので、自分でURLを作成し、必要に応じてget()に渡すことができます
GETリクエストを含むURLが同じ詳細をフェッチする必要がある場合、次のようになります。
http://restcountries.eu/rest/v1?name=フィンランド 、
あなたのDSLは次のようなものです:
RestAssured.given().parameters("name","Finland").
when().
get("http://restcountries.eu/rest/v1")
GETリクエストがあると、パラメーターがqueryParameters
に変換されます。
このリンクの詳細: https://code.google.com/p/rest-assured/wiki/Usage#Parameters
parametersメソッドは非推奨になり、paramsの使用を開始します。
例:RestAssured.given().params("name","Finland")
パラメータ化を実現するために、pathParam(String arg0、Object arg1)を間違いなく使用できます。データの提供に@DataProviderを使用する場合は、以下の例を使用してください。
これにより、DataProviderを使用して複数のデータを提供できるほか、Apache POIを使用してExcelシートからデータを取得することもできます。
@DataProvider(name="countryDataProvider")
public String[][] getCountryData(){
String countryData[][] = {{"Finland"}, {"India"}, {"Greenland"}};
return (countryData);
}
@Test(dataProvider="countryDataProvider")
public void getCountryDetails(String countryName){
given().
pathParam("country", countryName).
when().
get("http://restcountries.eu/rest/v1/name/{country}").
then().
assertThat().
.body("capital", containsString("Helsinki"));
}
リクエストの仕様を定義できます(たとえば、@Before
) 最初:
RequestSpecification requestSpecification = new RequestSpecBuilder()
.setBaseUri (BASE_URL)
.setBasePath (BASE_PATH)
.addPathParam(
"pathParamName", "pathParamValue",
"anotherPathParamName", "anotherPathParamValue")
.addQueryParam(
"queryparamName", "queryParamValue",
"anotherQueryParamName", "anotherQueryParamValue")
.setAuth(basic(USERNAME, PASSWORD))
.setContentType(ContentType.JSON)
.setAccept(ContentType.JSON)
.log(LogDetail.ALL)
.build();
次のように複数回再利用します。
given()
.spec(requestSpecification)
.get("someResource/{pathParamName}/{anotherPathParamName}")
.then()
.statusCode(200);
要求仕様は、どこにでも再構築できます。そして、いくつかの変更が発生した場合、1つの場所で簡単にパラメーター名を変更できます。
お役に立てば幸いです。