我有一个JBehave项目,需要与TestNG和Selenium网格集成,该项目在github中使用this、this和this代码(很抱歉,因为我无法通过整个代码,所以只显示引用)我已经完成了JBehave+TestNG+Selenium grid。
但我的问题是,当使用单个Story文件在不同的Selenium节点中执行时,jbehave报告index.html
文件仅针对任何一个节点显示。我希望在一个或多个jbehavereportindex.html文件中为每个节点提供单独的报告。我不应该使用两个故事文件运行,如何在单个jbehave report html文件中为每个Selenium节点显示单独的报告。
我知道jbehave在生成报告时使用了freemarker,但我不知道如何覆盖它并为每个selenium节点显示报告。有什么想法请分享。
提前感谢。
我认为将Jbehavior和TestNG结合起来不是一个更好的主意。Jbehavior支持故事,使用testng将没有任何用处,比如分组、参数等。现有的JunitStories类可以很好地与Jbehavior配合使用。如果您使用它来组织测试结果,您可以使用jbehave的自定义诱惑报告工具(链接)。您可以使用Jbehavior+Allure+SeleniumGrid架构。
最后尝试了一种方法,发现它现在是一个临时解决方案。
- 创建一个字符串变量,用于获取Story Runner类中的详细信息
RemoteWebDriver driver = (RemoteWebDriver) DriverManager.getDriver();
String hostname = hng.getHostName(driver.getSessionId());
String browserName = driver.getCapabilities().getBrowserName();
String browserVersion = driver.getCapabilities().getVersion();
- 然后将该值传递给Story Embedded类,如下所示
Embedder storyEmbedder = new StoryEmbedder(driver, browserName + "v" + browserVersion);
- 在Story Embedded类中,指定该String值,如下所示
private WebDriver driver;
private static String name;
public StoryEmbedder(WebDriver driver, String hostname) {
this.driver = driver;
this.name = hostname;
}
- 然后在useStoryReporterBuilder函数内的Configuration方法中添加以下代码
.withRelativeDirectory(name) //where 'name' is the String variable refer above step.
- 类似的回报如下
return new MostUsefulConfiguration()
.useStoryControls(new StoryControls().doDryRun(false).doSkipScenariosAfterFailure(false))
.useStoryLoader(
new LoadFromClasspath(embedderClass))
.useStoryParser(
new RegexStoryParser(
examplesTableFactory))
.useStoryPathResolver(new UnderscoredCamelCaseResolver())
.useStoryReporterBuilder(
new StoryReporterBuilder().withCodeLocation(CodeLocations.codeLocationFromClass(embedderClass))
.withDefaultFormats().withPathResolver(new ResolveToPackagedName())
.withViewResources(viewResources).withReporters(new MyStoryReporter())
.withFormats(Format.CONSOLE, Format.TXT, Format.HTML, Format.XML).withFailureTrace(true)
.withFailureTraceCompression(true).withCrossReference(xref).withRelativeDirectory(name)).useParameterConverters(parameterConverters)
// use '%' instead of '$' to identify parameters
.useStepPatternParser(new RegexPrefixCapturingPatternParser("%"));
现在我可以有两个基于浏览器和浏览器版本的文件夹。
如果你们有更好的答案,请发布出来。提前感谢。