Integrate Allure Reports

In this lesson, you'll learn how to integrate Allure reporting to our project and produce visually appealing test reports.

What is Allure?

Allure Framework is a flexible and lightweight test reporting tool that shows a very concise representation of test execution in a very intuitive web report.

Installing Allure via command line

Mac

brew install allure

Linux

sudo apt-add-repository ppa:qameta/allure
sudo apt-get update 
sudo apt-get install allure

Windows

To install scoop, follow the link.

scoop install allure

Manual installation

Alternatively, we can download the latest Allure command-line binary from link, extract, and add to classpath.

Mac / Linux

export PATH=$PATH:</path/allure/bin>

Windows

set PATH=%PATH%;<\path\allure\bin>;

Adding dependency

Gradle (in build.xml)

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath "io.qameta.allure:allure-gradle:2.8.1"
    }
}

plugins {
    id 'io.qameta.allure'
}

def allure_version = '2.13.1'

allure {
    version = allure_version
    autoconfigure = true
    aspectjweaver = true
    clean = true
    allureJavaVersion = allure_version
    resultsDir = file('test-output/allure-results')
    reportDir = file('test-output/allure-reports')
   downloadLink = "https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/${allure_version}/allure-commandline-${allure_version}.zip"
}

Opening Allure report

./gradlew allureServe

Maven (in pom.xml)

<properties>
    <aspectj.version>1.9.5</aspectj.version>
</properties>

<dependencies>
    <dependency>
        <groupId>io.qameta.allure</groupId>
        <artifactId>allure-testng</artifactId>
        <version>2.13.1</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.2</version>
            <configuration>
                <testFailureIgnore>false</testFailureIgnore>
                <argLine>
                    -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
                </argLine>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.aspectj</groupId>
                    <artifactId>aspectjweaver</artifactId>
                    <version>${aspectj.version}</version>
                </dependency>
            </dependencies>
        </plugin>
        <plugin>
            <groupId>io.qameta.allure</groupId>
            <artifactId>allure-maven</artifactId>
            <version>2.10.0</version>
            <configuration>
                <reportVersion>2.13.1</reportVersion>
            </configuration>
        </plugin>
    </plugins>
</build>

Opening Allure report

mvn allure:serve

Understanding Allure

Allure has few annotations for marking the life cycle of test execution.

  • @Step
  • @Attachment

@Step

Any action that constitutes a testing scenario is marked with @Step.

@Step("opening base url")
public void openUrl(String url) {
    ....
}

Here, by default, the name of the step will be taken if the name parameter is not mentioned in @Step. We can also have placeholders too in the name parameter. For more information, please follow the link.

This can also be done programmatically, using the below code.

import static io.qameta.allure.util.AspectUtils.getName;
import static io.qameta.allure.util.AspectUtils.getParameters;
import static io.qameta.allure.util.ResultsUtils.getStatus;
import static io.qameta.allure.util.ResultsUtils.getStatusDetails;
import io.qameta.allure.AllureLifecycle;
import io.qameta.allure.Step;
import io.qameta.allure.model.Parameter;
import io.qameta.allure.model.Status;
import io.qameta.allure.model.StepResult;
import io.qameta.allure.Allure;

public void openBaseUrl() {
    
    StepResult result = new StepResult().setName("open base url");
    Allure.getLifecycle().startStep(UUID.randomUUID().toString(), result);
    try {
        ...
        ...
        getLifecycle().updateStep(s -> s.setStatus(getStatus(e).orElse(Status.PASSED));
    } catch(Exception e) {
        getLifecycle().updateStep(s -> s.setStatus(getStatus(e).orElse(Status.BROKEN));
        throw e;
    }
    
}

@Attachment

The below method annotated with @Attachment should return either a String or byte[]. For attaching a file to the report, do as follows:

@Attachment(value = "adding log", type = "text/plain")
public String addAttachment() {
    return "hello";
}

Alternatively, for doing the same programmatically without using @Attachment annotation, do as follows:

public void openBaseUrl() {
    ...........
    Allure.getLifecycle().addAttachment("adding log", "text/plain", ".txt", "hello");
    
}

Multiple overloaded methods are also available. Please follow the link for more information.

Additionally, please follow the link for more comprehensive information about Allure.

Sample report

Following is a sample report generated by Allure framework:

Get hands-on with 1400+ tech skills courses.