我们有一个场景,我们必须发布一个json请求,然后在UI中验证一些操作。所以我们有一个空手道特征文件来命中一个请求,之后我们从特征文件中调用一个java类。 java类将运行我们的Selenium Webdriver测试。在java方法中,我们只有很少的断言/信息消息,我们想要回到空手道报告。
我们可以通过空手道将这些消息从我的Java类写入空手道测试报告吗?
答案 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
函数。这样我就可以在报告中看到消息。