Serenity Reports are living documentation that contains meaningful report for each Test. It illustrated, narrative reports that document and describe what your application does and how it works.
This report can be organized by using features, stories, steps, scenarios/tests. Serenity Report shows the count of passed, failed, compromised, skipped, pending, broken, ignored, pending and manual test cases count and percentage. Serenity shows Over All Test Result, Requirements, Test Specifications & Test Result. It shows the details and overall time taken by each test step of a test case. It shows the details and overall timing took by each on all test case execution.
All the above features of Serenity Report make it a great Report. But sometimes, we want to embed data from a JSON or XML file in the Serenity Report.
Let me explain this with the help of an example. Data Driven tests are created in Serenity. We have test data mentioned in a .csv file and the test is reading the data from this file. When the report is generated, it does not show what all data are used by the Test. To overcome this situation, Serenity provides a feature which uses recordReportData(). and this can be used like this:
Path credentialsFile = Paths.get("src/test/resources/testdata/credentials.csv");
Serenity.recordReportData().withTitle(" User Credentials with Error Message")
.fromFile(credentialsFile);
If you have the contents of the report as a String, you can pass the String directly like this:
String testData = "...";
Serenity.recordReportData().withTitle("User")
.andContent(testData);
Let me explain this with the help of an example. Here, I have created a Data Driven Test which is using .csv file as an input file.
@RunWith(SerenityParameterizedRunner.class)
@UseTestDataFrom(value = "testdata/credentials.csv")
public class ParameterizedTestsUsingCSV {
private String userName;
private String passWord;
private String errorMessage;
@Managed(options = "--headless")
WebDriver driver;
@Steps
NavigateActions navigate;
@Steps
StepLoginPage loginPage;
@TestData(columnNames = "Username, Password, ErrorMessage")
@Test
@Title("Login to application with invalid credential generates error message")
public void unsuccessfulLogin() throws IOException {
// Given
navigate.toTheHomePage();
// When
loginPage.inputUserName(userName);
loginPage.inputPassword(passWord);
loginPage.clickLogin();
// Then
Serenity.reportThat("Passing invalid credentials generates error message",
() -> assertThat(loginPage.loginPageErrorMessage()).isEqualToIgnoringCase(errorMessage));
Path credentialsFile = Paths.get("src/test/resources/testdata/credentials.csv");
Serenity.recordReportData().withTitle(" User Credentials with Error Message").fromFile(credentialsFile);
}
}
Here, I have used recordReportData().withTitle() to provide a name to the button created and the data is retried using fromFile().
To locate the path of the file (credentials.csv), we have used – Path and Paths which are imported from:
import java.nio.file.Path;
import java.nio.file.Paths;
To get the complete detail about this code, refer this tutorial Data Driven Tests using CSV file in Serenity.
To generate Serenity Report, use the command like this:
mvn clean verify

The Serenity Reports are generated under target/site/serenity/Index.html.
Go to the Detailed Step Description part in Serenity Report. A button with the label “User Credentials with Error Message” will appear next to the step where you called this method:

If you click on this button, you will see your data:

Keep this in mind that this feature of Serenity is available from 1.9.16 onwards only.
Congratulation!! We have learnt a wonderful feature present in Serenity.