(журнал) Просмотр файлов с помощью citrus-framework
Есть ли способ и / или как лучше всего просматривать файлы журналов из тестируемой системы? Мое требование заключается в проверке наличия / отсутствия записей журнала в соответствии с известными шаблонами, создаваемыми SUT.
Большое спасибо!
1 ответ
Ну, я не думаю, что есть инструмент Citrus, специально разработанный для этого. Но я думаю, что это действительно хорошая идея. Вы можете открыть вопрос и попросить эту функцию.
Между тем, вот решение, которое мы использовали в одном из наших проектов, чтобы проверить, содержат ли журнал приложений конкретные строки, которые были сгенерированы нашим тестом.
sleep(2000),
echo("Searching the log..."),
new AbstractTestAction() {
@Override
public void doExecute(TestContext context) {
try {
String logfile = FileUtils.getFileContentAsString(Paths.get("target", "my-super-service.log").toAbsolutePath().normalize());
if (!logfile.contains("ExpectedException: ... | Details: BOOM!.")) {
throw new RuntimeException("Missing exceptions in log");
}
} catch (IOException e) {
throw new RuntimeException("Unable to get log");
}
}
}
ИЛИ вы можете заменить это простое содержимое более элегантным решением:
String grepResult = grepForLine(LOGFILE_PATH, ".*: SupermanMissingException.*");
if (grepResult == null) {
throw new RuntimeException("Expected error log entry not found");
}
Функция перебирает каждую строку в поисках совпадения с предоставленным регулярным выражением.
public String grepForLine(Path path, String regex) {
Pattern regexp = Pattern.compile(regex);
Matcher matcher = regexp.matcher("");
String msg = null;
try (
BufferedReader reader = Files.newBufferedReader(path, Charset.defaultCharset());
LineNumberReader lineReader = new LineNumberReader(reader)
) {
String line;
while ((line = lineReader.readLine()) != null) {
matcher.reset(line); //reset the input
if (matcher.find()) {
msg = "Line " + lineReader.getLineNumber() + " contains the error log: " + line;
}
}
} catch (IOException e) {
throw new RuntimeException(e);
}
return msg;
}