
com.automationrockstars.bmo.AllureCucumberPlugin Maven / Gradle / Ivy
/*******************************************************************************
* Copyright (c) 2015, 2016 Automation RockStars Ltd.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Apache License v2.0
* which accompanies this distribution, and is available at
* http://www.apache.org/licenses/LICENSE-2.0
*
* Contributors:
* Automation RockStars - initial API and implementation
*******************************************************************************/
package com.automationrockstars.bmo;
import java.lang.reflect.Field;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.base.Strings;
import com.google.common.collect.Maps;
import cucumber.api.StepDefinitionReporter;
import cucumber.runtime.StepDefinitionMatch;
import gherkin.formatter.Argument;
import gherkin.formatter.Formatter;
import gherkin.formatter.Reporter;
import gherkin.formatter.model.Feature;
import gherkin.formatter.model.Match;
import gherkin.formatter.model.Result;
import gherkin.formatter.model.Scenario;
import gherkin.formatter.model.Step;
/**
* Created by Hannah on 11/06/2016.
*/
public class AllureCucumberPlugin extends AbstractCucumberPlugin implements Formatter, StepDefinitionReporter, Reporter {
private static final GenericAllureStoryReporter reporter = new GenericAllureStoryReporter();
private static final Logger LOG = LoggerFactory.getLogger(AllureCucumberPlugin.class);
private static final ThreadLocal featureUri = new ThreadLocal<>();
@Override
public void uri(String uri) {
featureUri.set(uri);
}
@Override
public void feature(Feature feature) {
LOG.info("Starting feature {}",feature.getName());
reporter.beforeStory(feature.getName(), feature.getDescription(), featureUri.get());
}
private static String scenarioName(Scenario scenario){
String name = scenario.getName();
if (Strings.isNullOrEmpty(name)){
name = scenario.getDescription().replaceAll("\\n", "").replaceAll("\\r", "");
}
return name;
}
// @Override
public void startOfScenarioLifeCycle(Scenario scenario) {
LOG.info("Starting scenario {}",scenarioName(scenario));
reporter.beforeScenario(scenarioName(scenario));
}
// @Override
public void endOfScenarioLifeCycle(Scenario scenario) {
LOG.info("Finished scenario {}",scenarioName(scenario));
reporter.afterScenario();
};
@Override
public void done() {
LOG.info("Generating report");
GenericAllureStoryReporter.generateReport();
LOG.info("Report generated. Test done");
}
@Override
public void eof() {
LOG.info("Story finished");
reporter.afterStory();
}
@Override
public void before(Match match, Result result) {
LOG.info("BEFORE {} {} {}",match.getLocation(), match.getArguments(),result.getStatus());
}
private static final ThreadLocal currentStep = new ThreadLocal<>();
@Override
public void result(Result result) {
switch (result.getStatus()){
case Result.PASSED :
reporter.successful(toName(currentStep.get()));
break;
case Result.FAILED:
reporter.failed(toName(currentStep.get()), result.getError());
break;
case "skipped" :
reporter.ignorable(toName(currentStep.get()));
break;
}
LOG.info("Step {} finished with result {}",toName(currentStep.get()),result.getStatus());
}
private static String toName(Match match){
if (match instanceof StepDefinitionMatch){
Field stepField;
try {
stepField = StepDefinitionMatch.class.getDeclaredField("step");
stepField.setAccessible(true);
Step step = (Step) stepField.get(match);
return step.getKeyword() + " " + step.getName();
} catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
}
return (match != null && match.getLocation()!=null)?match.getLocation():"unknown";
}
@Override
public void match(Match match) {
Map args = Maps.newHashMap();
for (Argument arg : match.getArguments()){
args.put(arg.getOffset().toString(), arg.getVal());
}
reporter.example(args);
reporter.beforeStep(toName(match));
currentStep.set(match);
LOG.info("Startin step {} {}",match.getLocation(), match.getArguments());
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy