Monday 21 June 2021

Junit5: Tags to filter the test cases

Tags are used to filter which tests are executed for a given test plan. For example, you may want to run only performance tests on every release, you can do that by tagging all the performance related tests.

 

In this post, I am going to create three types of test cases.

a.   functional

b.   non-functional

c.    performance

 

FunctionalTest.java

package com.sample.app;

import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;

public class FunctionalTest {

	@Test
	@Tag("functional")
	public void functionalTest1() {
		System.out.println("Executing functionalTest1");
	}
	
	@Test
	@Tag("functional")
	public void functionalTest2() {
		System.out.println("Executing functionalTest2");
	}
}

 

NonFunctionalTest.java

package com.sample.app;

import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;

public class NonFunctionalTest {

	@Test
	@Tag("non-functional")
	public void NonFunctionalTest1() {
		System.out.println("Executing Non-functionalTest1");
	}
	
	@Test
	@Tag("non-functional")
	public void NonFunctionalTest2() {
		System.out.println("Executing Non-functionalTest2");
	}
}

 

PerformanceTest.java

package com.sample.app;

import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;

public class PerformanceTest {
	@Test
	@Tag("performance")
	public void perfTest1() {
		System.out.println("Executing perfTest1");
	}
	
	@Test
	@Tag("performance")
	public void perfTest2() {
		System.out.println("Executing perfTest2");
	}
}

Now, we can use ‘maven-surefire-plugin’ to execute tests based on a tag.

<build>
	<plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-surefire-plugin</artifactId>
			<version>${maven-surefire-plugin.version}</version>
			<dependencies>
				<dependency>
					<groupId>org.junit.platform</groupId>
					<artifactId>junit-platform-surefire-provider</artifactId>
					<version>${junit-platform.version}</version>
				</dependency>
			</dependencies>
			<configuration>
				<properties>
					<includeTags>functional,performance</includeTags>
					<!-- <excludeTags>non-functional</excludeTags> -->
				</properties>
			</configuration>
		</plugin>
	</plugins>
</build>

 

Above snippet executes only functional and performance tests.

 

pom.xml

 

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.sample.app</groupId>
	<artifactId>junit5-tag-filtering</artifactId>
	<version>1</version>

	<properties>
		<junit-jupiter.version>5.6.1</junit-jupiter.version>
		<maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version>
		<junit-platform.version>1.3.2</junit-platform.version>

		<java.version>1.8</java.version>
		<maven.compiler.target>${java.version}</maven.compiler.target>
		<maven.compiler.source>${java.version}</maven.compiler.source>

		<project.encondig>UTF-8</project.encondig>
		<project.build.sourceEncoding>${project.encondig}</project.build.sourceEncoding>
		<project.reporting.outputEncoding>${project.encondig}</project.reporting.outputEncoding>
	</properties>


	<dependencies>
		<dependency>
			<groupId>org.junit.jupiter</groupId>
			<artifactId>junit-jupiter-engine</artifactId>
			<version>${junit-jupiter.version}</version>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<version>${maven-surefire-plugin.version}</version>
				<dependencies>
					<dependency>
						<groupId>org.junit.platform</groupId>
						<artifactId>junit-platform-surefire-provider</artifactId>
						<version>${junit-platform.version}</version>
					</dependency>
				</dependencies>
				<configuration>
					<properties>
						<includeTags>functional,performance</includeTags>
						<!-- <excludeTags>non-functional</excludeTags> -->
					</properties>
				</configuration>
			</plugin>
		</plugins>
	</build>

</project>

 

How to run the tests?

Right click on pom.xml -> Run As -> Maven Test.



In the console, you can confirm that functional and performance tests get executed.

[INFO] Running com.sample.app.FunctionalTest
Executing functionalTest1
Executing functionalTest2
[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.024 s - in com.sample.app.FunctionalTest
[INFO] Running com.sample.app.PerformanceTest
Executing perfTest1
Executing perfTest2
[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 s - in com.sample.app.PerformanceTest
[INFO] 
[INFO] Results:
[INFO] 
[INFO] Tests run: 4, Failures: 0, Errors: 0, Skipped: 0


You can download complete working application from this link.

https://github.com/harikrishna553/junit5/tree/master/junit5-tag-filtering

 

  

Previous                                                    Next                                                    Home

No comments:

Post a Comment