我应该在 TestNG 中使用 @Before @After 注释吗?网络驱动程序
Should I be using @Before @After annotations with TestNG? Webdriver
我的问题是,就框架而言,我应该使用@beforemethod @beforetest @aftertest 这样的TestNG 注释吗?或者只是在每个 class?
中都有代码
例如,为什么我要用这些@before 注释调用 firefox 驱动程序?我可以理解,然后我可以重用代码,例如调用 chrome 驱动程序,但大多数时候 运行 chrome 或其他浏览器上的相同测试需要一些修改才能通过, 无论如何我都可以复制整个代码。
那么将代码直接调用到我用于@test 的 class 中是否有意义?
此外,对于@afterTest,我为什么要在那里调用拆解?什么时候我可以在每个 class?
中调用它
有没有advantages/disadvantages使用这些注解而不是直接在class中写代码?
例如,我有这个运行一些测试的文件:
package FireFox;
import org.testng.annotations.Test;
public class TestGroup {
//////////////////////////////////////////////////
@Test(priority=1)
public void SessionTasks() {
Session_Tasks call = new Session_Tasks();
call.sessionTasks();
}
////////////////////////////////////////////////
@Test(priority=2)
public void SignUp () {
Signup call = new Signup();
call.signup();
}
//////////////////////////////////////////////////
@Test(priority=3)
public void Signup_PostQ() {
Signup_PostQs call = new Signup_PostQs();
call.signup_postq();
}
//////////////////////////////////////////////////
@Test(priority=4)
public void Sign_In() {
SignIn call = new SignIn();
call.signIn();
}
//////////////////////////////////////////////////
@Test(priority=5)
public void Sign_In_PostQ() {
SignIn_PostQs call = new SignIn_PostQs();
call.signIn_postq();
}
//////////////////////////////////////////////////
@Test(priority=6)
public void SessionConnect() {
Session_Connect call = new Session_Connect();
call.sessionConnect();
}
//////////////////////////////////////////////////
@Test(priority=7)
public void TutorMenu() {
Tutor_Menu call = new Tutor_Menu();
call.Tutor_menu();
}
}
所有操作都包含在每个 class 中,打开特定浏览器,导航到 url,并在测试结束时关闭浏览器。为什么我要使用任何 @before、@after 注释,而不是将所有内容都包含在每个 class?
中
我认为您想要使用 @Before
和 @After
注释的主要原因是您的初始登录和浏览器测试清理不会显示在您的报告中。如果您将它们留在您的报告中,那么您最终会在您的报告中显示您正在一遍又一遍地测试相同的代码路径。通过将浏览器的创建和拆卸放在外部 @Configuration
方法中,您可以避免这种测试路径重复。
此外,如果您按照推荐的方法在 DataProvider 中生成 WebDriver 实例,然后将驱动程序实例作为参数传递给测试方法,那么您可以使用 @BeforeMethod
注释 在调用测试方法之前获取该驱动程序 并在每个测试方法的主体中使用该驱动程序之前执行任何必要的准备步骤。这是 JUnit 无法做到的 TestNG 的一个被很多人忽视的特性。当然,这样做可以让您 运行 多线程,在一个方法一个方法的基础上,并提高整个测试套件的速度。
使用 @Before 或 @After 或测试代码中的任何其他注释的自由与测试人员完全一致。
- 在测试代码中使用注释的最基本原因是
使您的代码 易于阅读 并且 易于理解其他
测试人员。提供干净的代码。
- 使用@Before、@After、@BeforeClass 或许多其他注释
帮助您减少再次编写重复代码的工作和时间
再次。这是在您的测试中重复相同操作的 聪明的方法
执行而不实际再次写入.
- 测试用例可以更容易地分组导致高效
并行测试。
- 将在测试套件中非常有效地使用此类注释。在
我们通常会遇到依赖性的测试套件。这个依赖项
各种测试用例之间由 Pre-conditons 和
编写
Post-条件。这些先决条件和 post-条件我们可以
通过使用这样的注释非常有效和高效地处理。
虽然它不是使用此类注释的经验法则,但在测试代码中需要时使用它们被认为是一种很好的做法。
希望这能解决您对框架使用注释的困惑或问题。
我的问题是,就框架而言,我应该使用@beforemethod @beforetest @aftertest 这样的TestNG 注释吗?或者只是在每个 class?
中都有代码例如,为什么我要用这些@before 注释调用 firefox 驱动程序?我可以理解,然后我可以重用代码,例如调用 chrome 驱动程序,但大多数时候 运行 chrome 或其他浏览器上的相同测试需要一些修改才能通过, 无论如何我都可以复制整个代码。
那么将代码直接调用到我用于@test 的 class 中是否有意义?
此外,对于@afterTest,我为什么要在那里调用拆解?什么时候我可以在每个 class?
中调用它有没有advantages/disadvantages使用这些注解而不是直接在class中写代码?
例如,我有这个运行一些测试的文件:
package FireFox;
import org.testng.annotations.Test;
public class TestGroup {
//////////////////////////////////////////////////
@Test(priority=1)
public void SessionTasks() {
Session_Tasks call = new Session_Tasks();
call.sessionTasks();
}
////////////////////////////////////////////////
@Test(priority=2)
public void SignUp () {
Signup call = new Signup();
call.signup();
}
//////////////////////////////////////////////////
@Test(priority=3)
public void Signup_PostQ() {
Signup_PostQs call = new Signup_PostQs();
call.signup_postq();
}
//////////////////////////////////////////////////
@Test(priority=4)
public void Sign_In() {
SignIn call = new SignIn();
call.signIn();
}
//////////////////////////////////////////////////
@Test(priority=5)
public void Sign_In_PostQ() {
SignIn_PostQs call = new SignIn_PostQs();
call.signIn_postq();
}
//////////////////////////////////////////////////
@Test(priority=6)
public void SessionConnect() {
Session_Connect call = new Session_Connect();
call.sessionConnect();
}
//////////////////////////////////////////////////
@Test(priority=7)
public void TutorMenu() {
Tutor_Menu call = new Tutor_Menu();
call.Tutor_menu();
}
}
所有操作都包含在每个 class 中,打开特定浏览器,导航到 url,并在测试结束时关闭浏览器。为什么我要使用任何 @before、@after 注释,而不是将所有内容都包含在每个 class?
中我认为您想要使用 @Before
和 @After
注释的主要原因是您的初始登录和浏览器测试清理不会显示在您的报告中。如果您将它们留在您的报告中,那么您最终会在您的报告中显示您正在一遍又一遍地测试相同的代码路径。通过将浏览器的创建和拆卸放在外部 @Configuration
方法中,您可以避免这种测试路径重复。
此外,如果您按照推荐的方法在 DataProvider 中生成 WebDriver 实例,然后将驱动程序实例作为参数传递给测试方法,那么您可以使用 @BeforeMethod
注释 在调用测试方法之前获取该驱动程序 并在每个测试方法的主体中使用该驱动程序之前执行任何必要的准备步骤。这是 JUnit 无法做到的 TestNG 的一个被很多人忽视的特性。当然,这样做可以让您 运行 多线程,在一个方法一个方法的基础上,并提高整个测试套件的速度。
使用 @Before 或 @After 或测试代码中的任何其他注释的自由与测试人员完全一致。
- 在测试代码中使用注释的最基本原因是 使您的代码 易于阅读 并且 易于理解其他 测试人员。提供干净的代码。
- 使用@Before、@After、@BeforeClass 或许多其他注释 帮助您减少再次编写重复代码的工作和时间 再次。这是在您的测试中重复相同操作的 聪明的方法 执行而不实际再次写入.
- 测试用例可以更容易地分组导致高效 并行测试。
- 将在测试套件中非常有效地使用此类注释。在
我们通常会遇到依赖性的测试套件。这个依赖项
各种测试用例之间由 Pre-conditons 和
编写 Post-条件。这些先决条件和 post-条件我们可以
通过使用这样的注释非常有效和高效地处理。
虽然它不是使用此类注释的经验法则,但在测试代码中需要时使用它们被认为是一种很好的做法。 希望这能解决您对框架使用注释的困惑或问题。