java - TestNG 中测试的可重用性
问题描述
我想运行一些自动化测试来测试处理流程工作流的 Web 应用程序。
对于与应用程序本身的接口,我已经编写了一个页面对象模型,它使用 Selenium WebDriver 来与应用程序的多个组件进行交互。
现在我要编写一些测试,这些测试应该允许我为那个特定的应用程序运行一些自动化测试。作为一个测试框架,我想使用TestNG。
但是由于被测应用程序是工作流应用程序,我发现我总是需要先完成流程的某个部分,然后才能进行测试。
示例测试用例 1:将活动添加到达析报告中的某个任务
- 登录到应用程序
- 打开档案 x
- 在档案 x 中打开任务 y
- 将活动 z 添加到档案 x 中的任务 y
示例测试用例 2:为达析报告中的任务添加特定活动的计划
- 登录到应用程序
- 打开档案 x
- 在档案 x 中打开任务 y
- 将活动 z 添加到档案 x 中的任务 y
- 添加活动 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");
}
}
因此,您已经注意到,随着要编写的测试用例数量的增加,这种测试结构是不可维护的,因为我现在总是在到达要完成的实际测试之前先重复相同的步骤......
因此,我想在这里向社区询问如何使所有内容更加可重用并避免在每个测试用例中一遍又一遍地编写重复步骤
所有的想法都非常受欢迎!!
解决方案
我有一个类似的环境,我需要在正确的状态下拥有帐户才能开始我的测试。我制作了一个名为 Accelerators 的包,并打开了一些基于进程的类来将帐户从一个进程移动到另一个进程,以使它们处于正确的状态。我的建议是不要将 @Test 注释放在加速器的方法之上。但是要在实际测试中调用这些加速器类和方法。
如果您有更多问题,请随时问他们。
所以我编辑了我的答案,因为我不能在这里发表很长的评论,哈哈,我是相当新的。
@Hans Mens 所以我所做的是我创建了类和方法,就像流程作为加速器一样。在@BeforeTest 注释中,我调用了我在测试中使用的所有加速器类。然后我从@BeforeTest 注释所在的类扩展了我的测试方法类。这样我就可以使用我在@BeforeTest 中调用的所有对象,而无需在测试类中调用它们,这样我的测试脚本就很干净了。
推荐阅读
- c# - 如何获得 2 项目视图
- python - 如何有效地从字典中提取列中的所有元素,其值是 Python 中的二维列表?
- amazon-web-services - 仅向 VPC 公开 CloudFront
- c - Linux C IO 问题:ctrl+D 一次还是两次?
- python - wx python相当于tkinter更新空闲任务
- angular - HostListener 的通用参数
- python - 大熊猫中大量列的分组
- c++ - 为什么我的项目在移动我用 CMake 制作的单元测试项目时会中断并且无法编译
- javascript - 在 JavaScript 的 for 循环中创建动态 div
- python - Python 函数赋予错误计算最高公因数