(日志)用柑橘框架

时间:2018-04-26 08:30:03

标签: citrus-framework

是否有方法和/或最佳做法是从受测系统中查看日志文件? 我的要求是根据SUT产生的已知模式验证日志条目的存在/不存在。

非常感谢!

1 个答案:

答案 0 :(得分:0)

好吧,我不认为有专门为此设计的Citrus工具。但我认为这是一个非常好的主意。您可以open an issue并要求此功能。

同时,这是我们在其中一个项目中使用的解决方案,用于检查应用程序日志是否包含由我们的测试生成的特定字符串。

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");
        }
    }
}

OR 您可以使用更优雅的解决方案替换该简单包含:

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;
}