web-dev-qa-db-ja.com

Rest-Assuredにパラメーターを渡す方法

このシナリオで誰かが私を助けてくれますか?

このサービス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"));
7
Uday

ドキュメントが説明するように:

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」を簡単に入力することもできます。

16
рüффп

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

1
Karthik R

parametersメソッドは非推奨になり、paramsの使用を開始します。

例:RestAssured.given().params("name","Finland")

0
Aruna

パラメータ化を実現するために、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"));
    }
0
Atul

リクエストの仕様を定義できます(たとえば、@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つの場所で簡単にパラメーター名を変更できます。

お役に立てば幸いです。

0
Julian Kolodzey