Ребята, привет!
Столкнулась с такой проблемой, может кто подскажет, как решить.
Автоматизирую АРІ тести, и со временем их количество виросло к 800+. В каждом тесте один и тот же ендпоинт визиваеться 3-5 раз (e.g. my-host/createUser, my-host/createOrder, my-host/payOrder, my-host/deleteUser и т.д.)
АРІ SLA предвидит “5 failed tests from 10,000 requests sent”, но по факту тестов, которие падают из 504 ошибкой намного больше (24 из 876 - количество ендпоинт колов - в среднем до 5 тис, то есть по SLA должно било би упасть не больше 2-3 тестов). Девелопери фиксать ето не собираються (только пожалуйста не спрашивайте почему - зарубились, и нет, мол, ето не ошибка - делай что-то на своей стороне. Ну что ж, challenge accepted). Поетому я решила добавить лисенер для тестов, что б отловить количество таких 5хх тестов.
Проблема в том, что я никогда не встречала подобний лисенер и, к сожалению, не удалось нагуглить рабочий вариант.
В нашем фреймворке (Java + TestNG+ RestAssured) есть стандартний onTestFailure(ITestResult result) метод. Я нашла еще отдельний RestAssured лисенер:
public void onFailure(RequestSpecification requestSpecification, ResponseSpecification responseSpecification, Response response) {
if(String.valueOf(response.statusCode()).startsWith("5")){
log.info("Test failed with 5xx error: " + response.statusCode());
// RestAssured.config = config().failureConfig(failureConfig().with().failureListeners(validationFailureListener));
}
}
ResponseValidationFailureListener validationFailureListener = (reqSpec, respSpec, resp) -> {
final ResponseSpecificationImpl respSpecImpl = (ResponseSpecificationImpl) respSpec;
final LogRepository logRepo = respSpecImpl.getLogRepository();
final String requestLog = logRepo.getRequestLog();
//process requestLog
final ByteArrayOutputStream outStream = new ByteArrayOutputStream();
try {
outStream.write(requestLog.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
// put it back
logRepo.registerRequestLog(outStream);
respSpecImpl.setLogRepository(logRepo);
};
Не знаю, есть
ли мне смисл использовать дополнительний код в validationFailureListener, так-как простого значения статус кода било би достаточно. Но, дело в том, что нет возможности добавить RestAssured лисенери к onTestFailure методу, так-как Override не отработает тогда:
onTestFailure(ITestResult result, RequestSpecification requestSpecification, ResponseSpecification responseSpecification, Response response) - не подходит :(
Может есть какой-нибудь способ обьеденить RestAssured и TestNG методи, что можно било использовать onTestFailure метод. Если же ви видите иной способ решения етой задачи - поделитесь пожалуйста
Заранее всем благодарна!