Мне нужно регистрировать гарантированный трафик. Делаю это с помощью: when().post().then().log().all().extract().response();
Теперь, когда остальные сообщения помещаются в стандартный вывод, но я хочу, чтобы эти сообщения регистрировались в отчете о огурцах в вызове AfterAll() через scenario.write().
Как сохранить журналы с уверенностью в переменной и передать ее в scenario.write()?




Вы можете использовать классы RequestLoggingFilter и ResponseLoggingFilter. Предоставьте настроенный 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");
Или вы также можете реализовать интерфейс Фильтр, чтобы использовать свой собственный. Вот пример регистрации как запроса, так и ответа:
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");
Это сработало, теперь мне нужно выяснить, как я могу разделить части запроса и ответа. Rest регистрирует ответ прямо в следующей строке, где заканчивается запрос. Есть ли способ вставить строку, полную *********?
@ HudBud108 Вы можете реализовать свой собственный фильтр и настроить там вывод. Я обновил ответ примером. Поскольку я не работал с огурцом, в этом примере используется регистратор для отображения вывода.
bhusak спасибо и вопрос - Будет ли в этом случае отображаться std out как вход в регистратор? Я в основном хочу, чтобы журнал и стандартный вывод выглядели одинаково.
@ HudBud108 В зависимости от того, какую библиотеку ведения журналов вы используете, можно настроить несколько приложений. В результате логи могут уходить в sdtout, файл и т.д.
Я реализовал, как вы указали, но теперь мне не хватает потока вывода и потока ввода, так как нет фильтра регистрации запросов и ответов, который я передаю ??
Нам нужно будет преобразовать первый ответ в строку, а затем использовать эту ссылку на строку в журналах или в сценарии. Я пытаюсь объяснить в приведенном ниже коде -
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.
как вы регистрируете детали запроса? Не тот, который вы вставили, а тот, который, будьте уверены, вставит провод?
OutputStream outputStream = new ByteArrayOutputStream(); PrintStream printStream = новый PrintStream (outputStream, true); RequestLoggingFilter requestLoggingFilter = новый RequestLoggingFilter (printStream); ResponseLoggingFilter responseLoggingFilter = новый ResponseLoggingFilter (printStream); restAssuredResponseImpl = (RestAssuredResponseImpl) RestAssured.given().filters(requestLoggingFilter, responseLoggingFilter).log().all(). when().get().then().log().all().extract().response(); this.setResponseDataJson(restAssuredResponseImpl); Строка logDetail = printStream.toString();