如何在scenario.write()中编写REST Assured日志?

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

我需要记录放心的流量 - 通过使用:when().post().then().log().all().extract().response();来做到这一点 现在,将其余消息放入std中,但我希望通过AfterAll()将这些消息记录在scenario.write()调用的黄瓜报告中。 如何将保证的日志保存到变量中并将其传递给scenario.write()

java rest cucumber rest-assured cucumber-java
2个回答
1
投票

你可以使用RequestLoggingFilterResponseLoggingFilter课程。将配置的PrintStream提供给它们的构造函数,并添加过滤器以请求规范。它可以这样看:

OutputStream outputStream = null; //use your OutputStream that will write where you need it

PrintStream printStream = new PrintStream(outputStream, true);

RequestLoggingFilter requestLoggingFilter = new RequestLoggingFilter(printStream);
ResponseLoggingFilter responseLoggingFilter = new ResponseLoggingFilter(printStream);

RestAssured.given()
    .filters(requestLoggingFilter, responseLoggingFilter)
    .when()
    .get("/api");

或者你也可以实现Filter界面来使用你自己的界面。以下是记录请求和响应的示例:

public class CustomLogFilter implements Filter {

  Logger log = LoggerFactory.getLogger(CustomLogFilter.class);

  @Override
  public Response filter(FilterableRequestSpecification requestSpec,
      FilterableResponseSpecification responseSpec, FilterContext ctx) {
    Response response = ctx.next(requestSpec, responseSpec);
    StringBuilder requestBuilder = new StringBuilder();
    requestBuilder.append(requestSpec.getMethod());
    requestBuilder.append("\n");
    requestBuilder.append(requestSpec.getURI());
    requestBuilder.append("\n");
    requestBuilder.append("*************");
    log.info(requestBuilder.toString());  //Log your request where you need it
    StringBuilder responseBuilder = new StringBuilder();
    responseBuilder.append(response.getStatusLine());
    responseBuilder.append("\n");
    responseBuilder.append(response.getBody());
    log.info(responseBuilder.toString()); //Log your response where you need it
    return response;
  }
}

然后在RestAssured请求中使用它:

Filter logFilter = new CustomLogFilter();
RestAssured.given()
    .filter(logFilter)
    .when()
    .get("/api");

0
投票

我们需要将第一个Response转换为String,然后在logs或scenario.write中使用此字符串引用。我想在下面的代码中解释 -

    String responseString, placeid;
    private static Logger log =LogManager.getLogger(basics3.class.getName());
        Properties prop=new Properties();
        @Before
        public void getData() throws IOException
        {
            FileInputStream fis=new FileInputStream(System.getProperty("user.dir")+"//env.properties");
            prop.load(fis);
        }

        @Test
        public void AddandDeletePlace()
        {

            RestAssured.baseURI= prop.getProperty("HOST");
            Response res=given().

            queryParam("key",prop.getProperty("KEY")).
            body(payLoad.getPostData()).
            when().
            post(resources1.placePostData()).
            then().assertThat().statusCode(200).and().contentType(ContentType.JSON).and().
            body("status",equalTo("OK")).
            extract().response();

            responseString=res.asString();
            JsonPath js= new JsonPath(responseString);
            placeid=js.get("place_id");
        }

         @After
         public void setLogs(){
         log.info(responseString);          
         log.info(placeid);
         } 

希望这能为您提供打印REST Assured日志的一些愿景。

© www.soinside.com 2019 - 2024. All rights reserved.