Sunday 15 March 2020

TestNG: dependsOnGroups: Test method can dependent on groups

'dependsOnGroups' property is used to specify the list of groups that this test method depends on. This test method gets executed once all the methods in the groups are executed successfully.

DependentOnGroupTest1.java
package com.sample.app.tests;

import org.testng.annotations.Test;

public class DependentOnGroupTest1 {
 @Test(groups = { "group1" })
 public void A() {
  System.out.println("I am in A");
 }

 @Test(groups = { "group1" })
 public void B() {
  System.out.println("I am in B");
 }

 @Test(dependsOnGroups = { "group1" })
 public void C() {
  System.out.println("I am in C");
 }

 @Test(groups = { "group1" })
 public void D() {
  System.out.println("I am in D");
 }
}

When you run ‘DependentOnGroupTest1.java’, you will see below messages in console.
[RemoteTestNG] detected TestNG version 7.0.0
I am in A
I am in B
I am in D
I am in C
PASSED: A
PASSED: B
PASSED: D
PASSED: C

===============================================
    Default test
    Tests run: 4, Failures: 0, Skips: 0
===============================================


===============================================
Default suite
Total tests run: 4, Passes: 4, Failures: 0, Skips: 0
===============================================

From the console output, you can confirm test case ‘C’ is execute after A, B and D are executed.

If any of the test method in a group is failed, then the test method that depends on this group is skipped.
DependentOnGroupTest2.java
package com.sample.app.tests;

import static org.testng.Assert.assertTrue;

import org.testng.annotations.Test;

public class DependentOnGroupTest2 {
 @Test(groups = { "group2" })
 public void A() {
  System.out.println("I am in A");
 }

 @Test(groups = { "group2" })
 public void B() {
  System.out.println("I am in B");
 }

 @Test(dependsOnGroups = { "group2" })
 public void C() {
  System.out.println("I am in C");
 }

 @Test(groups = { "group2" })
 public void D() {
  System.out.println("I am in D");
  assertTrue(false);
 }
}

Run ‘DependentOnGroupTest2.java’, you will see below messages in console.
[RemoteTestNG] detected TestNG version 7.0.0
I am in A
I am in B
I am in D
PASSED: A
PASSED: B
FAILED: D
java.lang.AssertionError: did not expect to find [true] but found [false]
 at org.testng.Assert.fail(Assert.java:97)
 at org.testng.Assert.failNotEquals(Assert.java:969)
 at org.testng.Assert.assertTrue(Assert.java:43)
 at org.testng.Assert.assertTrue(Assert.java:53)
 at com.sample.app.tests.DependentOnGroupTest2.D(DependentOnGroupTest2.java:26)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:498)
 at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:133)
 at org.testng.internal.TestInvoker.invokeMethod(TestInvoker.java:584)
 at org.testng.internal.TestInvoker.invokeTestMethod(TestInvoker.java:172)
 at org.testng.internal.MethodRunner.runInSequence(MethodRunner.java:46)
 at org.testng.internal.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:804)
 at org.testng.internal.TestInvoker.invokeTestMethods(TestInvoker.java:145)
 at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146)
 at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:128)
 at java.util.ArrayList.forEach(ArrayList.java:1257)
 at org.testng.TestRunner.privateRun(TestRunner.java:770)
 at org.testng.TestRunner.run(TestRunner.java:591)
 at org.testng.SuiteRunner.runTest(SuiteRunner.java:402)
 at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:396)
 at org.testng.SuiteRunner.privateRun(SuiteRunner.java:355)
 at org.testng.SuiteRunner.run(SuiteRunner.java:304)
 at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)
 at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:96)
 at org.testng.TestNG.runSuitesSequentially(TestNG.java:1180)
 at org.testng.TestNG.runSuitesLocally(TestNG.java:1102)
 at org.testng.TestNG.runSuites(TestNG.java:1032)
 at org.testng.TestNG.run(TestNG.java:1000)
 at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115)
 at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
 at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)

SKIPPED: C
java.lang.Throwable: Method DependentOnGroupTest2.C()[pri:0, instance:com.sample.app.tests.DependentOnGroupTest2@56235b8e] depends on not successfully finished methods in group "group2"
 at org.testng.internal.TestInvoker.invokeTestMethods(TestInvoker.java:99)
 at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146)
 at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:128)
 at java.util.ArrayList.forEach(ArrayList.java:1257)
 at org.testng.TestRunner.privateRun(TestRunner.java:770)
 at org.testng.TestRunner.run(TestRunner.java:591)
 at org.testng.SuiteRunner.runTest(SuiteRunner.java:402)
 at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:396)
 at org.testng.SuiteRunner.privateRun(SuiteRunner.java:355)
 at org.testng.SuiteRunner.run(SuiteRunner.java:304)
 at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)
 at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:96)
 at org.testng.TestNG.runSuitesSequentially(TestNG.java:1180)
 at org.testng.TestNG.runSuitesLocally(TestNG.java:1102)
 at org.testng.TestNG.runSuites(TestNG.java:1032)
 at org.testng.TestNG.run(TestNG.java:1000)
 at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115)
 at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
 at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)


===============================================
    Default test
    Tests run: 4, Failures: 1, Skips: 1
===============================================


===============================================
Default suite
Total tests run: 4, Passes: 2, Failures: 1, Skips: 1
===============================================


Previous                                                    Next                                                    Home

No comments:

Post a Comment