简体   繁体   中英

TestNG Multiple Test Class - Running other classes

I have a multiple Test class which I want to execute 4 tests, however, the 4 tests I want to execute are different classes in different class files. So I want to call each class 1 at a time in my multiple Test class. So The code is being executed in the individual classes and the multiple Test class literally just handles the execution of each test based on priority. I am just unsure how to call another class to be executed.

My multi class:

@Test(priority = 0) //Set Priority of Test - Priority of test always starts from Zero
    public void one() {

  System.out.println("This is Test Case 1");
    }
         //Test 2
     @Test(priority = 1) // Test priority 1
    public void Two(){

  System.out.println("This is Test Case 2");
      }

I need to execute my external classes in the @Test blocks. New to automation maybe my problem is my understand of java?

How am Passing My parameters:

public class TestNGDataProvider {

  private WebDriver driver;
 private static Logger logger1 = LogManager.getLogger("Logger1");

 @Test(dataProvider = "Authentication")
 public void testMethod1(String sUsername, String sPassword, String sMemorableWord) {

  DOMConfigurator.configure("log4j.xml");

driver = new FirefoxDriver();

  logger1.info("New Instance of firefox created");
  //Add wait to allow web elements to load

  driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

  logger1.info("Timeout Applied for 10 seconds to Allow Load of Elements");
  //Launch FireFoxDriver - Open WebPage

  driver.get("http://localhost/2010A15/");

  logger1.info("Website Launched");
  Reporter.log("Website Lauched Successfully  | "); //Main Event Logger/Report

  //Find Login Element
  driver.findElement(By.id("WEB_LoginButton")).click();

  logger1.info("Login Button Clicked");
  //Find User name Element

     driver.findElement(By.id("dijit_form_ValidationTextBox_1")).sendKeys(sUsername);

  logger1.info("Username Entered");

  //Find Password Element

  driver.findElement(By.id("dijit_form_ValidationTextBox_2")).sendKeys(sPassword);




     @DataProvider(name = "Authentication")
     public static Object[][] credentials() {
return new Object[][] { { "jane20@servicecharges.co.uk", "password1", "smith" }, { "rob23@orchard.co.uk", "password1", "smith" }, { "jeff23@hotmail.com", "password1", "smith" }}; 
 }}

As per my understanding, you have handled test logic in separate class files & executing those in Main class file. So if you have below 2 classes for tests,

public class TestLogic1
{  
   public void testMethod1()
    {
       System.out.println("Test 1 executing");
    }
}
public class TestLogic2
{  
   public void testMethod2()
    {
       System.out.println("Test 2 executing");
    }
}

Then you can call, these test methods in your execution class as,

public class TestExecute
{  
   TestLogic1 method1=new TestLogic1();
   TestLogic2 method2=new TestLogic2();

   @Test(priority=1)
   public void test1()
    {
       method1.testMethod1();
    }
@Test(priority=2)
   public void test2()
    {
       method2.testMethod2();
    }
}

Edit: Assuming you have written @Test method & @DataProvider in one class & handling it's execution sequence in other class. Use below code to get it working with parameters from DataProvider.

 public class TestExecute{

TestNGDataProvider tg=new TestNGDataProvider();

@Test(dataProvider = "Authentication",dataProviderClass = TestNGDataProvider.class)
 public void test1(String login,String user,String pass) throws InterruptedException {

    tg.testMethod1(login,user,pass);
}
 }

Hope this is what you are looking for. Also look here For more details on TestNG Data Providers.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM