将来自 Java Class 的消息记录回空手道报告

Logging Messages from Java Class back to the Karate Report

我们有一个场景,我们必须 post 一个 json 请求,然后验证 UI 中的一些操作。所以我们有一个空手道功能文件,它满足请求,然后我们从功能文件中调用 java class。 java class 将 运行 我们的 Selenium Webdriver 测试。在 java 方法中,我们有几个 Assertions/Info 消息要记录回空手道报告。

空手道中有没有一种方法可以将我的 Java Class 中的这些消息写入空手道测试报告?

如果你使用空手道parallel runner it is designed to collect anything logged to package com.intuit.karate, which will then appear in the cucumber-html-report

所以您可以尝试 using the same slf4j Logger - 它可能会起作用。

更好的方法可能是 return a Map back to Karate from your Java code, with all the information you need to log. Then all you need to do is use the print keyword. I would recommend this approach actually, it should be less complicated and it does not assume that you are using the Cucumber HTML reporting. You could even do Karate asserts with the match keyword on the JSON that you get, refer to this example: dogs.feature.

我们确实尝试登录“com.intuit.karate”,如下所示,并将其登录到“概览-features.html”报告

登录 Java class :

private static final Logger logger = LoggerFactory.getLogger("com.intuit.karate");

但是我们观察到,如果从 java class 中抛出异常,异常将首先出现,然后是所有记录的信息,两者看起来都作为报告中的不同部分。

例如

这是 java class 中带有记录器的示例方法,我正在从功能文件中调用

 public void myTestMethod() {
    logger.info("Starting Test");
    logger.info("Setting path of chrome driver");
    System.setProperty("webdriver.chrome.driver", "chromedriver.exe"); //driver doesnt exist in this path
    logger.info("invoking chrome"); // we would expect the exception to be thrown after this line
    driver = new ChromeDriver();
    logger.info("perform search in google");
    driver.get("http://www.google.com");
    driver.findElement(By.id("lst-ib")).sendKeys("Selenium");
    driver.findElement(By.id("lst-ib")).submit();
    driver.quit();
}

但在报告中首先出现异常,然后是从 java class 记录的所有信息。两者看起来像是报告中的两个不同部分,请在此处查看报告 https://www.screencast.com/t/bBhAIj7WKj

在上述情况下,是否有可能在我们记录“调用Chrome”的行之后抛出异常,我认为这将使从报告中识别测试失败变得更加容易。请让我们知道这是否可行

通过将 karate 对象从 java 脚本文件传递到 java 代码,它对我有用。这样我就可以从 Java 代码中调用 karate.log 函数。这样我就可以看到报告上的消息了。