Создавать сводный отчет Serenity при выполнении тестов через Junit

Я запускаю тесты Cucumber + Serenity с помощью Junit:

Фрагмент кода:

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

Для каждого выполнения теста создается отдельный отчет html, но агрегированный (комбинированный) отчет не создается напрямую с использованием HtmlAggregateStoryReporter (Reffered: https://github.com/serenity-bdd/serenity-core/issues/244)

Вот фрагмент кода, который я использовал, он зависает и агрегация не завершается. Я звоню после завершения всех тестов Cucumber + Serenity:

        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 \ - это место, где создаются отдельные отчеты о тестах. Не могли бы вы помочь мне выяснить, что не так в этом коде?

Поделитесь, пожалуйста, образцом рабочего кода, если есть?


person varunanilgupta    schedule 05.12.2016    source источник
comment
Вы это решили? У меня такая же проблема?   -  person David Roussel    schedule 03.11.2017


Ответы (2)


Вы добавляете aggregate цель Серенти в свою сборку? Какой инструмент сборки вы используете?

Вот решение, которое должно работать для Maven:

Или

  1. Добавьте serenity:aggregate цель в свое заявление о вызове. Это запустит вашу сборку и выполнит агрегирование отчета. Например.:

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

or

  1. Просто позвоните serenity:aggregate после завершения сборки, например:

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

person JDelorean    schedule 06.12.2016
comment
Я не использую mvn для выполнения. Я запускаю тесты Cucumber + Serenity через Java (основной) раннер-класс с помощью функции junitcore, и я хочу вызвать агрегацию из самого кода, то есть из HtmlAggregateStoryReporter API. - person varunanilgupta; 06.12.2016
comment
@JDelorean, это помогает. Как его можно вызвать сразу после того, как ваши тесты завершили выполнение. Я использую Maven. Мне нужно что-нибудь добавить в POM? - person infinite; 25.04.2019
comment
@apun Проверьте шаг №2 в моем ответе. Цель serenity:aggregate будет делать то, что, я думаю, вы ищете. - person JDelorean; 25.04.2019

HtmlAggregateStoryReporter - создает сводный отчет о приемочных испытаниях в форме HTML. Читает все отчеты из выходного каталога для создания сводных отчетов в формате HTML, в которых резюмируются результаты. Этот класс подключается к JIRA и генерирует вкладку требований в отчете.

Исходный код класса => HtmlAggregateStoryReporter.java

Этот класс требует:

  • Исходный каталог: здесь можно прочитать отчеты об испытаниях Фукидида.
  • выходной каталог: здесь создаются сводные отчеты.
  • jira details
    • issueTrackerUrl : URL of the issue tracking system to be used to generate links for issue numbers.
    • jiraUrl: базовый URL-адрес для JIRA, если вы используете JIRA в качестве системы отслеживания проблем. Если вы укажете это свойство, вам не нужно указывать issueTrackerUrl.
    • имя пользователя и пароль jira: учетные данные 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;
        }

    }
}
person Raju    schedule 26.06.2018