我想从所有测试用例类扩展BaseClass。对于某些测试用例,我想使用管理员凭据登录,对于某些用例,我要使用客户登录。
以前,此代码正常运行,因为launchBrowserAndLogin()方法没有任何参数。
有什么方法可以扩展带有参数的类?请建议我解决此问题的方法。
这是我的代码:
public class BaseClass {
public BaseClass() {
}
@BeforeMethod
public void launchBrowserAndLogin(String userType) {
if(userType.equals("Admin")) {
launchBrowserAndUrl(Constants.ADMIN_URL);
login(Constants.ADMIN_USER_NAME, Constants.ADMIN_USER_PASSWORD);
}
if(userType.equals("Customer")) {
launchBrowserAndUrl(Constants.CUSTOMER_TEST_URL);
login(Constants.CUSTOMER_USER_NAME, Constants.CUSTOMER_USER_PASSWORD);
}
}
@AfterMethod
public void tearDown() {
TestDriver.getDriver().quit();
}
}
public class AssignEditDeleteRoleAccessibilityTest extends BaseClass {
CreateUser newUser = new CreateUser();
RoleAssignmentAccessValidation roleAccessValidation = new RoleAssignmentAccessValidation();
@DataProvider(name = "AssignEditDeleteRoleAccessibilityTest")
public static Object[] roleNames() {
return new Object[] {Constants.AGENCY_ASSISTANT_ROLE_NAME, Constants.OPS_MANAGER_ROLE_NAME};
}
@Test ( priority=1, dataProvider = "AssignEditDeleteRoleAccessibilityTest")
public void assignRoleAccessTest(String roleName) {
newUser.createUserAssignRoleAndLogin(roleName);
boolean isAssignRoleOptionAvailable =roleAccessValidation.assignRoleAccess();
assertEquals(isAssignRoleOptionAvailable, false);
}
}
现在我遇到错误:失败的配置:@BeforeMethod launchBrowserAndLoginorg.testng.TestNGException:只能将其中之一注入@BeforeMethod注释的launchBrowserAndLogin。
[我认为您应该将BaseClass
分成AdminClass
和CustomerClass
之类的东西-这既可以解决您的问题,也可以帮助您更好地组织测试,因为现在您将知道该情况受测的是Customer
或Admin
视图:
public class CustomerClass {
public CustomerClass() {
}
@BeforeMethod
public void launchBrowserAndLogin() {
launchBrowserAndUrl(Constants.CUSTOMER_TEST_URL);
login(Constants.CUSTOMER_USER_NAME, Constants.CUSTOMER_USER_PASSWORD);
}
@AfterMethod
public void tearDown() {
TestDriver.getDriver().quit();
}
}
和管理类:
public class AdminClass{
public AdminClass() {
}
@BeforeMethod
public void launchBrowserAndLogin() {
launchBrowserAndUrl(Constants.ADMIN_URL);
login(Constants.ADMIN_USER_NAME, Constants.ADMIN_USER_PASSWORD);
}
@AfterMethod
public void tearDown() {
TestDriver.getDriver().quit();
}
}
然后,您的测试用例类可能如下所示:
public class AssignEditDeleteRoleAccessibilityTest extends CustomerClass{ // or AdminClass
CreateUser newUser = new CreateUser();
RoleAssignmentAccessValidation roleAccessValidation = new RoleAssignmentAccessValidation();
@DataProvider(name = "AssignEditDeleteRoleAccessibilityTest")
public static Object[] roleNames() {
return new Object[] {Constants.AGENCY_ASSISTANT_ROLE_NAME, Constants.OPS_MANAGER_ROLE_NAME};
}
@Test ( priority=1, dataProvider = "AssignEditDeleteRoleAccessibilityTest")
public void assignRoleAccessTest(String roleName) {
newUser.createUserAssignRoleAndLogin(roleName);
boolean isAssignRoleOptionAvailable =roleAccessValidation.assignRoleAccess();
assertEquals(isAssignRoleOptionAvailable, false);
}
}
[这将解决您的错误,但我也认为这是意见和个人设计的问题-test fixture的概念(分别代表BaseClass
/AdminClass
/ CustomerClass
的含义)以许多不同的方式实施。我个人认为,在“组织”和可维护性方面,为每个“开始”场景都配备一个固定装置会更好-如果AdminClass
变得更加复杂,则此代码将与CustomerClass
并存。
即使这不是您的首选答案,也希望这至少为您提供了另一种思考未来的方法。