如何执行包含具有相同@BeforeClass方法的测试类的testng.xml文件

时间:2017-02-10 12:01:54

标签: java selenium testng

直到现在我已经编写了针对页面特定情况的页面特定测试。例如:LoginPageTest.java包含测试仅与登录页面相关的方案的测试。

现在我已经自动增加了几页,我想将所有这些页面集成到testng.xml

问题是 - 假设我想测试3个测试类(LoginPageTest.java,ExercisePageTest.java& HomePageTest.java)&我在testng.xml文件中传递了这些类名。运行testng.xml文件时发生的事情是3个浏览器实例一起打开,因为在我的每个测试类中,我都有一个初始化浏览器的@BeforeClass方法。

在我的所有测试类中,我都遵循以下相同的步骤 -

- 在@BeforeClass方法中,我正在初始化浏览器。

@BeforeClass
    public void setUp() throws Exception {

        wte = new ReadWriteExcel();
        extent = new ExtentReports("D://myfitnesspal.html", true);
        extent.addSystemInfo("Environment", "Test Environment");
        test = extent.startTest("Login Functionality");
        driver = BrowserSettings.startBrowser("chrome","https://www.myfitnesspal.com");
        engineDriver=new EngineDriver(driver);
        test.log(LogStatus.PASS, "Executing on Firefox browser");

    }

- 在@Test方法中,我正在阅读EmailID&来自excel表格的客人密码&登录到应用程序。

@Test(priority=0, groups={"regression"})
    //@Test(dependsOnMethods="setUp")
    public void existingUserLoginfromLandingPage() throws Exception{

        new WebDriverWait(driver,10).until(ExpectedConditions.titleContains("Free Calorie Counter, Diet & Exercise Journal"));
        test.log(LogStatus.INFO, "Title Detected : " + "Free Calorie Counter, Diet & Exercise Journal" );
        String emailIDFromExcel = ReadWriteExcel.fecthEmailID(0);
        String passwordFromExcel = ReadWriteExcel.fecthPassword(1);
        engineDriver.landingPage.existingUserLogin(emailIDFromExcel, passwordFromExcel);
        System.out.println("EmailID & Password are :" + emailIDFromExcel+passwordFromExcel);

    }

同样,我还有其他@Test方法来测试页面相关的场景。

我想要实现的是这个 -

我希望浏览器只运行一次&而不是打开浏览器3次。一旦LoginPageTest.java完成,我想执行其他测试类,而不需要新的浏览器实例打开和放大没有新用户登录。

示例:我希望我的testng.xml文件看起来像这样 -

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
    <test name="Test">
        <parameter name="typeOfCardio" value="Swimming" />
        <parameter name="typeOfStrengthExercise" value="Bench Press" />
        <classes>
            <class name="com.myfitnesspal.tests.LoginPageTest"/>
            <class name="com.myfitnesspal.tests.ExercisePageTest"/>
            <class name="com.myfitnesspal.tests.HomePageTest" />
        </classes>
    </test> <!-- Test -->
</suite> <!-- Suite -->

2 个答案:

答案 0 :(得分:2)

创建一个公共类,提及您的设置方法,并使用@BeforeTest对其进行注释,如下所示:

public class BrowserSetup 
{
  @BeforeTest
  public void setUp() throws Exception {

    wte = new ReadWriteExcel();
    extent = new ExtentReports("D://myfitnesspal.html", true);
    extent.addSystemInfo("Environment", "Test Environment");
    test = extent.startTest("Login Functionality");
    driver = BrowserSettings.startBrowser("chrome","https://www.myfitnesspal.com");
    engineDriver=new EngineDriver(driver);
    test.log(LogStatus.PASS, "Executing on Firefox browser");
    }
}
  

@BeforeTest:带注释的方法将在任何属于的测试方法之前运行   <test>标记内的类已运行。

在所需文件中提及您的@Test方法

将此课程加入testing.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
    <test name="Test">
        <parameter name="typeOfCardio" value="Swimming" />
        <parameter name="typeOfStrengthExercise" value="Bench Press" />
        <classes>
            <class name="com.myfitnesspal.tests.BrowserSetup"/>
            <class name="com.myfitnesspal.tests.LoginPageTest"/>
            <class name="com.myfitnesspal.tests.ExercisePageTest"/>
            <class name="com.myfitnesspal.tests.HomePageTest" />
        </classes>
    </test> <!-- Test -->
</suite> <!-- Suite -->

答案 1 :(得分:0)

由于@BeforeMethod和@AfterMethods基本上用作设置和拆卸方法,因此最好将它们保留在基类中。因此,对于这两种方法中的每一种,仅创建一个引用。