Java TestNG&;Selenium:对具有依赖关系的实体执行CRUD操作

Java TestNG&;Selenium:对具有依赖关系的实体执行CRUD操作,java,selenium,selenium-webdriver,automation,testng,Java,Selenium,Selenium Webdriver,Automation,Testng,我不熟悉Selenium和TestNG,无法按顺序执行脚本。 我必须对组、用户、位置、设备、配置文件、角色等实体执行CRUD操作,这些实体之间存在依赖关系 我已经为我在每个实体上执行的每个操作(usin annotation)创建了一个单独的组,如上面每个实体的addGroup、editGroup、deleteGroup等等。 一些实体依赖于其他实体 添加组 @Test(dependsOnGroups={"loginGroup"},groups="addGroup&

我不熟悉Selenium和TestNG,无法按顺序执行脚本。 我必须对组、用户、位置、设备、配置文件、角色等实体执行CRUD操作,这些实体之间存在依赖关系

我已经为我在每个实体上执行的每个操作(usin annotation)创建了一个单独的组,如上面每个实体的addGroup、editGroup、deleteGroup等等。 一些实体依赖于其他实体

添加组

@Test(dependsOnGroups={"loginGroup"},groups="addGroup")
 public void AddGroup() {}
编辑组

@Test(dependsOnGroups={"loginGroup"},groups="addGroup")
 public void AddGroup() {}
editGroup依赖于addGroup操作,如下所示

@Test(dependsOnGroups = { "loginGroup","addGroup"}, groups = "editGroup")
 public void editGroup() {}
删除组

@Test(dependsOnGroups={"loginGroup"},groups="addGroup")
 public void AddGroup() {}
添加位置

AddLocation操作依赖于AddGroup

@Test(dependsOnGroups = {"loginGroup", "addGroup" }, groups = "addLocation")
 public void addLocation() {}
编辑位置

editLocation依赖于AddLocation

@Test(dependsOnGroups = { "loginGroup","addLocation"}, groups = "editLocation")
 public void editLocation() {}
删除位置

deleteLocation依赖于addLocation操作

@Test(dependsOnGroups={"loginGroup","addLocation"},groups="deleteLocation")
 public void deleteLocation(String locationId) {}
@Test(dependsOnGroups = { "loginGroup", "addRole", "deleteUser" }, groups = "deleteRole")
 public void deleteRole() { }
@Test(dependsOnGroups = { "loginGroup","addUser"}, groups = "editUser")
 public void editUser() { }
添加角色

编辑角色

editRole依赖于addRole

@Test(dependsOnGroups = { "loginGroup","addRole"}, groups = "editRole")
 public void editRole() {}
删除角色

deleteRole依赖于addLocation操作

@Test(dependsOnGroups={"loginGroup","addLocation"},groups="deleteLocation")
 public void deleteLocation(String locationId) {}
@Test(dependsOnGroups = { "loginGroup", "addRole", "deleteUser" }, groups = "deleteRole")
 public void deleteRole() { }
@Test(dependsOnGroups = { "loginGroup","addUser"}, groups = "editUser")
 public void editUser() { }
添加用户

AddUser操作依赖于AddLocation、AddGroup和AddRole操作

@Test(dependsOnGroups = {"loginGroup", "addGroup", "addLocation","addRole"}, groups = "addUser")
 public void AddUser() { }
编辑用户

editUser操作依赖于addUser操作

@Test(dependsOnGroups={"loginGroup","addLocation"},groups="deleteLocation")
 public void deleteLocation(String locationId) {}
@Test(dependsOnGroups = { "loginGroup", "addRole", "deleteUser" }, groups = "deleteRole")
 public void deleteRole() { }
@Test(dependsOnGroups = { "loginGroup","addUser"}, groups = "editUser")
 public void editUser() { }
删除用户

删除用户操作取决于addUser操作

@Test(dependsOnGroups = { "loginGroup","addUser"}, groups = "deleteUser")
 public void deleteUser(String userId) throws Exception {}
现在我想以套件的形式运行这个操作,下面是以套件的形式运行这个脚本的代码

@Test(dependsOnGroups={"addGroup","addLocation","addRole","addUser",
   "editGroup","editLocation","editRole","editUser",
   "deleteUser","deleteLocation","deleteRole","deleteGroup"})
 public void startSuite() {}

当我运行我的套件时,它将在添加用户之前删除位置,因此addUser操作将终止。

我认为您有点过于复杂化了这个场景,在类中分别对每个实体进行测试不是更容易吗

@Test(dependsOnGroups = {"loginGroup", "groupCrud", "locationCrud","roleCrud"}, 
       groups = "userCrud")
public TestUserCrudOperations {

    @Test(priority = 0)
    public void addUser() {}

    @Test(priority = 1) 
    public void editUser() {}

    @Test(priority = 2)
    public void deteleUser() {}

   //method with lower priority is executed first

}

通过将测试分成这样的类,您将获得更多可读性和可维护性的代码(并且您将避免有太多具有困难依赖关系的组)。

感谢您的快速回复,但我的addUser()依赖于addGroup()、addLocation()、addRole()。我怎么能提到这一点呢?请参阅我的编辑,只需在每个类上添加
@Test
注释,这样可以避免在每个测试中指定测试组。但是,请记住,测试应该尽可能独立,因此例如
loginggroup
可以重构为一些
@BeforeSuite
方法(当然这取决于您的场景).我明白了,但当我在dependsOnGroups中提到locationCrud时,它将对Location执行添加、更新和删除,但我不想在addUser()之前执行删除,所以我如何处理此场景。我已按照建议的方法更新了代码,但在执行userCrud测试时,它正在执行groupCrud操作,但它是在创建组后删除组,我正在使用它,而创建用户时,我正在丢失一些东西?