java - TestNG 中测试的可重用性

标签 java selenium testng

我想运行一些自动化测试来测试处理流程工作流的 Web 应用程序。

对于与应用程序本身的接口(interface),我已经编写了一个页面对象模型,它利用 Selenium WebDriver 来与应用程序的多个组件进行交互。

现在我即将编写一些测试,这些测试应该允许我为该特定应用程序运行一些自动化测试。作为测试框架,我想使用 TestNG。

但是由于被测试的应用程序是一个工作流应用程序,我发现我总是需要先完成流程的某个部分,然后再进行测试。

示例测试用例 1:向达析报告中的特定任务添加 Activity

  1. 登录应用程序
  2. 打开文件 x
  3. 在达析报告 x 中打开任务 y
  4. 将 Activity z 添加到达析报告 x 中的任务 y

示例测试用例 2:为达析报告中的任务添加特定 Activity 的计划

  1. 登录应用程序
  2. 打开文件 x
  3. 在达析报告 x 中打开任务 y
  4. 将 Activity z 添加到达析报告 x 中的任务 y
  5. 添加 Activity z 的计划

正如您从上面的示例中看到的,我总是需要自己完成一定数量的类似步骤,然后才能进行实际测试。

作为我自己的起点,我开始编写 TestNG 类。一个用于测试用例 1,第二个用于测试用例 2。然后,在每个测试类中,我实现了许多与测试步骤相对应的测试方法。

请参阅下面的测试用例 1 的示例代码:

public class Test_Add_Activity_To_Task_In_Dossier extends BaseTestWeb {

private Dossier d;
private Task t;

@Test
public void login() {
    System.out.println("Test step: login");
}

@Test(dependsOnMethods = "login")
public void open_dossier() {
    System.out.println("Test step: open dossier");
}

@Test(dependsOnMethods = "open_dossier")
public void open_task() {
    System.out.println("Test step: open task");
}

@Test(dependsOnMethods = "open_task")
public void add_activity() {
    System.out.println("Test step: add activity");
}

}

这里是测试用例 2 的示例代码:

public class Test_Add_Planning_For_Activity_To_Task_In_Dossier extends BaseTestWeb {

private Dossier d;
private Task t;

@Test
public void login() {
    System.out.println("Test step: login");
}

@Test(dependsOnMethods = "login")
public void open_dossier() {
    System.out.println("Test step: open dossier");
}

@Test(dependsOnMethods = "open_dossier")
public void open_task() {
    System.out.println("Test step: open task");
}

@Test(dependsOnMethods = "open_task")
public void add_activity() {
    System.out.println("Test step: add activity");
}

@Test(dependsOnMethods = "add_activity")
public void add_planning() {
    System.out.println("Test step: add planning");
}

}

因此,正如您已经注意到的那样,随着要编写的测试用例数量的增加,这种测试结构是不可维护的,因为我现在总是在进行实际测试之前先重复相同的步骤。 .

因此,我想向社区询问如何才能使所有内容更加可重用,并避免在每个测试用例中一遍又一遍地编写重复的步骤

欢迎所有想法!!

最佳答案

根据我的理解,您希望删除每个测试用例之前正在执行的重复操作,例如

Login to application
Open dossier x
Open task y within dossier x

您可以使用@BeforeMethod,这样它将在每个测试用例之前执行这些先决条件任务(基本上您可以保留每个测试之前需要的常见任务)。

   @BeforeMethod
    public void setUp()
    {           
     login();   
     open_dossier();
     open_task();
    }

测试用例 - 1

@Test
     public void testAddActivity() 
{
add_activity();
}

测试用例 - 2

@Test
     public void testAddPlanning() 
{
add_planning()
}

关于java - TestNG 中测试的可重用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59856889/

相关文章:

ios - 出现 "Use current location"权限弹窗时 Appium 和 Selenium 连接失败

java - 通用化在页面工厂模型 + selenium Java 中创建的 Web 元素的 xpath

java - 如何使用 maven 和 testng 在所有浏览器中运行特定测试?

java - Android Context.bindService 始终返回 false 并且永远不会触发 ServiceConnection 对象

java - Groovy JasperReport 缺少方法异常,可能的解决方案被列为我调用的方法

java - JHipster - 在 build.gradle 中放置附加模块/插件的位置

selenium - 选择文本并执行单击操作

java - 在 java web start 应用程序中禁用字节码验证

eclipse - TestNG 中的当前调用计数

java - 如何在 testng 工厂类中使用 spring Autowiring