JBehave + TestNG + Selenium Grid - 在使用单个 jbehave 故事文件时为每个单独的 selenium 节点生成 jbehave index.html 报告文件
JBehave + TestNG + Selenium Grid - generate jbehave index.html report file for each seperate selenium node when using single jbehave story file
我有一个 JBehave 项目,其中需要与使用 github 中的 this, this and this 代码的 TestNG 和 Selenium 网格集成(抱歉,因为我无法通过整个代码,所以只能显示参考) 我已经完成了 JBehave + TestNG + Selenium Grid。
但我的问题是,当使用 单个 Story 文件在不同的 Selenium 节点中执行时,jbehave 报告 index.html
文件仅针对任何一个节点显示。我想在一个或多个 jbehave 报告 index.html 文件中为每个节点单独报告。我不应该 运行 有两个故事文件和所有文件,我如何在单个 jbehave 报告 html 文件中显示每个 Selenium 节点的单独报告。
我知道 jbehave 使用 freemarker 来生成报告,但我不知道如何覆盖它并显示每个 selenium 节点的报告。任何想法请分享。
提前致谢。
终于试了一个办法,现在发现暂时可以解决了。
- 创建一个字符串变量以获取 Story Runner 中的详细信息 Class。
RemoteWebDriver driver = (RemoteWebDriver) DriverManager.getDriver();
String hostname = hng.getHostName(driver.getSessionId());
String browserName = driver.getCapabilities().getBrowserName();
String browserVersion = driver.getCapabilities().getVersion();
- 然后将该值传递给 Story Embedded class,如下所示。
Embedder storyEmbedder = new StoryEmbedder(driver, browserName + "v" + browserVersion);
- 在 Story Embedded class 中分配该字符串值,如下所示
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会是这样
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("%"));
现在我可以有两个基于浏览器和浏览器版本的文件夹。
如果你们有任何更好的答案,请通过张贴帮助。
提前致谢。
我不认为结合 Jbehave 和 TestNG 是更好的主意。 jbehave支持stories,用testng,分组、参数等就没什么用了。现有的 JunitStories class 可以很好地与 Jbehave 配合使用。如果您使用它来组织您的测试结果,您可以为 jbehave (link) 使用定制的 Allure 报告工具。您可以使用 Jbehave + Allure + Selenium Grid 架构。
我有一个 JBehave 项目,其中需要与使用 github 中的 this, this and this 代码的 TestNG 和 Selenium 网格集成(抱歉,因为我无法通过整个代码,所以只能显示参考) 我已经完成了 JBehave + TestNG + Selenium Grid。
但我的问题是,当使用 单个 Story 文件在不同的 Selenium 节点中执行时,jbehave 报告 index.html
文件仅针对任何一个节点显示。我想在一个或多个 jbehave 报告 index.html 文件中为每个节点单独报告。我不应该 运行 有两个故事文件和所有文件,我如何在单个 jbehave 报告 html 文件中显示每个 Selenium 节点的单独报告。
我知道 jbehave 使用 freemarker 来生成报告,但我不知道如何覆盖它并显示每个 selenium 节点的报告。任何想法请分享。
提前致谢。
终于试了一个办法,现在发现暂时可以解决了。
- 创建一个字符串变量以获取 Story Runner 中的详细信息 Class。
RemoteWebDriver driver = (RemoteWebDriver) DriverManager.getDriver();
String hostname = hng.getHostName(driver.getSessionId());
String browserName = driver.getCapabilities().getBrowserName();
String browserVersion = driver.getCapabilities().getVersion();
- 然后将该值传递给 Story Embedded class,如下所示。
Embedder storyEmbedder = new StoryEmbedder(driver, browserName + "v" + browserVersion);
- 在 Story Embedded class 中分配该字符串值,如下所示
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会是这样
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("%"));
现在我可以有两个基于浏览器和浏览器版本的文件夹。
如果你们有任何更好的答案,请通过张贴帮助。 提前致谢。
我不认为结合 Jbehave 和 TestNG 是更好的主意。 jbehave支持stories,用testng,分组、参数等就没什么用了。现有的 JunitStories class 可以很好地与 Jbehave 配合使用。如果您使用它来组织您的测试结果,您可以为 jbehave (link) 使用定制的 Allure 报告工具。您可以使用 Jbehave + Allure + Selenium Grid 架构。