当前位置: 首页 > 知识库问答 >
问题:

我应该在TestNG中使用@Before@After注释吗?网络驱动程序

督劲
2023-03-14

我的问题是,就框架而言,我应该使用@beforemethod@beforetest@postertest这样的TestNG注释吗?或者在每个类中都有代码?

例如,为什么我要用这些@before注释调用firefox驱动程序?我可以理解,然后我可以重用代码,比如调用一个chrome驱动程序,但是大多数时候在chrome或其他浏览器上运行相同的测试需要一些修改才能通过,而且我可以复制整个代码。

那么,将代码或直接调用代码到我用于@test的类中是否有意义呢?

还有,有了“事后测试”,我为什么要在那里称之为拆卸?当我可以在每节课上打电话的时候?

使用这些注释而不是直接在类中编写代码有什么优点/缺点吗?

例如,我有一个运行一些测试的文件:

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();
}

}

所有操作都包含在每个类中,打开特定的浏览器,导航到url,并在测试结束时关闭浏览器。为什么我要使用@before、@after注释,而不是将所有内容都包含在每个类中?

共有2个答案

蒋向笛
2023-03-14

我认为您希望在之前和之后使用@注释的主要原因是,您的初始登录和浏览器测试清理不会显示在您的报告中。如果您将它们留在报告中,那么您最终会在报告中显示您正在反复测试相同的代码路径。通过将浏览器创建和拆卸放在外部@Configuration方法中,可以避免此测试路径重复。

此外,如果您遵循在数据提供程序中生成WebDriver实例的推荐方法,该方法反过来将驱动程序实例作为参数传递给测试方法,然后,您可以使用@BeforeMethod注释在调用测试方法之前获取该驱动程序,并在每个测试方法主体中使用该驱动程序之前执行任何必要的准备步骤。这是TestNG的一个被忽视的特性,JUnit无法做到这一点。当然,这样做可以让您逐个方法地运行多线程,并提高整个测试套件的速度。

党浩阔
2023-03-14

测试人员完全可以自由地在测试代码中使用@Before或@After或任何其他注释。

  • 测试代码中使用注释的最基本原因是它使您的代码易于阅读,并且易于其他测试人员理解。提供清洁代码。
  • 使用注释,如@之前,@之后,@BeforeClass或许多其他注释,可以帮助您减少一次又一次编写重复代码的工作和时间。这是一种聪明的方法,可以在测试执行中重复相同的操作,而无需再次编写。
  • 测试用例可以更容易地分组,从而实现高效的并行测试。
  • 测试套件将非常有效地使用此类注释。在测试套件中,我们通常会遇到依赖关系。各种测试用例之间的这种依赖关系是由Pre-conditons和
    Post条件编写的。通过使用这样的注释,我们可以非常有效地处理这些前条件和后条件。

虽然这不是使用此类注释的经验法则,但在测试代码中需要时使用它们是一种很好的实践。希望这能解决您关于在框架中使用注释的困惑或问题。

 类似资料:
  • 我正在使用SeleniumWebDriver进行网站测试。现在我想在SeleniumWebDriver中设置TestNG。怎么可能呢?testng有JAR文件吗?

  • 我们如何使用Testng在硒网络驱动程序中选择下拉值?

  • 由于请求的不同用法和注释,我一直很困惑

  • 我仍在学习自动化测试,并且一直在研究一些测试框架。我发现有两种方法可以帮助人们启动WebDriver。 有些人在BeforeClass中启动它(使用TestNG),它使驱动程序在整个类测试中保持活动状态,包括许多测试用例 其他组在每个测试用例@test或@BeforeTest中启动WebDriver,以便它们可以为每个类创建新的WebDriver 我们需要在哪里启动WebDriver?非常感谢。

  • 我的目标是使用硒为Python自动在线账单支付。 使用以下代码使用 Web 驱动程序登录成功: 登录后,一个新的页面加载,我的下一步是点击一个链接。代码: 什么也没发生。没有导航到该法案 但仍然没有。我还应该尝试其他什么? 错误: Traceback(最近调用的最后一次):File"/home/队长/. PyCharmEdu30/config/划痕/scratch_1.py",第12行,在clic

  • gmail的登录代码后,我正在尝试用下面的代码执行注销操作-但我失败了:( 请建议我正确的方法来写下gmail注销的代码。 注意:在Eclipse控制台中,我观察到以下日志: 线程“主”组织 openqa.硒.无效选择器异常:给定的选择器gb_X gbii 无效或未导致 Web 元素。发生以下错误: 无效选择错误: 不允许复合类名 命令持续时间或超时: 16 毫秒