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

时间:2017-11-18 13:26:15

标签: karate

我们有一个场景,我们必须发布一个json请求,然后在UI中验证一些操作。所以我们有一个空手道特征文件来命中一个请求,之后我们从特征文件中调用一个java类。 java类将运行我们的Selenium Webdriver测试。在java方法中,我们只有很少的断言/信息消息,我们想要回到空手道报告。

我们可以通过空手道将这些消息从我的Java类写入空手道测试报告吗?

3 个答案:

答案 0 :(得分:2)

如果你使用空手道parallel runner,它会收集记录到包裹com.intuit.karate的任何内容,然后会显示在cucumber-html-report

所以你可以试试using the same slf4j Logger - 它可能有效。

更好的方法可能是从Java代码中获取return a Map back to Karate,并提供记录所需的所有信息。然后,您只需使用print关键字即可。我实际上会推荐这种方法,它应该不那么复杂,并且它不假设您使用的是Cucumber HTML报告。您甚至可以使用JSON上的match关键字来执行Karate断言,请参阅此示例:dogs.feature

答案 1 :(得分:1)

我们确实尝试回溯到“com.intuit.karate”,如下所示,并记录到'overview-features.html'报告

Java类中的记录器:

private static final Logger 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类中记录的所有信息。两者在报告中看起来都是两个不同的部分,请在此处查看报告https://www.screencast.com/t/bBhAIj7WKj

在上面的情况下,可以在我们记录“调用Chrome”的行之后抛出异常,我认为这样可以更容易地从报告中识别测试失败。如果可能的话,请告诉我们

答案 2 :(得分:1)

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