![](/img/trans.png)
[英]How to pass parameters to @BeforeClass & @AfterClass methods through testNG.xml file
[英]How to execute testng.xml file which contains test classes having the same @BeforeClass methods
直到现在我已经编写了页面特定的测试,这些测试只关注页面特定的场景。 例如:LoginPageTest.java 包含测试仅与登录页面相关的场景的测试。
现在我已经自动化了几个页面,我想将所有这些页面集成到我的testng.xml
问题是 - 假设我想测试 3 个测试类( LoginPageTest.java、 testng.xml
和 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
方法中,我正在从 Excel 工作表中读取来宾的电子邮件 ID 和密码并登录到应用程序。
@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 -->
创建一个公共类,在其中提及您的设置方法并使用@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 -->
由于@BeforeMethod 和@AfterMethods 基本上用作设置和拆卸方法,因此最好将它们保留在基类中。 因此,只为这两种方法中的每一种创建一个引用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.