如何将参数传递给Rest-Assured

时间:2015-09-09 09:28:23

标签: java rest-assured

有人可以在这种情况下帮助我:

当我调用此服务http://restcountries.eu/rest/v1/时,我会收到几个国家/地区的信息。

但是当我想获得像芬兰这样的特定国家/地区信息时,我会调用网络服务http://restcountries.eu/rest/v1/name/Finland来获取与国家/地区相关的信息。

要自动执行上述方案,如何在 Rest-Assured 中参数化国家/地区名称?我在下面试过,但没有帮助我。

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

6 个答案:

答案 0 :(得分:13)

正如文档所述:

  

REST Assured将自动尝试确定哪种参数类型   (即查询或表单参数)基于HTTP方法。的情况下   在POST的情况下,将自动使用GET查询参数   将使用表单参数。

但在您的情况下,您似乎需要路径参数而不是查询参数。 另请注意,获取国家/地区的通用网址为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'和'价值'进行单元测试。

答案 1 :(得分:1)

您正在错误地调用GET调用。

对于 GET POST / PUT <,parameters("name","Finland")只会被转换为查询参数或表单参数/ strong>分别

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=Finland

您的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

答案 2 :(得分:0)

不推荐使用

参数方法并开始使用params。

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

答案 3 :(得分:0)

您可以先定义请求规范(例如@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);

您可以在任意位置重建请求规范。而且,如果发生一些更改,您可以轻松地在一个地方更改参数名称。

希望对您有帮助。

答案 4 :(得分:0)

您绝对可以使用pathParam(String arg0,Object arg1)来实现参数化。如果使用@DataProvider提供数据,请使用以下示例。

这样,您可以使用DataProvider提供多个数据,也可以使用APache POI从Excel Sheet获取数据。

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

答案 5 :(得分:0)

HttpUrl url1 = HttpUrl.parse("https:google.com").newBuilder()
                       .addQueryParameter("search","parameter")
                       .build();