= Filtering Execution and Reports with Tags Serenity BDD makes it easy to get both a broad overview of your test results and functional coverage. But when working with large test suites, it is often useful to be able to focus on specific functional areas of the application when reporting results. For example, you may want to view only the results for the tests related to the current release, or to a specific functional area. In Serenity BDD, you can use tags to generate this kind of focused report. This works very naturally with Cucumber test scenarios. For example, in the following feature file, we have used the `@sprint-2` tag to indicate that the scenario is scheduled for Sprint 2. [source,gherkin] ---- @sprint-2 Scenario: Buyer orders a coffee Given Cathy has a Caffeinate-Me account When she orders a large cappuccino Then Cathy should receive the order ---- Tagging also works with JUnit test, as illustrated here: [source,java] ---- @RunWith(SerenityRunner.class) public class WhenAddingNumbers { @Steps MathWizSteps michael; @Test @WithTag("release:sprint-2") public void addingSums() { // Given michael.startsWith(1); // When michael.adds(2); // Then michael.shouldHave(3); } @WithTagsValuesOf({"Reporting", "release:sprint-3"}) public void testWithMultipleTags() { } } ---- == Running Scenarios by tags Tags are also a great way to help organize test execution. For example, you might want to flag all of the web services tests, or mark certain tests to run against Internet Explorer browser only. With JUnit tests, this can be achieved by providing a single tag or an "or" separated list of tags from command line. If provided, only classes and/or methods with tags in this list will be executed. ---- mvn clean verify -Dtags="feature:Reporting or release:sprint-2" mvn clean verify -Dtags="feature:Reporting or release:sprint-2" ---- When using Cucumber, we need to use the `cucumber.options` property to indicate which scenarios should be executed. For example, the following command runs all of the Cucumber scenarios with the `@sprint-2` tag": ---- mvn clean verify -Dcucumber.options="--tags=@sprint-2" ---- == Excluding Unrelated Requirements By default, when you use the `tags` option, Serenity will filter your requirements as best it can to report only the requirements that are relevant to the specified tag. Requirements filtering only happens if you specify the `tags` option. So this will produce a full set of requirements in the *Requirements* page. ``` $ mvn clean verify -Dcucumber.options="--tags @sprint-2" ``` But this will report only the requirements that are related to the executed tests. ``` $ mvn clean verify -Dcucumber.options="--tags @sprint-2" -Dtags=sprint-2 ``` If you have already run the full set of tests, you can also produce a filtered aggregate report, in which case you don't need to provide the `cucumber.options` property: ``` $ mvn serenity:aggregate -Dtags=sprint-2 ```