Testng Tutorial
Testng Tutorial
Testng Tutorial
i
TESTNGTUTORIAL
Simply Easy Learning by tutorialspoint.com
tutorialspoint.com
TUTORIALS POINT
Simply Easy Learning
ABOUT THE TUTORIAL
TestNG Tutorial
TestNG is a testing framework inspired from JUnit and NUnit but introducing some new functionalities that
make it more powerful and easier to use.
TestNG is designed to cover all categories of tests: Unit, functional, end-to-end, integration, etc., and it
requires JDK 5 or higher.
This tutorial will give you great understanding on TestNG framework needed to test an enterprise level
application to deliver it with robustness and reliability.
Audience
This tutorial is designed for Software Professionals, who are willing to learn TestNG Framework in simple
and easy steps. This tutorial will give you great understanding on TestNG Framework concepts, and after
completing this tutorial, you will be at intermediate level of expertise from where you can take yourself to
higher level of expertise.
Prerequisites
Before proceeding with this tutorial, you should have a basic understanding of Java programming
language, text editor and execution of programs, etc., because you are going to use TestNG to handle all
levels of Java project testing (Unit, functional, end-to-end, integration, etc.,), so it will be good if you
have knowledge of software development and software testing processes.
Copyright & Disclaimer Notice
All the content and graphics on this tutorial are the property of tutorialspoint.com. Any content from
tutorialspoint.com or this tutorial may not be redistributed or reproduced in any way, shape, or form
without the written permission of tutorialspoint.com. Failure to do so is a violation of copyright laws.
This tutorial may contain inaccuracies or errors and tutorialspoint provides no guarantee regarding the
accuracy of the site or its contents including this tutorial. If you discover that the tutorialspoint.com site
or this tutorial content contains some errors, please contact us at [email protected]
TUTORIALS POINT
Simply Easy Learning
Table of Content
TestNG Tutorial ........................................................................ 2
Audience .................................................................................. 2
Prerequisites ............................................................................ 2
Copyright & Disclaimer Notice .................................................. 2
TestNG - Overview ................................................................... 5
What is TestNG? ....................................................................................... 5
TestNG Features ....................................................................................... 6
TestNG - Environment .............................................................. 7
System Requirement ................................................................................. 7
Step 1 - verify Java installation in your machine ........................................ 7
Step 2: Set JAVA environment .................................................................. 8
Step 3: Download TestNG archive ............................................................ 8
Step 4: Set TestNG environment ............................................................... 9
Step 5: Set CLASSPATH variable ............................................................. 9
Step 6: Test TestNG Setup ........................................................................ 9
Step 7: Verify the Result .......................................................................... 10
TestNG Writing Tests .......................................................... 11
TestNG Basic Annotations .................................................. 15
Benefits of using annotations ................................................................... 16
TestNG Execution Procedure .............................................. 17
TestNG Executing Tests ..................................................... 20
Create a Class ......................................................................................... 20
Create Test Case Class........................................................................... 21
Create testng.xml .................................................................................... 21
TestNG Suite Test ............................................................... 23
Create Test Case Classes ......................................................................... 24
TestNG Ignore Test ............................................................. 27
Create a Class ......................................................................................... 27
Create Test Case Class........................................................................... 28
Create testng.xml .................................................................................... 28
TestNG Group Test ............................................................. 30
Create a Class ......................................................................................... 30
Create Test Case Class........................................................................... 31
Create testng.xml .................................................................................... 32
Groups of groups ..................................................................................... 32
Exclusion groups ..................................................................................... 33
TestNG Exception Test ....................................................... 34
TUTORIALS POINT
Simply Easy Learning
Create a Class ......................................................................................... 34
Create Test Case Class........................................................................... 35
Create Test Runner ................................................................................. 35
TestNG Dependency Test ................................................... 37
Example using attribute dependsOnMethods .......................................... 37
CREATE A CLASS ................................................................................. 37
CREATE TEST CASE CLASS................................................................ 38
CREATE TESTNG.XML ......................................................................... 38
Example using attribute dependsOnGroups ............................................ 39
CREATE A CLASS .................................................................................. 39
CREATE TEST CASE CLASS ................................................................ 39
CREATE TESTNG.XML ......................................................................... 40
dependsOnGroups Vs dependsOnMethods ............................................ 41
TestNG Parameterized Test ................................................ 42
Passing Parameters with testng.xml ........................................................ 42
CREATE TEST CASE CLASS ................................................................ 42
CREATE TESTNG.XML ......................................................................... 43
Passing Parameters with Dataproviders .................................................. 44
EXAMPLE 1 ............................................................................................. 44
CREATE JAVA CLASS ........................................................................... 44
CREATE TEST CASE CLASS ................................................................ 44
CREATE TESTNG.XML ......................................................................... 45
EXAMPLE 2 ............................................................................................ 46
CREATE JAVA CLASS ........................................................................... 46
CREATE TEST CASE CLASS................................................................ 46
CREATE TESTNG.XML ......................................................................... 47
TestNG Run JUnit Tests ..................................................... 48
Create JUnit Test case Class .................................................................. 48
TestNG Test Results ........................................................... 50
TestNG Plug with ANT ........................................................ 60
Step 1: Download Apache Ant ................................................................. 60
Step 2: Set Ant Environment ................................................................... 60
Step 3: Download TestNG Archive .......................................................... 61
Step 4: Create Project Structure .............................................................. 61
Create ANT build.xml............................................................................... 62
TestNG - Plug with Eclipse ..................................................... 64
Step 1: Download TestNG archive .......................................................... 64
Step 2: Set Eclipse environment .............................................................. 64
Step 3: Verify TestNG installation in Eclipse ............................................ 65
TUTORIALS POINT
Simply Easy Learning
TestNG - Overview
T
esting is the process of checking the functionality of the application whether it is working as per
requirements and to ensure that at developer level, unit testing comes into picture. Unit testing is the testing of
single entity (class or method). Unit testing is very essential to every software company to give a quality product to
their customers.
JUnit has driven developers to understand the usefulness of tests, especially of unit tests when compared to any
other testing framework. Leveraging a rather simple, pragmatic, and strict architecture, JUnit has been able to
"infect" great number of developers. Features of JUnit can be seen in Junit Features.
Some of the short comings of JUnit are:
Initially designed to enable unit testing only, now used for all kinds of testing.
Cannot do dependency testing.
Poor configuration control (setUp/tearDown).
Intrusive (forces you to extend classes and name your methods a certain way).
Static programming model (forces you to recompile unnecessarily).
The management of different suites of tests in complex projects can be very tricky..
What is TestNG?
Definition of TestNG as per its documentation is:
TestNG is a testing framework inspired from JUnit and NUnit but introducing some new functionalities that make it
more powerful and easier to use.
TestNG is an open source automated testing framework; where NG of TestNG means Next Generation. TestNG is
similar to JUnit (especially JUnit 4), but its not a JUnit extension. Its inspired by JUnit. It is designed to be better
than JUnit, especially when testing integrated classes. The creator of TestNG isCedric Beust.
TestNG eliminates most of the limitations of the older framework and gives the developer the ability to write more
flexible and powerful tests. As it heavily borrows from Java Annotations (introduced with JDK 5.0) to define tests, it
can also show you how to use this new feature of the Java language in a real production environment.
CHAPTER
1
TUTORIALS POINT
Simply Easy Learning
TestNG Features
Annotations.
TestNG uses more Java and OO features.
Supports testing integrated classes (e.g., by default, no need to create a new test class instance for every
test method).
Separate compile-time test code from run-time configuration/data info.
Flexible runtime configuration.
Introduces test groups. Once you have compiled your tests, you can just ask TestNG to run all the "front-
end" tests, or "fast", "slow", "database", etc...
Supports Dependent test methods, parallel testing, load testing, partial failure.
Flexible plug-in API.
Support for multi threaded testing.
TUTORIALS POINT
Simply Easy Learning
TestNG - Environment
T
estNG is a framework for Java, so the very first requirement is to have JDK installed in your machine.
System Requirement
JDK 1.5 or above.
Memory no minimum requirement.
Disk Space no minimum requirement.
Operating System no minimum requirement.
Step 1 - verify Java installation in your machine
Now, open console and execute the following java command.
OS Task Command
Windows Open Command Console c:\> java -version
Linux Open Command Terminal $ java -version
Mac Open Terminal machine:~ joseph$ java -version
Let's verify the output for all the operating systems:
OS Output
Windows
java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b15)
Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)
Linux java version "1.7.0_25"
CHAPTER
2
TUTORIALS POINT
Simply Easy Learning
Java(TM) SE Runtime Environment (build 1.7.0_25-b15)
Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)
Mac
java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b15)
Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)
If you do not have Java installed, install the Java Software Development Kit (SDK)
fromhttp://www.oracle.com/technetwork/java/javase/downloads/index.html. We are assuming Java 1.7.0_25 as
installed version for this tutorial.
Step 2: Set JAVA environment
Set the JAVA_HOME environment variable to point to the base directory location, where Java is installed on your
machine. For example;
OS Output
Windows Set the environment variable JAVA_HOME to C:\Program Files\Java\jdk1.7.0_25
Linux export JAVA_HOME=/usr/local/java-current
Mac export JAVA_HOME=/Library/Java/Home
Append Java compiler location to System Path.
OS Output
Windows
Append the string; C:\Program Files\Java\jdk1.7.0_25\bin to the end of the system variable,
Path.
Linux export PATH=$PATH:$JAVA_HOME/bin/
Mac not required
Verify Java Installation using java -version command explained above.
Step 3: Download TestNG archive
Download latest version of TestNG jar file from http://www.testng.org. At the time of writing this tutorial, I
downloaded testng-6.8.jar and copied it into C:\>TestNG folder.
OS Archive name
Windows testng-6.8.jar
Linux testng-6.8.jar
Mac testng-6.8.jar
TUTORIALS POINT
Simply Easy Learning
Step 4: Set TestNG environment
Set the TESTNG_HOME environment variable to point to the base directory location, where TestNG jar is stored on
your machine. Assuming, we've stored testng-6.8.jar in TestNG folder on various Operating Systems as follows:
OS Output
Windows Set the environment variable TESTNG_HOME to C:\TESTNG
Linux export TESTNG_HOME=/usr/local/TESTNG
Mac export TESTNG_HOME=/Library/TESTNG
Step 5: Set CLASSPATH variable
Set the CLASSPATH environment variable to point to the TestNG jar location. Assuming, we've stored testng-
6.8.jar in TestNG folder on various Operating Systems as follows:
OS Output
Windows
Set the environment variable CLASSPATH to %CLASSPATH%;%TESTNG_HOME%\testng-
6.8.jar;
Linux export CLASSPATH=$CLASSPATH:$TESTNG_HOME/testng-6.8.jar:
Mac export CLASSPATH=$CLASSPATH:$TESTNG_HOME/testng-6.8.jar:
Step 6: Test TestNG Setup
Create a java class file name TestNGSimpleTest in C:\ > TestNG_WORKSPACE
import org.testng.annotations.Test;
importstatic org.testng.Assert.assertEquals;
publicclassTestNGSimpleTest{
@Test
publicvoid testAdd(){
String str ="TestNG is working fine";
assertEquals("TestNG is working fine", str);
}
}
TestNG can be invoked in several different ways:
With a testng.xml file
With ant
From the command line
Let us invoke using the testng.xml file. Create an xml file with name testng.xml in C:\ > TestNG_WORKSPACE to
execute Test case(s)
TUTORIALS POINT
Simply Easy Learning
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suitename="Suite1">
<testname="test1">
<classes>
<classname="TestNGSimpleTest"/>
</classes>
</test>
</suite>
Step 7: Verify the Result
Compile the class using javac compiler as follows:
C:\TestNG_WORKSPACE>javac TestNGSimpleTest.java
Now, invoke the testng.xml to see the result:
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
Verify the output.
===============================================
Suite1
Total tests run: 1, Failures: 0, Skips: 0
===============================================
TUTORIALS POINT
Simply Easy Learning
TestNG Writing Tests
W
riting a test in TestNG basically involves following steps:
Write the business logic of your test and insert TestNG annotations in your code..
Add the information about your test (e.g. the class name, the groups you wish to run, etc...) in a testng.xml file
or in build.xml..
Run TestNG.
Here, we will see one complete example of TestNG testing using POJO class, Business logic class and a test xml
which will be run by TestNG.
Create EmployeeDetails.java in C:\ > TestNG_WORKSPACE which is a POJO class.
publicclassEmployeeDetails{
privateString name;
privatedouble monthlySalary;
privateint age;
/**
* @return the name
*/
publicString getName(){
return name;
}
/**
* @param name the name to set
*/
publicvoid setName(String name){
this.name = name;
}
/**
* @return the monthlySalary
*/
publicdouble getMonthlySalary(){
return monthlySalary;
}
/**
CHAPTER
3
TUTORIALS POINT
Simply Easy Learning
* @param monthlySalary the monthlySalary to set
*/
publicvoid setMonthlySalary(double monthlySalary){
this.monthlySalary = monthlySalary;
}
/**
* @return the age
*/
publicint getAge(){
return age;
}
/**
* @param age the age to set
*/
publicvoid setAge(int age){
this.age = age;
}
}
EmployeeDetails class is used to
get/set the value of employee's name.
get/set the value of employee's monthly salary.
get/set the value of employee's age.
Create a EmpBusinessLogic.java in C:\ > TestNG_WORKSPACE which contains business logic
publicclassEmpBusinessLogic{
// Calculate the yearly salary of employee
publicdouble calculateYearlySalary(EmployeeDetails employeeDetails){
double yearlySalary=0;
yearlySalary = employeeDetails.getMonthlySalary()*12;
return yearlySalary;
}
// Calculate the appraisal amount of employee
publicdouble calculateAppraisal(EmployeeDetails employeeDetails){
double appraisal=0;
if(employeeDetails.getMonthlySalary()<10000){
appraisal =500;
}else{
appraisal =1000;
}
return appraisal;
}
}
EmpBusinessLogic class is used for calculating
the yearly salary of employee.
the appraisal amount of employee.
Now, let's create a TestNG class called TestEmployeeDetails.java in C:\ > TestNG_WORKSPACE.A TestNG
class is a Java class that contains at least one TestNG annotation. This class contains test cases to be tested. A
TUTORIALS POINT
Simply Easy Learning
TestNG test can be configured by @BeforeXXX and @AfterXXX annotations (we will see this in the chapter TestNG
- Execution Procedure) which allows to perform some Java logic before and after a certain point.
import org.testng.Assert;
import org.testng.annotations.Test;
publicclassTestEmployeeDetails{
EmpBusinessLogic empBusinessLogic =newEmpBusinessLogic();
EmployeeDetails employee =newEmployeeDetails();
@Test
publicvoid testCalculateAppriasal(){
employee.setName("Rajeev");
employee.setAge(25);
employee.setMonthlySalary(8000);
double appraisal = empBusinessLogic
.calculateAppraisal(employee);
Assert.assertEquals(500, appraisal,0.0,"500");
}
// test to check yearly salary
@Test
publicvoid testCalculateYearlySalary(){
employee.setName("Rajeev");
employee.setAge(25);
employee.setMonthlySalary(8000);
double salary = empBusinessLogic
.calculateYearlySalary(employee);
Assert.assertEquals(96000, salary,0.0,"8000");
}
}
TestEmployeeDetails class is used for testing the methods of EmpBusinessLogic class. It
tests the yearly salary of the employee.
tests the appraisal amount of the employee.
Before you can run the tests, however, you must configure TestNG using a special XML file, conventionally named
testng.xml. The syntax for this file is very simple, and its contents as below. Create this file in C:\ >
TestNG_WORKSPACE:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suitename="Suite1">
<testname="test1">
<classes>
<classname="TestEmployeeDetails"/>
</classes>
</test>
</suite>
Details of the above file are as below:
A suite is represented by one XML file. It can contain one or more tests and is defined by the <suite> tag.
Tag <test> represents one test and can contain one or more TestNG classes.
TUTORIALS POINT
Simply Easy Learning
<class> tag represents a TestNG class is a Java class that contains at least one TestNG annotation. It can
contain one or more test methods.
Compile the Test case classes using javac.
C:\TestNG_WORKSPACE>javac EmployeeDetails.java EmpBusinessLogic.java
TestEmployeeDetails.java
Now TestNG with the following command:
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
If all has been done correctly, you should see the results of your tests in the console. Furthermore, TestNG creates a
very nice HTML report in a folder called test-output that is automatically created in the current directory. If you open
it and load index.html, you will see a page similar to the one in the image below:
TUTORIALS POINT
Simply Easy Learning
TestNG Basic Annotations
T
he traditional way to indicate test methods in JUnit 3 is by prefixing their name with test. This is a very
effective method for tagging certain methods in a class as having a special meaning, but the naming doesnt scale
very well (what if we want to add more tags for different frameworks?) and is rather inflexible (what if we want to
pass additional parameters to the testing framework?).
Annotations were formally added to the Java language in JDK 5 and TestNG made the choice to use annotations to
annotate test classes.
Here is the list of annotations that TestNG supports:
Annotation Description
@BeforeSuite The annotated method will be run only once before all tests in this suite have run.
@AfterSuite The annotated method will be run only once after all tests in this suite have run.
@BeforeClass
The annotated method will be run only once before the first test method in the current class
is invoked.
@AfterClass
The annotated method will be run only once after all the test methods in the current class
have been run.
@BeforeTest
The annotated method will be run before any test method belonging to the classes inside the
<test> tag is run.
@AfterTest
The annotated method will be run after all the test methods belonging to the classes inside
the <test> tag have run.
@BeforeGroups
The list of groups that this configuration method will run before. This method is guaranteed
to run shortly before the first test method that belongs to any of these groups is invoked.
@AfterGroups
The list of groups that this configuration method will run after. This method is guaranteed to
run shortly after the last test method that belongs to any of these groups is invoked.
@BeforeMethod The annotated method will be run before each test method.
@AfterMethod The annotated method will be run after each test method.
@DataProvider
Marks a method as supplying data for a test method. The annotated method must return an
Object[ ][ ] where each Object[ ] can be assigned the parameter list of the test method. The
@Test method that wants to receive data from this DataProvider needs to use a
dataProvider name equals to the name of this annotation.
CHAPTER
4
TUTORIALS POINT
Simply Easy Learning
@Factory
Marks a method as a factory that returns objects that will be used by TestNG as Test
classes. The method must return Object[ ].
@Listeners Defines listeners on a test class.
@Parameters Describes how to pass parameters to a @Test method.
@Test Marks a class or a method as part of the test.
Benefits of using annotations
Following are some of the benefits of using annotations:
TestNG identifies the methods it is interested in by looking up annotations. Hence, method names are not
restricted to any pattern or format.
We can pass additional parameters to annotations.
Annotations are strongly typed, so the compiler will flag any mistakes right away.
Test classes no longer need to extend anything (such as TestCase, for JUnit 3).
TUTORIALS POINT
Simply Easy Learning
TestNG Execution Procedure
T
histutorial explains the execution procedure of methods in TestNG which means that which method is
called first and which one after that. Here is the execution procedure of the TestNG test API methods with the
example.
Create a java class file name TestngAnnotation.java in C:\ > TestNG_WORKSPACE to test annotation.
import org.testng.annotations.Test;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.AfterSuite;
publicclassTestngAnnotation{
// test case 1
@Test
publicvoid testCase1(){
System.out.println("in test case 1");
}
// test case 2
@Test
publicvoid testCase2(){
System.out.println("in test case 2");
}
@BeforeMethod
publicvoid beforeMethod(){
System.out.println("in beforeMethod");
}
@AfterMethod
publicvoid afterMethod(){
System.out.println("in afterMethod");
}
@BeforeClass
publicvoid beforeClass(){
CHAPTER
5
TUTORIALS POINT
Simply Easy Learning
System.out.println("in beforeClass");
}
@AfterClass
publicvoid afterClass(){
System.out.println("in afterClass");
}
@BeforeTest
publicvoid beforeTest(){
System.out.println("in beforeTest");
}
@AfterTest
publicvoid afterTest(){
System.out.println("in afterTest");
}
@BeforeSuite
publicvoid beforeSuite(){
System.out.println("in beforeSuite");
}
@AfterSuite
publicvoid afterSuite(){
System.out.println("in afterSuite");
}
}
Next, let's create the file testng.xml in C:\ > TestNG_WORKSPACE to execute annotations.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suitename="Suite1">
<testname="test1">
<classes>
<classname="TestngAnnotation"/>
</classes>
</test>
</suite>
Compile the Test case class using javac.
C:\TestNG_WORKSPACE>javac TestngAnnotation.java
Now, run the testng.xml, which will run test case defined in provided Test Case class.
C:\TestNG_WORKSPACE>java org.testng.TestNG testng.xml
Verify the output.
in beforeSuite
in beforeTest
in beforeClass
in beforeMethod
in test case 1
in afterMethod
TUTORIALS POINT
Simply Easy Learning
in beforeMethod
in test case 2
in afterMethod
in afterClass
in afterTest
in afterSuite
===============================================
Suite
Total tests run: 2, Failures: 0, Skips: 0
===============================================
See the above output and this is how the TestNG execution procedure is:
First of all beforeSuite() method is executed only once.
Lastly, the afterSuite() method executes only once.
Even the methods beforeTest(), beforeClass(), afterClass() and afterTest() methods are executed only once.
beforeMethod() method executes for each test case but before executing the test case.
afterMethod() method executes for each test case but after the execution of test case.
In between beforeMethod() and afterMethod() each test case executes.
TUTORIALS POINT
Simply Easy Learning
TestNG Executing Tests
T
he test cases are executed using TestNG class. This class is the main entry point for running tests in the
TestNG framework. Users can create their own TestNG object and invoke it in many different ways:
On an existing testng.xml
On a synthetic testng.xml, created entirely from Java
By directly setting the test classes.
You can also define which groups to include or exclude, assign parameters, etc. The command line parameters are:
-d outputdir: specify the output directory
-testclass class_name: specifies one or several class names
-testjar jar_name: specifies the jar containing the tests
-sourcedir src1;src2: ; separated list of source directories (used only when javadoc annotations are used)
-target
-groups
-testrunfactory
-listener
We will create the TestNG object an existing testng.xml in our example below.
Create a Class
Create a java class to be tested say MessageUtil.java in C:\ > TestNG_WORKSPACE
/*
* This class prints the given message on console.
*/
CHAPTER
6
TUTORIALS POINT
Simply Easy Learning
publicclassMessageUtil{
privateString message;
//Constructor
//@param message to be printed
publicMessageUtil(String message){
this.message = message;
}
// prints the message
publicString printMessage(){
System.out.println(message);
return message;
}
}
Create Test Case Class
Create a java test class say SampleTest.java.
Add a test method testPrintMessage() to your test class.
Add an Annotation @Test to method testPrintMessage().
Implement the test condition and check the condition using assertEquals API of TestNG.
Create a java class file name SampleTest.java in C:\ > TestNG_WORKSPACE
import org.testng.Assert;
import org.testng.annotations.Test;
publicclassSampleTest{
String message ="Hello World";
MessageUtil messageUtil =newMessageUtil(message);
@Test
publicvoid testPrintMessage(){
Assert.assertEquals(message, messageUtil.printMessage());
}
}
Create testng.xml
Next, let's create testng.xml file in C:\ > TestNG_WORKSPACE to execute Test case(s). This file captures your
entire testing in XML. This file makes it easy to describe all your test suites and their parameters in one file, which
you can check in your code repository or e-mail to coworkers. It also makes it easy to extract subsets of your tests
or split several runtime configurations (e.g., testng-database.xml would run only tests that exercise your database).
<?xml version="1.0" encoding="UTF-8"?>
<suitename="Sample test Suite">
<testname="Sample test">
<classes>
<classname="SampleTest"/>
</classes>
TUTORIALS POINT
Simply Easy Learning
</test>
</suite>
Compile the Test case using javac.
C:\TestNG_WORKSPACE>javac MessageUtil.java SampleTest.java
Now, run the testng.xml, which will run test case defined in <test> tag.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
Verify the output.
Hello World
===============================================
Sample test Suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================
TUTORIALS POINT
Simply Easy Learning
TestNG Suite Test
Test suite
A
Test suiteis a collection of test cases that are intended to test a behavior or set of behaviors of software
program. In TestNG, we cannot define a suite in testing source code, but it is represented by one XML file as suite
is the feature of execution. This also allows flexible configuration of the tests to be run. A suite can contain one or
more tests and is defined by the <suite> tag.
<suite> is a root tag of your testng.xml. It describes a test suite, which in turn is made of several <test> sections.
Table below lists all the legal attributes <suite> accepts.
Attribute Description
name The name of this suite. It is a mandatory attribute.
verbose The level or verbosity for this run.
parallel Whether TestNG should run different threads to run this suite.
thread-count The number of threads to use,if parallel mode is enabled (ignored other-wise).
annotations The type of annotations you are using in your tests.
time-out The default timeout that will be used on all the test methods found in this test.
In this chapter, we will show you an example having two Test1 & Test2 test classes to run together using Test Suite.
Create a Class
Create a java class to be tested say MessageUtil.java in C:\ > JUNIT_WORKSPACE
/*
* This class prints the given message on console.
*/
publicclassMessageUtil{
privateString message;
CHAPTER
7
TUTORIALS POINT
Simply Easy Learning
// Constructor
// @param message to be printed
publicMessageUtil(String message){
this.message = message;
}
// prints the message
publicString printMessage(){
System.out.println(message);
return message;
}
// add "Hi!" to the message
publicString salutationMessage(){
message ="Hi!"+ message;
System.out.println(message);
return message;
}
}
Create Test Case Classes
Create a java class file name Test1.java in C:\ > TestNG_WORKSPACE
import org.testng.Assert;
import org.testng.annotations.Test;
publicclassTest1{
String message ="Manisha";
MessageUtil messageUtil =newMessageUtil(message);
@Test
publicvoid testPrintMessage(){
System.out.println("Inside testPrintMessage()");
Assert.assertEquals(message, messageUtil.printMessage());
}
}
Create a java class file name Test2.java in C:\ > TestNG_WORKSPACE
import org.testng.Assert;
import org.testng.annotations.Test;
publicclassTest2{
String message ="Manisha";
MessageUtil messageUtil =newMessageUtil(message);
@Test
publicvoid testSalutationMessage(){
System.out.println("Inside testSalutationMessage()");
message ="Hi!"+"Manisha";
Assert.assertEquals(message,messageUtil.salutationMessage());
}
}
Now, let's write the testng.xml in C:\ > TestNG_WORKSPACE which would contain the <suite> tag as follows:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
TUTORIALS POINT
Simply Easy Learning
<suitename="Suite1">
<testname="exampletest1">
<classes>
<classname="Test1"/>
</classes>
</test>
<testname="exampletest2">
<classes>
<classname="Test2"/>
</classes>
</test>
</suite>
Suite1 includes exampletest1 and exampletest2.
Compile all java classes using javac.
C:\TestNG_WORKSPACE>javac MessageUtil.java Test1.java Test2.java
Now, run the testng.xml, which will run test case defined in provided Test Case class.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
Verify the output.
Inside testPrintMessage()
Manisha
Inside testSalutationMessage()
Hi!Manisha
===============================================
Suite1
Total tests run: 2, Failures: 0, Skips: 0
===============================================
You can also check the test-output folder; under the Suite1 folder you can see two html's created exampletest1.html
and exampletest2.html which would look like as below:
TUTORIALS POINT
Simply Easy Learning
TUTORIALS POINT
Simply Easy Learning
TestNG Ignore Test
S
ometimes, it happens that our code is not ready and test case written to test that method/code will fail if run.
In such cases, annotation @Test(enabled = false) helps to disable this test case.
A test method is annotated with @Test(enabled = false), then the test case that is not ready to test is bypassed.
Now, let's see @Test(enabled = false) in action.
Create a Class
Create a java class to be tested say MessageUtil.java in C:\ > TestNG_WORKSPACE
/*
* This class prints the given message on console.
*/
publicclassMessageUtil{
privateString message;
//Constructor
//@param message to be printed
publicMessageUtil(String message){
this.message = message;
}
// prints the message
publicString printMessage(){
System.out.println(message);
return message;
}
// add "Hi!" to the message
publicString salutationMessage(){
message ="Hi!"+ message;
System.out.println(message);
return message;
}
}
CHAPTER
8
TUTORIALS POINT
Simply Easy Learning
Create Test Case Class
Create a java test class say IgnoreTest.java.
Add test methods testPrintMessage(), testSalutationMessage() to your test class.
Add an Annotation @Test(enabled = false) to method testPrintMessage().
Create a java class file name IgnoreTest.java in C:\ > TestNG_WORKSPACE
import org.testng.Assert;
import org.testng.annotations.Test;
publicclassIgnoreTest{
String message ="Manisha";
MessageUtil messageUtil =newMessageUtil(message);
@Test(enabled =false)
publicvoid testPrintMessage(){
System.out.println("Inside testPrintMessage()");
message ="Manisha";
Assert.assertEquals(message, messageUtil.printMessage());
}
@Test
publicvoid testSalutationMessage(){
System.out.println("Inside testSalutationMessage()");
message ="Hi!"+"Manisha";
Assert.assertEquals(message, messageUtil.salutationMessage());
}
}
Create testng.xml
Create a testng.xml C:\ > TestNG_WORKSPACE to execute Test case(s).
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM
"http://testng.org/testng-1.0.dtd" >
<suitename="Suite1">
<testname="test1">
<classes>
<classname="IgnoreTest"/>
</classes>
</test>
</suite>
Compile the MessageUtil, Test case classes using javac.
C:\TestNG_WORKSPACE>javac MessageUtil.java IgnoreTest.java
Now, run the testng.xml, which will not run testPrintMessage() test case defined in provided Test Case class.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
Verify the output. testPrintMessage() test case is not tested.
Inside testSalutationMessage()
TUTORIALS POINT
Simply Easy Learning
Hi!Manisha
===============================================
Suite1
Total tests run: 1, Failures: 0, Skips: 0
===============================================
You can also Ignore a group of tests which will be discussed in the next chapter
TUTORIALS POINT
Simply Easy Learning
TestNG Group Test
T
he group test is a new innovative feature in TestNG, it doesnt exist in JUnit framework, it permits you
dispatch methods into proper portions and preform sophisticated groupings of test methods. Not only can you
declare those methods that belong to groups, but you can also specify groups that contain other groups. Then,
TestNG can be invoked and asked to include a certain set of groups (or regular expressions) while excluding
another set. This gives you maximum flexibility in how you partition your tests and doesn't require you to recompile
anything if you want to run two different sets of tests back to back.
Groups are specified in your testng.xml file using the <groups> tag. It can be found either under the <test> or
<suite> tag. Groups specified in the <suite> tag apply to all the <test> tags underneath.
Now, let's see an example of how to group test.
Create a Class
Create a java class to be tested say MessageUtil.java in C:\ > TestNG_WORKSPACE
/*
* This class prints the given message on console.
*/
publicclassMessageUtil{
privateString message;
// Constructor
// @param message to be printed
publicMessageUtil(String message){
this.message = message;
}
// prints the message
publicString printMessage(){
System.out.println(message);
return message;
}
// add "tutorialspoint" to the message
publicString salutationMessage(){
message ="tutorialspoint"+ message;
System.out.println(message);
return message;
CHAPTER
9
TUTORIALS POINT
Simply Easy Learning
}
// add "www." to the message
publicString exitMessage(){
message ="www."+ message;
System.out.println(message);
return message;
}
}
Create Test Case Class
Create a java test class say GroupTestExample.java.
Add test methods testPrintMessage(), testSalutationMessage() to your test class.
Group the test method in two categories say:
o Check-in tests (checkintest): These tests should be run before you submit new code. They should
typically be fast and just make sure no basic functionality is broken.
o Functional tests (functest): These tests should cover all the functionalities of your software and be run at
least once a day, although ideally you would want to run them continuously.
Create the java class file name GroupTestExample.java in C:\ > TestNG_WORKSPACE
import org.testng.Assert;
import org.testng.annotations.Test;
publicclassGroupTestExample{
String message =".com";
MessageUtil messageUtil =newMessageUtil(message);
@Test(groups ={"functest","checkintest"})
publicvoid testPrintMessage(){
System.out.println("Inside testPrintMessage()");
message =".com";
Assert.assertEquals(message, messageUtil.printMessage());
}
@Test(groups ={"checkintest"})
publicvoid testSalutationMessage(){
System.out.println("Inside testSalutationMessage()");
message ="tutorialspoint"+".com";
Assert.assertEquals(message, messageUtil.salutationMessage());
}
@Test(groups ={"functest"})
publicvoid testingExitMessage(){
System.out.println("Inside testExitMessage()");
message ="www."+"tutorialspoint"+".com";
Assert.assertEquals(message, messageUtil.exitMessage());
}
}
TUTORIALS POINT
Simply Easy Learning
Create testng.xml
Create a testng.xml C:\ > TestNG_WORKSPACE to execute Test case(s). Here, we would be executing only those
tests, which belong to the group functest.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suitename="Suite1">
<testname="test1">
<groups>
<run>
<includename="functest"/>
</run>
</groups>
<classes>
<classname="GroupTestExample"/>
</classes>
</test>
</suite>
Compile the MessageUtil, Test case classes using javac.
C:\TestNG_WORKSPACE>javac MessageUtil.java GroupTestExample.java
Now, run the testng.xml which will run only the method testPrintMessage() as it belongs to the groupfunctest.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
Verify the output. Only the method testPrintMessage() is executed.
Inside testPrintMessage()
.com
Inside testExitMessage()
www..com
===============================================
Suite1
Total tests run: 2, Failures: 1, Skips: 0
===============================================
Groups of groups
Groups can also include other groups. These groups are called MetaGroups. For example, you might want to define
a group all that includes checkintest and functest. Let's modify our testng.xml file as below:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suitename="Suite1">
<testname="test1">
<groups>
<definename="all">
<includename="functest"/>
<includename="checkintest"/>
</define>
<run>
<includename="all"/>
</run>
</groups>
TUTORIALS POINT
Simply Easy Learning
<classes>
<classname="GroupTestExample"/>
</classes>
</test>
</suite>
Executing the above testng.xml will execute all the three tests and will give you the below result:
Inside testPrintMessage()
.com
Inside testSalutationMessage()
tutorialspoint.com
Inside testExitMessage()
www.tutorialspoint.com
===============================================
Suite1
Total tests run: 3, Failures: 0, Skips: 0
===============================================
Exclusion groups
You can ignore a group by using the <exclude> tag as shown below:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suitename="Suite1">
<testname="test1">
<groups>
<definename="all">
<excludename="functest"/>
<includename="checkintest"/>
</define>
<run>
<includename="all"/>
</run>
</groups>
<classes>
<classname="GroupTestExample"/>
</classes>
</test>
</suite>
TUTORIALS POINT
Simply Easy Learning
TestNG Exception Test
T
estNG provides a option of tracing the Exception handling of code. You can test whether a code throws
desired exception or not. The expectedExceptions parameter is used along with @Test annotation. Now, let's
see @Test(expectedExceptions) in action.
Create a Class
Create a java class to be tested say MessageUtil.java in C:\ > TestNG_WORKSPACE.
Add an error condition inside printMessage() method.
/*
* This class prints the given message on console.
*/
publicclassMessageUtil{
privateString message;
//Constructor
//@param message to be printed
publicMessageUtil(String message){
this.message = message;
}
// prints the message
publicvoid printMessage(){
System.out.println(message);
int a =0;
int b =1/a;
}
// add "Hi!" to the message
publicString salutationMessage(){
message ="Hi!"+ message;
System.out.println(message);
return message;
}
}
CHAPTER
10
TUTORIALS POINT
Simply Easy Learning
Create Test Case Class
Create a java test class say ExpectedExceptionTest.java.
Add expected exception ArithmeticException to testPrintMessage() test case.
Create a java class file name ExpectedExceptionTest.java in C:\ > TestNG_WORKSPACE
import org.testng.Assert;
import org.testng.annotations.Test;
publicclassExpectedExceptionTest{
String message ="Manisha"; *
MessageUtil messageUtil =newMessageUtil(message);
@Test(expectedExceptions =ArithmeticException.class)
publicvoid testPrintMessage(){
System.out.println("Inside testPrintMessage()");
messageUtil.printMessage();
}
@Test
publicvoid testSalutationMessage(){
System.out.println("Inside testSalutationMessage()");
message ="Hi!"+"Manisha";
Assert.assertEquals(message,messageUtil.salutationMessage());
}
}
Create Test Runner
Create a testng.xml in C:\ > TestNG_WORKSPACE to execute Test case(s).
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suitename="Suite1">
<testname="test1">
<classes>
<classname="ExpectedExceptionTest"/>
</classes>
</test>
</suite>
Compile the MessageUtil, Test case classes using javac
C:\TestNG_WORKSPACE>javac MessageUtil.java TestJunit.java
Now, run the Test Runner, which will run test cases defined in provided Test Case class.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
Verify the output. testPrintMessage() test case will be passed.
Inside testPrintMessage()
Manisha
Inside testSalutationMessage()
Hi!Manisha
TUTORIALS POINT
Simply Easy Learning
===============================================
Suite1
Total tests run: 2, Failures: 0, Skips: 0
===============================================
TUTORIALS POINT
Simply Easy Learning
TestNG Dependency Test
S
ometimes, you may need to invoke methods in a Test case in a particular order or you want to share some
data and state between methods. This kind of dependency is supported by TestNG as it supports the declaration of
explicit dependencies between test methods.
TestNG allows you to specify dependencies either with:
Using attributes dependsOnMethods in @Test annotations OR
Using attributes dependsOnGroups in @Test annotations.
Example using attribute dependsOnMethods
CREATE A CLASS
Create a java class to be tested say MessageUtil.java in C:\ > TestNG_WORKSPACE
publicclassMessageUtil{
privateString message;
// Constructor
// @param message to be printed
publicMessageUtil(String message){
this.message = message;
}
// prints the message
publicString printMessage(){
System.out.println(message);
return message;
}
// add "Hi!" to the message
publicString salutationMessage(){
message ="Hi!"+ message;
System.out.println(message);
return message;
}
}
CHAPTER
11
TUTORIALS POINT
Simply Easy Learning
CREATE TEST CASE CLASS
Create a java test class say DependencyTestUsingAnnotation.java.
Add test methods testPrintMessage(), testSalutationMessage() and initEnvironmentTest() to your test class.
Add attribute dependsOnMethods = { "initEnvironmentTest" } to the @Test annotation
oftestSalutationMessage() method.
Create the java class file name DependencyTestUsingAnnotation.java in C:\ > TestNG_WORKSPACE
import org.testng.Assert;
import org.testng.annotations.Test;
publicclassDependencyTestUsingAnnotation{
String message ="Manisha";
MessageUtil messageUtil =newMessageUtil(message);
@Test
publicvoid testPrintMessage(){
System.out.println("Inside testPrintMessage()");
message ="Manisha";
Assert.assertEquals(message, messageUtil.printMessage());
}
@Test(dependsOnMethods ={"initEnvironmentTest"})
publicvoid testSalutationMessage(){
System.out.println("Inside testSalutationMessage()");
message ="Hi!"+"Manisha";
Assert.assertEquals(message, messageUtil.salutationMessage());
}
@Test
publicvoid initEnvironmentTest(){
System.out.println("This is initEnvironmentTest");
}
}
CREATE TESTNG.XML
Create a testng.xml C:\ > TestNG_WORKSPACE to execute Test case(s).
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM
"http://testng.org/testng-1.0.dtd" >
<suitename="Suite1">
<testname="test1">
<classes>
<classname="DependencyTestUsingAnnotation"/>
</classes>
</test>
</suite>
Compile the MessageUtil, Test case classes using javac
C:\TestNG_WORKSPACE>javac MessageUtil.java DependencyTestUsingAnnotation.java
Now, run the testng.xml, which will run the testSalutationMessage() method only after the execution
ofinitEnvironmentTest() method.
TUTORIALS POINT
Simply Easy Learning
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
Verify the output.
This is initEnvironmentTest
Inside testPrintMessage()
Manisha
Inside testSalutationMessage()
Hi!Manisha
===============================================
Suite1
Total tests run: 3, Failures: 0, Skips: 0
===============================================
Example using attribute dependsOnGroups
You can also have methods that depend on entire groups. Let's see an example below:
CREATE A CLASS
Create a java class to be tested say MessageUtil.java in C:\ > TestNG_WORKSPACE
publicclassMessageUtil{
privateString message;
// Constructor
// @param message to be printed
publicMessageUtil(String message){
this.message = message;
}
// prints the message
publicString printMessage(){
System.out.println(message);
return message;
}
// add "Hi!" to the message
publicString salutationMessage(){
message ="Hi!"+ message;
System.out.println(message);
return message;
}
}
CREATE TEST CASE CLASS
Create a java test class say DependencyTestUsingAnnotation.java.
Add test methods testPrintMessage(), testSalutationMessage() and initEnvironmentTest() to your test class and
them to the group "init".
Add attribute dependsOnMethods = { "init.*" } to the @Test annotation of testSalutationMessage()method.
Create the java class file name DependencyTestUsingAnnotation.java in C:\ > TestNG_WORKSPACE
TUTORIALS POINT
Simply Easy Learning
import org.testng.Assert;
import org.testng.annotations.Test;
publicclassDependencyTestUsingAnnotation{
String message ="Manisha";
MessageUtil messageUtil =newMessageUtil(message);
@Test(groups ={"init"})
publicvoid testPrintMessage(){
System.out.println("Inside testPrintMessage()");
message ="Manisha";
Assert.assertEquals(message, messageUtil.printMessage());
}
@Test(dependsOnGroups ={"init.*"})
publicvoid testSalutationMessage(){
System.out.println("Inside testSalutationMessage()");
message ="Hi!"+"Manisha";
Assert.assertEquals(message, messageUtil.salutationMessage());
}
@Test(groups ={"init"})
publicvoid initEnvironmentTest(){
System.out.println("This is initEnvironmentTest");
}
}
In this example, testSalutationMessage() is declared as depending on any group matching the regular expression
"init.*", which guarantees that the methods testPrintMessage() and initEnvironmentTest() will always be invoked
before testSalutationMessage().
If a method depended upon fails and you have a hard dependency on it (alwaysRun=false, which is the default), the
methods that depend on it are not marked as FAIL but as SKIP. Skipped methods will be reported as such in the
final report (in a color that is neither red nor green in HTML), which is important since skipped methods are not
necessarily failures.
CREATE TESTNG.XML
Create a testng.xml C:\ > TestNG_WORKSPACE to execute Test case(s).
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM
"http://testng.org/testng-1.0.dtd" >
<suitename="Suite1">
<testname="test1">
<classes>
<classname="DependencyTestUsingAnnotation"/>
</classes>
</test>
</suite>
Compile the MessageUtil, Test case classes using javac
C:\TestNG_WORKSPACE>javac MessageUtil.java DependencyTestUsingAnnotation.java
Now, run the testng.xml, which will run the testSalutationMessage() method only after the execution
ofinitEnvironmentTest() method.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
Verify the output.
TUTORIALS POINT
Simply Easy Learning
This is initEnvironmentTest
Inside testPrintMessage()
Manisha
Inside testSalutationMessage()
Hi!Manisha
===============================================
Suite1
Total tests run: 3, Failures: 0, Skips: 0
===============================================
dependsOnGroups Vs dependsOnMethods
On using groups, we are no longer exposed to refactoring problems. As long as we dont modify the
dependsOnGroups or groups attributes, our tests will keep running with the proper dependencies set up.
Whenever a new method needs to be added in the dependency graph, all we need to do is put it in the right
group and make sure it depends on the correct group. We dont need to modify any other method.
TUTORIALS POINT
Simply Easy Learning
TestNG Parameterized Test
A
nother interesting feature available in TestNG is parametric testing. In most cases, you'll come across a
scenario where the business logic requires a hugely varying number of tests. Parameterized testsallow developers
to run the same test over and over again using different values.
TestNG lets you pass parameters directly to your test methods in two different ways:
With testng.xml
With Data Providers
Passing Parameters with testng.xml
With this technique, you define the simple parameters in the testng.xml file and then reference those parameters in
source files. Let us see an example below on how to use this technique to pass parameters.
CREATE TEST CASE CLASS
Create a java test class say ParameterizedTest1.java.
Add test method parameterTest() to your test class. This method takes a String as input parameter.
Add the annotation @Parameters("myName") to this method. The parameter would be passed a values from
testng.xml which we will see in the next step.
Create the java class file name ParameterizedTest1.java in C:\ > TestNG_WORKSPACE
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
publicclassParameterizedTest1{
@Test
@Parameters("myName")
publicvoid parameterTest(String myName){
System.out.println("Parameterized value is : "+ myName);
}
}
CHAPTER
12
TUTORIALS POINT
Simply Easy Learning
CREATE TESTNG.XML
Create a testng.xml C:\ > TestNG_WORKSPACE to execute Test case(s).
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM
"http://testng.org/testng-1.0.dtd" >
<suitename="Suite1">
<testname="test1">
<parametername="myName"value="manisha"/>
<classes>
<classname="ParameterizedTest1"/>
</classes>
</test>
</suite>
We can also define the parameters at the <suite> level. Suppose we have defined myName at both <suite> and
<test> levels then, in such cases regular scoping rules apply. This means that any class inside <test> tag will see
the value of parameter defined in <test>, while the classes in the rest of the testng.xml file will see the value defined
in <suite>.
Compile the Test case class using javac.
C:\TestNG_WORKSPACE>javac ParameterizedTest1.java
Now, run the testng.xml, which will run the parameterTest method. TestNG will try to find a parameter
named myName first in the <test> tag, and then, if it cant find it, it searches in the <suit> tag that encloses it.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
Verify the output.
Parameterized value is : manisha
===============================================
Suite1
Total tests run: 1, Failures: 0, Skips: 0
===============================================
TestNG will automatically try to convert the value specified in testng.xml to the type of your parameter. Here are the
types supported:
String
int/Integer
boolean/Boolean
byte/Byte
char/Character
double/Double
float/Float
long/Long
TUTORIALS POINT
Simply Easy Learning
short/Short
Passing Parameters with Dataproviders
When you need to pass complex parameters or parameters that need to be created from Java (complex objects,
objects read from a property file or a database, etc...), in such cases parameters can be passed using
Dataproviders. A Data Provider is a method annotated with @DataProvider. This annotation has only one string
attribute: its name. If the name is not supplied, the Data Providers name automatically defaults to the methods
name. A Data Provider returns an array of objects.
Let us check out examples below of using Dataproviders. The first example is about @DataProvider using Vector,
String or Integer as parameter and the second example is about @DataProvider using object as parameter.
EXAMPLE 1
Here, the @DataProvider passes Integer and Boolean as parameter.
CREATE JAVA CLASS
Create a java class PrimeNumberChecker.java. This class checks if the number is prime. Create this class in C:\ >
TestNG_WORKSPACE
publicclassPrimeNumberChecker{
publicBoolean validate(finalInteger primeNumber){
for(int i =2; i <(primeNumber /2); i++){
if(primeNumber % i ==0){
returnfalse;
}
}
returntrue;
}
}
CREATE TEST CASE CLASS
Create a java test class say ParamTestWithDataProvider1.java.
Define the method primeNumbers() which is defined as a Dataprovider using the annotation. This method
returns array of object array.
Add test method testPrimeNumberChecker() to your test class. This method takes a Integer and Boolean as
input parameters. This method validates if the parameter passed is a prime number.
Add the annotation @Test(dataProvider = "test1") to this method. The attribute dataProvider is mapped to
"test1".
Create the java class file name ParamTestWithDataProvider1.java in C:\ > TestNG_WORKSPACE
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
publicclassParamTestWithDataProvider1{
privatePrimeNumberChecker primeNumberChecker;
TUTORIALS POINT
Simply Easy Learning
@BeforeMethod
publicvoid initialize(){
primeNumberChecker =newPrimeNumberChecker();
}
@DataProvider(name ="test1")
publicstaticObject[][] primeNumbers(){
returnnewObject[][]{{2,true},{6,false},{19,true},
{22,false},{23,true}};
}
// This test will run 4 times since we have 5 parameters defined
@Test(dataProvider ="test1")
publicvoid testPrimeNumberChecker(Integer inputNumber,
Boolean expectedResult){
System.out.println(inputNumber +" "+ expectedResult);
Assert.assertEquals(expectedResult,
primeNumberChecker.validate(inputNumber));
}
}
CREATE TESTNG.XML
Create a testng.xml C:\ > TestNG_WORKSPACE to execute Test case(s).
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM
"http://testng.org/testng-1.0.dtd" >
<suitename="Suite1">
<testname="test1">
<classes>
<classname="ParamTestWithDataProvider1"/>
</classes>
</test>
</suite>
Compile the Test case class using javac.
C:\TestNG_WORKSPACE>.javac ParamTestWithDataProvider1.java PrimeNumberChecker.java
Now, run the testng.xml.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
Verify the output.
2 true
6 false
19 true
22 false
23 true
===============================================
Suite1
Total tests run: 5, Failures: 0, Skips: 0
===============================================
TUTORIALS POINT
Simply Easy Learning
EXAMPLE 2
Here, the @DataProvider passes Object as parameter.
CREATE JAVA CLASS
Create a java class Bean.java, which is simple object with get/set methods, in C:\ > TestNG_WORKSPACE.
publicclassBean{
privateString val;
privateint i;
publicBean(String val,int i){
this.val=val;
this.i=i;
}
publicString getVal(){
return val;
}
publicvoid setVal(String val){
this.val = val;
}
publicint getI(){
return i;
}
publicvoid setI(int i){
this.i = i;
}
}
CREATE TEST CASE CLASS
Create a java test class say ParamTestWithDataProvider2.java.
Define the method primeNumbers() which is defined as a Dataprovider using the annotation. This method
returns array of object array.
Add test method testMethod() to your test class. This method takes object bean as parameter.
Add the annotation @Test(dataProvider = "test1") to this method. The attribute dataProvider is mapped to
"test1".
Create the java class file name ParamTestWithDataProvider2.java in C:\ > TestNG_WORKSPACE
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
publicclassParamTestWithDataProvider2{
@DataProvider(name ="test1")
publicstaticObject[][] primeNumbers(){
returnnewObject[][]{{newBean("hi I am the bean",111)}};
}
@Test(dataProvider ="test1")
publicvoid testMethod(Bean myBean){
System.out.println(myBean.getVal()+" "+ myBean.getI());
}
}
TUTORIALS POINT
Simply Easy Learning
CREATE TESTNG.XML
Create a testng.xml C:\ > TestNG_WORKSPACE to execute Test case(s).
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM
"http://testng.org/testng-1.0.dtd" >
<suitename="Suite1">
<testname="test1">
<classes>
<classname="ParamTestWithDataProvider2"/>
</classes>
</test>
</suite>
Compile the Test case class using javac.
C:\TestNG_WORKSPACE>javac ParamTestWithDataProvider2.java Bean.java
Now, run the testng.xml.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
Verify the output.
hi I am the bean 111
===============================================
Suite1
Total tests run: 1, Failures: 0, Skips: 0
===============================================
TUTORIALS POINT
Simply Easy Learning
TestNG Run JUnit Tests
N
ow that you have understood TestNG and its various tests, you must be worried by now as to how to
refactor your existing JUnit code. There's no need to worry as TestNG provides a way to shift from JUnit to TestNG
at your own pace. You can execute your existing Junit test cases using TestNG.
TestNG can automatically recognize and run JUnit tests, so you can use TestNG as a runner for all your existing
tests and write new tests using TestNG. All you have to do is to put JUnit library on the TestNG classpath, so it can
find and use JUnit classes, change your test runner from JUnit to TestNG in Ant and then run TestNG in "mixed"
mode. This way you can have all your tests in the same project, even in the same package, and start using TestNG.
This approach also allows you to convert your existing JUnit tests to TestNG incrementally.
Let us see an example below and try out the above feature:
Create JUnit Test case Class
Create a java class, which is a JUnit test class, TestJunit.java in C:\ > TestNG_WORKSPACE
import org.junit.Test;
importstatic org.testng.AssertJUnit.assertEquals;
publicclassTestJunit{
@Test
publicvoid testAdd(){
String str="Junit testing using TestNG";
assertEquals("Junit testing using TestNG",str);
}
}
Now, let's write the testng.xml in C:\ >TestNG_WORKSPACE which would contain the <suite> tag as follows:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suitename="Converted JUnit suite">
<testname="JUnitTests"junit="true">
<classes>
<classname="TestJunit"/>
</classes>
</test>
</suite>
CHAPTER
13
TUTORIALS POINT
Simply Easy Learning
To execute the JUnit test cases define property junit="true" as in the xml above. The JUnit test case class TestJunit
is defined in class name.
For JUnit 4, TestNG will use the org.junit.runner.JUnitCore runner to run your tests.
Compile all java classes using javac.
C:\TestNG_WORKSPACE>javac TestJunit.java
Now, run the testng.xml, which will run Junit test case as TestNG.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE:C:\TestNG_WORKSPACE\lib\junit-
4.11.jar" org.testng.TestNG testng.xml
Here, I've placed the junit-4.11.jar under C:\TestNG_WORKSPACE\lib\junit-4.11.jar.
Verify the output.
===============================================
Converted JUnit suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================
TUTORIALS POINT
Simply Easy Learning
TestNG Test Results
R
eporting is the most important part of any test execution, reason being it helps the user to understand the
result of the test execution, point of failure, and reasons for the failure. Logging, on the other hand, is important to
keep an eye on the execution flow or for debugging in case of any failures.
TestNG by default generates a different type of report for its test execution. This includes an HTML and an XML
report output. TestNG also allows its users to write their own reporter and use it with TestNG. There is also an
option to write your own loggers, which are notified at runtime by TestNG.
There are two main ways to generate a report with TestNG:
Listeners : For implementing a listener class, the class has to implement
theorg.testng.ITestListener interface. These classes are notified at runtime by TestNG when the test starts,
finishes, fails, skips, or passes.
Reporters : For implementing a reporting class, the class has to implement anorg.testng.IReporter interface.
These classes are called when the whole suite run ends. The object containing the information of the whole
test run is passed to this class when called.
The table below lists examples for different cases of reporting and logging:
Custom Logging This example illustrates how to write your own logger.
Custom Reporter This example illustrates how to write your own reporter.
HTML and XML report This example illustrates the default HTML and XML report generated by TestNG.
JUnit Reports This example illustrates the about generating Junit reports from TestNG reports.
Custom Logging
We had earlier read about the different options that TestNG provides for logging and reporting. Now, let's learn how
to start using them. To start with, we will write a sample program in which we will use the ITestListener interface for
logging purposes.
Create Test Case Class
Create a java class say SampleTest.java in C:\ > TestNG_WORKSPACE
import org.testng.Assert;
CHAPTER
14
TUTORIALS POINT
Simply Easy Learning
import org.testng.annotations.Test;
publicclassSampleTest{
@Test
publicvoid testMethodOne(){
Assert.assertTrue(true);
}
@Test
publicvoid testMethodTwo(){
Assert.assertTrue(false);
}
@Test(dependsOnMethods={"testMethodTwo"})
publicvoid testMethodThree(){
Assert.assertTrue(true);
}
}
The preceding test class contains three test methods out of which testMethodOne andtestMethodThree will pass
when executed, whereas testMethodTwo is made to fail by passing a falseBoolean value to the Assert.assertTrue
method, which is used for truth conditions in the tests.
Create Custom Logging class
Create another new class named CustomListener.java in C:\ > TestNG_WORKSPACE
import org.testng.ITestResult;
import org.testng.TestListenerAdapter;
publicclassCustomListenerextendsTestListenerAdapter{
privateint m_count =0;
@Override
publicvoid onTestFailure(ITestResult tr){
log(tr.getName()+"--Test method failed\n");
}
@Override
publicvoid onTestSkipped(ITestResult tr){
log(tr.getName()+"--Test method skipped\n");
}
@Override
publicvoid onTestSuccess(ITestResult tr){
log(tr.getName()+"--Test method success\n");
}
privatevoid log(Stringstring){
System.out.print(string);
if(++m_count %40==0){
System.out.println("");
}
}
}
The above class extends TestListenerAdapter, which implements ITestListener with empty methods. Hence, no
need to override other methods from the interface. You can implement the interface directly if you prefer.
TUTORIALS POINT
Simply Easy Learning
Create testng.xml
Create a testng.xml C:\ > TestNG_WORKSPACE to execute Test case(s).
<?xml version="1.0" encoding="UTF-8"?>
<suitename="Simple Logger Suite">
<listeners>
<listenerclass-name="CustomListener"/>
</listeners>
<testname="Simple Logger test">
<classes>
<classname="SampleTest"/>
</classes>
</test>
</suite>
Compile the SampleTest, CustomListener classes using javac
C:\TestNG_WORKSPACE>javac CustomListener.java SampleTest.java
Now, run the testng.xml.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
Verify the output.
testMethodOne--Test method success
testMethodTwo--Test method failed
testMethodThree--Test method skipped
===============================================
Simple Logger Suite
Total tests run: 3, Failures: 1, Skips: 1
===============================================
We created a custom logger class, which implements the ITestListener interface and attached itself to the TestNG
test suite as a listener. Methods of this listener class are invoked by TestNG when test started, at test fail, at test
success, and so on. Multiple listeners can be implemented and added to the test suite execution, TestNG will invoke
all the listeners that are attached to the test suite.
Logging listeners are mainly used when we need to see the continuous status of the test execution when the tests
are getting executed.
Custom Reporter
In this section, we will cover, with an example, the method of writing your custom reporter and attaching it to
TestNG. To write a custom reporter class, our extension class should implement the IReporter interface. Let's go
ahead and create an example with the custom reporter.
Create Test Case Class
Create a java class say SampleTest.java in C:\ > TestNG_WORKSPACE
import org.testng.Assert;
TUTORIALS POINT
Simply Easy Learning
import org.testng.annotations.Test;
publicclassSampleTest{
@Test
publicvoid testMethodOne(){
Assert.assertTrue(true);
}
@Test
publicvoid testMethodTwo(){
Assert.assertTrue(false);
}
@Test(dependsOnMethods={"testMethodTwo"})
publicvoid testMethodThree(){
Assert.assertTrue(true);
}
}
The preceding test class contains three test methods out of which testMethodOne andtestMethodThree will pass
when executed, whereas testMethodTwo is made to fail by passing a falseBoolean value to the Assert.assertTrue
method, which is used for truth conditions in the tests.
Create Custom Reporting class
Create another new class named CustomReporter.java in C:\ > TestNG_WORKSPACE
import java.util.List;
import java.util.Map;
import org.testng.IReporter;
import org.testng.ISuite;
import org.testng.ISuiteResult;
import org.testng.ITestContext;
import org.testng.xml.XmlSuite;
publicclassCustomReporterimplementsIReporter{
@Override
publicvoid generateReport(List xmlSuites,List suites,
String outputDirectory){
//Iterating over each suite included in the test
for(ISuite suite : suites){
//Following code gets the suite name
String suiteName = suite.getName();
//Getting the results for the said suite
Map suiteResults = suite.getResults();
for(ISuiteResult sr : suiteResults.values()){
ITestContext tc = sr.getTestContext();
System.out.println("Passed tests for suite '"+ suiteName +
"' is:"+ tc.getPassedTests().getAllResults().size());
System.out.println("Failed tests for suite '"+ suiteName +
"' is:"+
tc.getFailedTests().getAllResults().size());
System.out.println("Skipped tests for suite '"+ suiteName +
"' is:"+
tc.getSkippedTests().getAllResults().size());
}
}
}
}
TUTORIALS POINT
Simply Easy Learning
The preceding class implements the org.testng.IReporter interface. It implements the definition for the
method generateReport of the IReporter interface. The method takes three arguments :
the first being xmlSuite, which is the list suites mentioned in the testng XML being executed
The second one being suites which contains the suite information after the test execution; this object contains
all the information about the packages, classes, test methods, and their test execution results.
The third being the outputDirectory, which contains the information of the output folder path, where the reports
will be generated.
Create testng.xml
Create a testng.xml C:\ > TestNG_WORKSPACE to execute Test case(s).
<?xml version="1.0" encoding="UTF-8"?>
<suitename="Simple Reporter Suite">
<listeners>
<listenerclass-name="CustomReporter"/>
</listeners>
<testname="Simple Reporter test">
<classes>
<classname="SampleTest"/>
</classes>
</test>
</suite>
Compile the SampleTest, CustomReporter classes using javac
C:\TestNG_WORKSPACE>javac CustomReporter.java SampleTest.java
Now, run the testng.xml.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
Verify the output..
===============================================
Simple Reporter Suite
Total tests run: 3, Failures: 1, Skips: 1
===============================================
Passed tests for suite 'Simple Reporter Suite' is:1
Failed tests for suite 'Simple Reporter Suite' is:1
Skipped tests for suite 'Simple Reporter Suite' is:1
The preceding example shows a simple custom reporter, which prints the number of failed, passed, and skipped
tests on the console for each suite included in the said test execution. Reporter is mainly used to generate the final
report for the test execution. The extension can be used to generate XML, HTML, XLS, CSV, or text format files
depending upon the report requirement.
HTML and XML report
TestNG comes with certain predefined listeners as part of the library. These listeners are by default added to any
test execution and generate different HTML and XML reports for any test execution. The report is generated by
TUTORIALS POINT
Simply Easy Learning
default under the folder named testoutput and can be changed to any other folder by configuring it. These reports
consist of certain HTML and XML reports that are TestNG specific.
Create Test Case Class
Create a java class say SampleTest.java in C:\ > TestNG_WORKSPACE
import org.testng.Assert;
import org.testng.annotations.Test;
publicclassSampleTest{
@Test
publicvoid testMethodOne(){
Assert.assertTrue(true);
}
@Test
publicvoid testMethodTwo(){
Assert.assertTrue(false);
}
@Test(dependsOnMethods={"testMethodTwo"})
publicvoid testMethodThree(){
Assert.assertTrue(true);
}
}
The preceding test class contains three test methods out of which testMethodOne andtestMethodThree will pass
when executed, whereas testMethodTwo is made to fail by passing a falseBoolean value to the Assert.assertTrue
method, which is used for truth conditions in the tests.
Create testng.xml
Create a testng.xml C:\ > TestNG_WORKSPACE to execute Test case(s).
<?xml version="1.0" encoding="UTF-8"?>
<suitename="Simple HTML-XML Suite">
<testname="Simple HTML-XML test">
<classes>
<classname="SampleTest"/>
</classes>
</test>
</suite>
Compile the SampleTest class using javac.
C:\TestNG_WORKSPACE>javac SampleTest.java
Now, run the testng.xml.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
Verify the output.
===============================================
Simple HTML-XML Suite
Total tests run: 3, Failures: 1, Skips: 1
TUTORIALS POINT
Simply Easy Learning
===============================================
Now, go to the C:\TestNG_WORKSPACE\test-output folder. Open the index.html on your default web browser. You
will see the following HTML report:
Now, open the file C:\TestNG_WORKSPACE\test-output\testing-results.xml in the default XML editor on your
system, and you will see the following results in the XML file:
TestNG by default generates multiple reports as part of its test execution. These reports mainly include TestNG
HTML report, TestNG emailable report, TestNG report XML, and JUnit report XML files. These files can be found
under the output report folder (in this case test-output). This default report generation can be disabled while
running the tests by setting the value of the property useDefaultListeners to false. This property can be set while
using the build tools like Ant or Maven
JUnit Reports
TUTORIALS POINT
Simply Easy Learning
JUnit is one of those unit frameworks, which were initially used by many Java applications as a Unit test framework.
By default, JUnit tests generate a simple report XML files for its test execution. These XML files can then be used to
generate any custom reports as per the testing requirement. We can also generate HTML reports using the XML
files. Ant has such a utility task which takes these JUnit XML files as input and generates an HTML report from it.
TestNG by default generates the JUnit XML reports for any test execution (in the test-output folder). We can use
these XML report files as input for generation of a JUnit HTML report. Let us see an example below:
Create Test Case Class
Create a java class say SampleTest.java in C:\ > TestNG_WORKSPACE
import org.testng.Assert;
import org.testng.annotations.Test;
publicclassSampleTest{
@Test
publicvoid testMethodOne(){
Assert.assertTrue(true);
}
@Test
publicvoid testMethodTwo(){
Assert.assertTrue(false);
}
@Test(dependsOnMethods={"testMethodTwo"})
publicvoid testMethodThree(){
Assert.assertTrue(true);
}
}
The preceding test class contains three test methods out of which testMethodOne andtestMethodThree will pass
when executed, whereas testMethodTwo is made to fail by passing a falseBoolean value to the Assert.assertTrue
method, which is used for truth conditions in the tests.
Create testng.xml
Create a testng.xml C:\ > TestNG_WORKSPACE to execute Test case(s).
<?xml version="1.0" encoding="UTF-8"?>
<suitename="Simple Suite">
<testname="Simple test">
<classes>
<classname="SampleTest"/>
</classes>
</test>
</suite>
Compile the SampleTest class using javac.
C:\TestNG_WORKSPACE>javac SampleTest.java
Now, run the testng.xml.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
TUTORIALS POINT
Simply Easy Learning
Verify the output.
===============================================
Simple Suite
Total tests run: 3, Failures: 1, Skips: 1
===============================================
Now that we have JUnit XML reports available from the above execution, let's create a simple Ant build
configuration XML file to generate an HTML report for the test execution.
Create a new file named build.xml under C:\ > TestNG_WORKSPACE folder.
<projectname="TestNG_WORKSPACE"default="junit-report"basedir=".">
<!-- Sets the property variables to point to respective directories -->
<propertyname="junit-xml-dir"value="${basedir}/test-output/junitreports"/>
<propertyname="report-dir"value="${basedir}/html-report"/>
<!-- Ant target to generate html report -->
<targetname="junit-report">
<!-- Delete and recreate the html report directories -->
<deletedir="${report-dir}"failonerror="false"/>
<mkdirdir="${report-dir}"/>
<mkdirdir="${report-dir}/Junit"/>
<!-- Ant task to generate the html report.
todir - Directory to generate the output reports
fileset - Directory to look for the junit xml reports.
report - defines the type of format to be generated.
Here we are using "noframes" which generates a single html report.
-->
<junitreporttodir="${report-dir}/Junit">
<filesetdir="${junit-xml-dir}">
<includename="**/*.xml"/>
</fileset>
<reportformat="noframes"todir="${report-dir}/Junit"/>
</junitreport>
</target>
</project>
The preceding XML defines a simple Ant build.xml file having a specific Ant target named junit-report that generates
a JUnit report when executed. The target looks for the JUnit report XML files under the directory test-
output/junitreports. For the Ant configuration file the default target to execute is configured as junit-report.
Open the command prompt window and go to the C:\ > TestNG_WORKSPACE directory in the command prompt
and Run the command:
C:\TestNG_WORKSPACE> ant
Once executed, a JUnit HTML report will be generated in the configured directory /html-report/Junit. Open the file
named
junit-noframes.html
on your default web browser. You will see the following HTML report:
TUTORIALS POINT
Simply Easy Learning
Here, we have seen how to use the JUnit XML report generated by TestNG and generate HTML report using Ant.
There are two kinds of reports that can be generated using this method: frames and no-frames. If the report
generation is configured with frames, there will multiple files generated for each class and the main report will
connect to them through links. A no-frames report consists of a single file with all the results of the test execution.
This can be configured by providing the respective value to the format attribute of the report task in Ant.
TUTORIALS POINT
Simply Easy Learning
TestNG Plug with ANT
I
n this example, we will demonstrate how to run TestNG using ANT. Let's follow the given steps:
Step 1: Download Apache Ant
Download Apache Ant
OS Archive name
Windows apache-ant-1.8.4-bin.zip
Linux apache-ant-1.8.4-bin.tar.gz
Mac apache-ant-1.8.4-bin.tar.gz
Step 2: Set Ant Environment
Set the ANT_HOME environment variable to point to the base directory location, where ANT libraries are stored on
your machine. For example, We've stored Ant libraries in apache-ant-1.8.4 folder on various Operating Systems as
follows:
OS Output
Windows
Set the environment variable ANT_HOME to C:\Program Files\Apache Software
Foundation\apache-ant-1.8.4
Linux export ANT_HOME=/usr/local/\apache-ant-1.8.4
Mac export ANT_HOME=/Library/\apache-ant-1.8.4
Append Ant compiler location to System Path as follows for different OS:
OS Output
Windows Append the string ;%ANT_HOME\bin to the end of the system variable, Path.
CHAPTER
15
TUTORIALS POINT
Simply Easy Learning
Linux export PATH=$PATH:$ANT_HOME/bin/
Mac not required
Step 3: Download TestNG Archive
Download http://www.testng.org.
OS Archive name
Windows testng-6.8.jar
Linux testng-6.8.jar
Mac testng-6.8.jar
Step 4: Create Project Structure
Create folder TestNGWithAnt in C:\ > TestNG_WORKSPACE
Create folder src in C:\ > TestNG_WORKSPACE > TestNGWithAnt
Create folder test in C:\ > TestNG_WORKSPACE > TestNGWithAnt
Create folder lib in C:\ > TestNG_WORKSPACE > TestNGWithAnt
Create MessageUtil class in C:\ > TestNG_WORKSPACE > TestNGWithAnt > src folder.
/*
* This class prints the given message on console.
*/
publicclassMessageUtil{
privateString message;
//Constructor
//@param message to be printed
publicMessageUtil(String message){
this.message = message;
}
// prints the message
publicvoid printMessage(){
System.out.println(message);
return message;
}
// add "Hi!" to the message
publicString salutationMessage(){
message ="Hi!"+ message;
System.out.println(message);
return message;
}
}
Create TestMessageUtil class in C:\ > TestNG_WORKSPACE > TestNGWithAnt > src folder.
import org.testng.Assert;
import org.testng.annotations.Test;
TUTORIALS POINT
Simply Easy Learning
publicclassTestMessageUtil{
String message ="Manisha";
MessageUtil messageUtil =newMessageUtil(message);
@Test
publicvoid testPrintMessage(){
System.out.println("Inside testPrintMessage()");
Assert.assertEquals(message,messageUtil.printMessage());
}
@Test
publicvoid testSalutationMessage(){
System.out.println("Inside testSalutationMessage()");
message ="Hi!"+"Manisha";
Assert.assertEquals(message,messageUtil.salutationMessage());
}
}
Copy testng-6.8.jar in C:\ > TestNG_WORKSPACE > TestNGWithAnt > lib folder
Create ANT build.xml
First, we need to define the TestNG ant task as follows:
<taskdefname="testng"classname="org.testng.TestNGAntTask">
<classpath>
<pathelementlocation="lib/testng-6.8.jar"/>
</classpath>
</taskdef>
Then, we'll be using <testng> task in Ant to execute our TestNG test cases.
The C:\ > TestNG_WORKSPACE > TestNGWithAnt >\ build.xml is as follows:
<projectname="TestNGTest"default="test"basedir=".">
<!-- Define <testng> task -->
<taskdefname="testng"classname="org.testng.TestNGAntTask">
<classpath>
<pathelementlocation="lib/testng-6.8.jar"/>
</classpath>
</taskdef>
<propertyname="testdir"location="test"/>
<propertyname="srcdir"location="src"/>
<propertyname="libdir"location="lib"/>
<propertyname="full-compile"value="true"/>
<pathid="classpath.base"/>
<pathid="classpath.test">
<filesetdir="${libdir}">
<includename="**/*.jar"/>
</fileset>
<pathelementlocation="${testdir}"/>
<pathelementlocation="${srcdir}"/>
<pathrefid="classpath.base"/>
</path>
<targetname="clean">
<deleteverbose="${full-compile}">
<filesetdir="${testdir}"includes="**/*.class"/>
</delete>
TUTORIALS POINT
Simply Easy Learning
</target>
<targetname="compile"depends="clean">
<javacsrcdir="${srcdir}"destdir="${testdir}"
verbose="${full-compile}">
<classpathrefid="classpath.test"/>
</javac>
</target>
<targetname="test"depends="compile">
<testngoutputdir="${testdir}"classpathref="classpath.test">
<xmlfilesetdir="${srcdir}"includes="testng.xml"/>
</testng>
</target>
</project>
Run the following ant command.
C:\TestNG_WORKSPACE\TestNGWithAnt>ant
Verify the output.
test:
[testng] [TestNG] Running:
[testng] C:\TestNG_WORKSPACE\TestNGWithAnt\src\testng.xml
[testng]
[testng] Inside testPrintMessage()
[testng] Manisha
[testng] Inside testSalutationMessage()
[testng] Hi!Manisha
[testng]
[testng] ===============================================
[testng] Plug ANT test Suite
[testng] Total tests run: 2, Failures: 0, Skips: 0
[testng] ===============================================
[testng]
BUILD SUCCESSFUL
Total time: 1 second
TUTORIALS POINT
Simply Easy Learning
TestNG - Plug with Eclipse
T
o set up TestNG with eclipse, following steps need to be followed:
Step 1: Download TestNG archive
Download http://www.testng.org
OS Archive name
Windows testng-6.8.jar
Linux testng-6.8.jar
Mac testng-6.8.jar
Assume you copied above JAR file in C:\>TestNG folder.
Step 2: Set Eclipse environment
Open eclipse -> right click on project and click on property > Build Path > Configure Build Path and add the
testng-6.8.jar in the libraries using Add External Jar button.
CHAPTER
16
TUTORIALS POINT
Simply Easy Learning
We assume that your eclipse has inbuilt TestNG plug-in; if it is not available, then please get the latest version
using the update site:
o In your eclipse IDE, select Help / Software updates / Find and Install.
o Search for new features to install.
o New remote site.
o For Eclipse 3.4 and above, enter http://beust.com/eclipse.
o For Eclipse 3.3 and below, enter http://beust.com/eclipse1.
o Make sure the check box next to URL is checked and click Next.
o Eclipse will then guide you through the process.
Now, your eclipse is ready for the development of TestNG test cases.
Step 3: Verify TestNG installation in Eclipse
Create a project TestNGProject in eclipse at any location.
Create a class MessageUtil to test in the project.
/*
* This class prints the given message on console.
*/
publicclassMessageUtil{
privateString message;
TUTORIALS POINT
Simply Easy Learning
//Constructor
//@param message to be printed
publicMessageUtil(String message){
this.message = message;
}
// prints the message
publicString printMessage(){
System.out.println(message);
return message;
}
}
Create a test class TestNGExample in the project.
import org.testng.Assert;
import org.testng.annotations.Test;
publicclassTestNGExample{
String message ="Hello World";
MessageUtil messageUtil =newMessageUtil(message);
@Test
publicvoid testPrintMessage(){
Assert.assertEquals(message,messageUtil.printMessage());
}
}
Following should be the project structure:
Finally, verify the output of the program by right clicking on program and running as TestNG.
Verify the result.
TUTORIALS POINT
Simply Easy Learning