Karate 将Java类的消息记录回空手道报告

Karate 将Java类的消息记录回空手道报告,karate,Karate,我们有一个场景,我们必须发布一个json请求,然后在UI中验证一些操作。因此,我们有一个空手道特性文件,它点击一个请求,然后我们从特性文件中调用一个java类。java类将运行我们的SeleniumWebDriver测试。在java方法中,我们很少有断言/信息消息要记录回空手道报告 在空手道中有没有一种方法可以将这些消息从Java类写入空手道测试报告 如果您使用空手道,它的设计目的是收集记录到包中的任何内容,然后这些内容将显示在 所以你可以尝试一下,也许会奏效 更好的方法可能是只从Java代码中

我们有一个场景,我们必须发布一个json请求,然后在UI中验证一些操作。因此,我们有一个空手道特性文件,它点击一个请求,然后我们从特性文件中调用一个java类。java类将运行我们的SeleniumWebDriver测试。在java方法中,我们很少有断言/信息消息要记录回空手道报告

在空手道中有没有一种方法可以将这些消息从Java类写入空手道测试报告

如果您使用空手道,它的设计目的是收集记录到包中的任何内容,然后这些内容将显示在

所以你可以尝试一下,也许会奏效


更好的方法可能是只从Java代码中获取需要记录的所有信息。然后你需要做的就是使用关键字。我会推荐这种方法,实际上,它应该不那么复杂,并且它不会假设您正在使用HTML报告。您甚至可以使用JSON上的
match
关键字进行空手道断言,请参考此示例:。

我们尝试返回到“com.intuit.Karate”,如下所示,并将其记录到“overview features.html”报告中

Java类中的记录器:

私有静态最终记录器Logger=LoggerFactory.getLogger(“com.intuit.karate”)

然而,我们观察到,如果从java类抛出异常,异常将首先出现,然后是记录的所有信息,这两个异常在报告中看起来都是不同的部分

例如

这是我从功能文件调用的java类中带有logger的示例方法

 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类记录的所有信息。在报告中,两者看起来都是两个不同的部分,请参见此处的报告


在上面的例子中,是否有可能在我们记录“调用Chrome”的那一行之后抛出异常?我认为这将更容易从报告中识别测试失败。请让我们知道这是否可能

它通过将空手道对象从javascript文件传递到java代码来为我工作。有了它,我可以从Java代码中调用
karate.log
函数。这样我可以看到报告上的消息。

请添加适当的标记我们将查看上述建议。@Peter Thomas请提供sl4j logger的更新链接。我无法在CuCumber报告中获取日志。@CVA抱歉,假设不支持此操作。除非此链接有帮助:@PeterThomas刚刚发现了这一点并添加了我花了一段时间才看到的答案,因为我没有收到通知,您可能需要使用不同的方法,例如打开一个新问题就可以了。关于您的请求,这将很难实现,因为在正常情况下,它会导致日志膨胀。您可以执行try-catch并使用error对象添加额外的日志。还可以尝试我建议的第二种方法。使用额外的记录器的try-catch现在解决了我们的问题。我们还将看看你建议的第二种方法。