有人可以在这种情况下帮助我:
当我调用此服务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"));
答案 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();