Cucumber\Rest Assured:如何获得请求规格?

Cucumber\Rest Assured:如何获得请求规格?,cucumber,rest-assured,Cucumber,Rest Assured,我有以下步骤: @Given("Request specifications are set with base uri {string}") public void setRequestsSpec(String baseUri){ requestSpecification = new RequestSpecBuilder() .setBaseUri(baseUri) .addFilter(new ResponseLoggingFilte

我有以下步骤:

@Given("Request specifications are set with base uri {string}")
public void setRequestsSpec(String baseUri){

    requestSpecification = new RequestSpecBuilder()
            .setBaseUri(baseUri)
            .addFilter(new ResponseLoggingFilter())//log request and response for better debugging. You can also only log if a requests fails.
            .addFilter(new RequestLoggingFilter())
            .addFilter(new RcAllureFilter())
            .build();
那么我有:

@When("^Azure Login Request Executed$")
public void azureLoginExecuted() {

    response =
    given()  //Add x-www-form-urlencoded body params:
        .spec(testContext().getRequestSpec())
        .formParam(GRANT_TYPE_KEY, GRANT_TYPE_VALUE)
        .formParam(AUTO_TEAM_CLIENT_ID_KEY, AUTO_TEAM_CLIENT_ID_VALUE)
        .formParam(AUTO_TEAM_CLIENT_SECRET_KEY, AUTO_TEAM_CLIENT_SECRET_VALUE)
        .formParam(RESOURCE_KEY, RESOURCE_VALUE)
    .when()
        .post(AUTO_TEAM_TENANT_ID + RESOURCE); //Send the request along with the resource

    setAuthorizationToken();
}
如何从中提取请求的详细信息,如URI、头和参数? 我找不到可以从中提取请求详细信息的类。 在RequestSpecification类中,我几乎找不到这个类中的任何getter函数。 我需要这些值来构建格式化的日志消息。 还有别的办法吗


谢谢。

如果您试图从requestspecification获取详细信息,那么您可以这样使用

RequestSpecification spec = new RequestSpecBuilder().setContentType(ContentType.JSON).addHeader("h1", "h2")
                .build();
        QueryableRequestSpecification queryable = SpecificationQuerier.query(spec);

        System.out.println(" Content is  " + queryable.getContentType());
        System.out.println(" Header is  " + queryable.getHeaders().getValue("h1"));
但在您的场景中,您也需要请求详细信息。所以,最好的方法是使用requestlogging过滤器,它接受PrintStream(反过来可以使用ByteArrayOutPutStream,它可以转换为字符串)。基本思想是,将RequestLoggingFilter与PRintStream一起使用,然后使用任何代码将PRintStream保存为字符串。你也可以使用StringWriter

RequestSpecification spec = new RequestSpecBuilder().build();
    StringWriter requestWriter = new StringWriter();
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    PrintStream printStream = new PrintStream(baos);

    Response response = given().spec(spec).contentType(ContentType.JSON)
            .filter(new RequestLoggingFilter(printStream)).get("https://jsonplaceholder.typicode.com/todos/1");
    printStream.flush();
    System.out.println(baos);

如果您试图从requestspecification获取详细信息,那么您可以这样使用

RequestSpecification spec = new RequestSpecBuilder().setContentType(ContentType.JSON).addHeader("h1", "h2")
                .build();
        QueryableRequestSpecification queryable = SpecificationQuerier.query(spec);

        System.out.println(" Content is  " + queryable.getContentType());
        System.out.println(" Header is  " + queryable.getHeaders().getValue("h1"));
但在您的场景中,您也需要请求详细信息。所以,最好的方法是使用requestlogging过滤器,它接受PrintStream(反过来可以使用ByteArrayOutPutStream,它可以转换为字符串)。基本思想是,将RequestLoggingFilter与PRintStream一起使用,然后使用任何代码将PRintStream保存为字符串。你也可以使用StringWriter

RequestSpecification spec = new RequestSpecBuilder().build();
    StringWriter requestWriter = new StringWriter();
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    PrintStream printStream = new PrintStream(baos);

    Response response = given().spec(spec).contentType(ContentType.JSON)
            .filter(new RequestLoggingFilter(printStream)).get("https://jsonplaceholder.typicode.com/todos/1");
    printStream.flush();
    System.out.println(baos);