当URL中未提及参数变量时,RestAssured忽略NoParameterValue异常

问题描述 投票:0回答:1

我已经定义了带有某些RequestSpecification的全局pathParams,并在所有请求中都使用了规范。但是,并不是全局规范中使用的所有参数都会在请求中使用。假设我在globalSpec中提到了3,在某些请求中我只需要2个参数,而在1个和0个参数中。

但是Rest-Assured抛出NoParameterValue异常

Invalid number of path parameters. Expected 1, was 2. Redundant path parameters are: customerOrderId=io.restassured.internal.NoParameterValue@753b84c6.

java.lang.IllegalArgumentException:无效数量的路径参数。预期为1,为2。冗余路径参数为

是否有任何可用于使您放心的内置配置/忽略机制不会引发异常?

样本代码

import io.restassured.builder.RequestSpecBuilder;
import io.restassured.http.ContentType;
import io.restassured.specification.RequestSpecification;

import static io.restassured.RestAssured.given;

public class TestRestAssuredParams {


    private RequestSpecification defaultRequestSpec = new RequestSpecBuilder()
            .addPathParams(
                    "env", "value1",
                    "customer", "value2",
                    "order", "value3"
            )
            .setContentType(ContentType.JSON)
            .build();


    private void reqWithNoParam() {
        given()
                .spec(defaultRequestSpec)
                .get("https://www.testapi.com/dev");

    }

    private void reqWith1Param() {
        given()
                .spec(defaultRequestSpec)
                .get("https://www.testapi.com/{env}");
    }

    private void reqWith2Param() {
        given()
                .spec(defaultRequestSpec)
                .get("https://www.testapi.com/{env}/{customer}");
    }

    private void reqWith3Param() {
        given()
                .spec(defaultRequestSpec)
                .get("https://www.testapi.com/{env}/{customer}/order/{order}");
    }

    public static void main(String[] args) {
        TestRestAssuredParams testRestAssuredParams = new TestRestAssuredParams();
        testRestAssuredParams.reqWithNoParam();
        testRestAssuredParams.reqWith1Param();
        testRestAssuredParams.reqWith2Param();
        testRestAssuredParams.reqWith3Param();
    }

}

如何确保RestAssured处理上述情况。

RestAssured版本-4.3.0

Java-11.0.5

java rest-assured
1个回答
0
投票

您将必须使用removeParamFilterableRequestSpecification

private void reqWithNoParam() {
    given().filter((requestSpec, responseSpec, ctx) -> {
        requestSpec.removePathParam("env");
        requestSpec.removePathParam("customer");
        requestSpec.removePathParam("order");
        return ctx.next(requestSpec, responseSpec);
    }).spec(defaultRequestSpec).log().all().get("https://www.testapi.com/dev");

}

private void reqWith1Param() {
    given().filter((requestSpec, responseSpec, ctx) -> {
        requestSpec.removePathParam("customer");
        requestSpec.removePathParam("order");
        return ctx.next(requestSpec, responseSpec);
    }).spec(defaultRequestSpec).log().all().get("https://www.testapi.com/{env}");
}

private void reqWith2Param() {
    given().filter((requestSpec, responseSpec, ctx) -> {
        requestSpec.removePathParam("order");
        return ctx.next(requestSpec, responseSpec);
    }).spec(defaultRequestSpec).log().all().get("https://www.testapi.com/{env}/{customer}");
}

private void reqWith3Param() {
    given().spec(defaultRequestSpec).log().all().get("https://www.testapi.com/{env}/{customer}/order/{order}");
}
© www.soinside.com 2019 - 2024. All rights reserved.