当前位置: 首页 > 知识库问答 >
问题:

通过 Junit 执行测试时生成 Serenity 聚合报告

龚远
2023-03-14

我正在使用Junit运行cucumber宁静测试:

代码片段:

    JUnitCore engine = new JUnitCore();
    engine.addListener(new TextListener(System.out));
    engine.run(featureClass);

对于每个测试执行,都会生成单独的html报告,但不会直接使用HtmlAggregate StoryReport生成聚合(组合)报告(参考:https://github.com/serenity-bdd/serenity-core/issues/244)

这是我使用的代码片段,它被挂起并且聚合未完成。在所有cucumber宁静测试完成后,我打电话给:

        HtmlAggregateStoryReporter reporter = new HtmlAggregateStoryReporter("PoC-Test");          
        File sourceDirectory = new File("C:\\PoC-Test\\target\\site\\serenity\\");
        reporter.setSourceDirectory(sourceDirectory);
  reporter.generateReportsForTestResultsFrom(reporter.getSourceDirectory());

C:\PoC-Test\Target\site\serenity\是生成单个测试报告的位置,您能帮我找出这段代码中的错误吗?

请分享任何示例工作代码,如果有的话?

共有2个答案

沈永新
2023-03-14

HtmlAggregateStoryReporter-生成HTML形式的聚合验收测试报告。从输出目录读取所有报告,生成汇总结果的聚合HTML报告。此类连接到JIRA并在报告中生成需求选项卡。

类的源代码=

此类要求:

    < li >来源目录:修昔底德测试报告从此处读取 < li >输出目录:汇总报告在此生成 < li>jira详细信息 < ul > < li>issueTrackerUrl:用于生成问题编号链接的问题跟踪系统的Url。 < Li > jiraUrl:JIRA的基本Url,如果您使用JIRA作为您的问题跟踪系统,如果您指定此属性,则不需要指定issueTrackerUrl。 < li>jira用户名

代码片段:

private void generateHtmlStoryReports() throws IOException {
        getReporter().setSourceDirectory(sourceOfTestResult());
        getReporter().setOutputDirectory(outputDirectory);
        getReporter().setIssueTrackerUrl(issueTrackerUrl);
        getReporter().setJiraUrl(jiraUrl);
        getReporter().setJiraProject(jiraProject);
        getReporter().setJiraUsername(jiraUsername);
        getReporter().setJiraPassword(jiraPassword);
        getReporter().generateReportsForTestResultsFrom(sourceOfTestResult());
    }

完整代码:(引用自massapi)

import net.thucydides.core.Thucydides;
import net.thucydides.core.ThucydidesSystemProperty;
import net.thucydides.core.guice.Injectors;
import net.thucydides.core.reports.html.HtmlAggregateStoryReporter;
import net.thucydides.core.util.EnvironmentVariables;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;

import java.io.File;
import java.io.IOException;
import java.util.Locale;

/**
* Generate aggregate XML acceptance test reports.
x *
*/
@Mojo(name = "aggregate", requiresProject = false)
public class ThucydidesAggregatorMojo extends AbstractMojo {

    /**
     * Aggregate reports are generated here
     */
    @Parameter(property = "thucydides.outputDirectory", defaultValue = "${project.build.directory}/site/thucydides", required=true)
    public File outputDirectory;

    /**
     * Thucydides test reports are read from here
     */
    @Parameter(property = "thucydides.source", defaultValue = "${project.build.directory}/site/thucydides", required=true)
    public File sourceDirectory;

    /**
     * URL of the issue tracking system to be used to generate links for issue numbers.
     */
    @Parameter
    public String issueTrackerUrl;

    /**
     * Base URL for JIRA, if you are using JIRA as your issue tracking system.
     * If you specify this property, you don't need to specify the issueTrackerUrl.
     */
    @Parameter
    public String jiraUrl;

    @Parameter
    public String jiraUsername;

    @Parameter
    public String jiraPassword;

    /**
     * JIRA project key, which will be prepended to the JIRA issue numbers.
     */
    @Parameter
    public String jiraProject;

    /**
     * Base directory for requirements.
     */
    @Parameter
    public String requirementsBaseDir;

    EnvironmentVariables environmentVariables;

    /**
     * Thucydides project key
     */
    @Parameter(property = "thucydides.project.key", defaultValue = "default")
    public String projectKey;

    protected void setOutputDirectory(final File outputDirectory) {
        this.outputDirectory = outputDirectory;
    }

    protected void setSourceDirectory(final File sourceDirectory) {
        this.sourceDirectory = sourceDirectory;
    }

    public void prepareExecution() {
        if (!outputDirectory.exists()) {
            outputDirectory.mkdirs();
        }
        configureEnvironmentVariables();
    }

    private EnvironmentVariables getEnvironmentVariables() {
        if (environmentVariables == null) {
            environmentVariables = Injectors.getInjector().getProvider(EnvironmentVariables.class).get() ;
        }
        return environmentVariables;
    }

    private void configureEnvironmentVariables() {
        Locale.setDefault(Locale.ENGLISH);
        updateSystemProperty(ThucydidesSystemProperty.THUCYDIDES_PROJECT_KEY.getPropertyName(), projectKey, Thucydides.getDefaultProjectKey());
        updateSystemProperty(ThucydidesSystemProperty.THUCYDIDES_TEST_REQUIREMENTS_BASEDIR.toString(),
                             requirementsBaseDir);
    }

    private void updateSystemProperty(String key, String value, String defaultValue) {
        if (value != null) {
            getEnvironmentVariables().setProperty(key, value);
        } else {
            getEnvironmentVariables().setProperty(key, defaultValue);
        }
    }

    private void updateSystemProperty(String key, String value) {
        if (value != null) {
            getEnvironmentVariables().setProperty(key, value);
        }
    }

    private HtmlAggregateStoryReporter reporter;

    protected void setReporter(final HtmlAggregateStoryReporter reporter) {
        this.reporter = reporter;
    }

    public void execute() throws MojoExecutionException {
        prepareExecution();

        try {
            generateHtmlStoryReports();
        } catch (IOException e) {
            throw new MojoExecutionException("Error generating aggregate thucydides reports", e);
        }
    }

    protected HtmlAggregateStoryReporter getReporter() {
        if (reporter == null) {
            reporter = new HtmlAggregateStoryReporter(projectKey);
        }
        return reporter;

    }

    private void generateHtmlStoryReports() throws IOException {
        getReporter().setSourceDirectory(sourceOfTestResult());
        getReporter().setOutputDirectory(outputDirectory);
        getReporter().setIssueTrackerUrl(issueTrackerUrl);
        getReporter().setJiraUrl(jiraUrl);
        getReporter().setJiraProject(jiraProject);
        getReporter().setJiraUsername(jiraUsername);
        getReporter().setJiraPassword(jiraPassword);
        getReporter().generateReportsForTestResultsFrom(sourceOfTestResult());
    }

    private File sourceOfTestResult() {
        if ((sourceDirectory != null) && (sourceDirectory.exists())) {
            return sourceDirectory;
        } else {
            return outputDirectory;
        }

    }
}
卫财
2023-03-14

您是否将 Serenty 的总体目标添加到您的构建中?您使用的是哪种构建工具?

这是一个应该适用于Maven的解决方案:

  1. serenity:聚合目标添加到您的调用语句中。这将运行您的构建并执行报告的聚合。例如:

mvn test -Dserenity.outputDirectory=C:/PoC-Test/target/site/serenity serenity:aggregate

或者

< code > mvn serenity:aggregate-d serenity . output directory = C:/PoC-Test/target/site/serenity

 类似资料:
  • 是否可以在测试仍在执行时生成报告。通过潘丁 我的pom.xml是这样的 如果我设置<代码>

  • 这与我自己的Runner和Filter类以及注释一起,意味着我可以在一个单独的类中运行一个单独的测试,如下所示: 这在Jenkins中也是非常好的,我也能够并行运行测试。我遇到的问题是,每个类的报告在每个方法运行后都会被覆盖。 例如,上面的命令将生成一个文件test-classwithtests.xml,其中包含关于TestMethod的结果和输出的信息。但是,如果我跑

  • 在示例空手道测试项目中,我们有一个功能文件和一个runner类。 尝试使用下面的命令通过命令行执行测试 抛出以下错误... [信息]-------------------------------------------------------------[信息]生成失败[信息]-------------------------------------------------------------

  • 问题内容: 我有一个数据集,其中包含对频率为2分钟的几周的观察。我想将时间间隔从2分钟增加到5分钟。问题在于,观察的频率并不总是相同的。我的意思是,从理论上讲,每10分钟应进行5次观察,但通常情况并非如此。请让我知道如何根据平均功能以及观察的时间和日期汇总观察。换句话说,基于每5分钟的汇总,而对于每5分钟的时间间隔,观察次数却不同。此外,我有时间戳格式的日期和时间。 示例数据: 预期成绩: 问题答

  • 我的量角器套件里有15个规格。我想要并行运行这些脚本,并且,想要在这次执行中生成统一的报告。 通过在配置文件中添加标记“shard testfiles:true”,我可以并行运行这些脚本。但是,我不能得到合并报告(只能在报告中得到最后执行的spec的结果)。

  • 我正试图利用Jenkins中的“发布JUnit测试结果报告”,但无法让它为我的android测试项目工作。我在Jenkins的android测试项目的设置基于以下指南:https://wiki.jenkins-ci.org/display/Jenkins/building+an+android+app+和+test+project 我希望有人能发布一个简单的逐步指南,说明如何从测试运行中获得JUn