我为所有具有定义为@BeforeMethod的测试的基类提供了适合大多数测试的基类(我正在测试admin UI,因此我通常希望在测试前以管理员身份登录,然后在测试后注销)-但有时我会喜欢跳过此方法或在扩展我的基类的类中使用其他方法覆盖它。

public class AbstractWebDriverTest {

    @BeforeMethod
    public void preparePage() {
        driver.get("somePage");
        signInAsAdmin();
    }

}

public class TestConfigWithOtherUser extends AbstractWebDriverTest {

    //now I want to skip before method and sign as a different user instead

    @Test
    public void someTestWithDifferentUser() { }

}


所以我想我可以通过某种方式使用组来解决此问题,但是有一种方法可以覆盖init方法吗?

最佳答案

我可以按照您在问题中所说的对测试进行分组,也可以例外。如果只有少数几种情况例外,则在这种情况下的测试必须期望您以管理员身份开始。我在Java伪代码中的想法:

 @Test
 public void someTestWithDifferentUser() {
  logout();
  logInAsDifferentUser();
  doSomeStuff();
 }


我的另一个想法是引入User类,它可能看起来像这样:

public class User{
  private String username;
  private String password;

  public User(String username, String password){
    this.username = username;
    this.password = password;
  }

  public String getUsername(){
    return username;
  }

  public String getPassword(){
    return password;
  }

}


然后,在测试中,您将拥有一个全局变量:

public static final User DEFAULT_USER = new User("admin","AdminSecretPassword");


您的测试将如下所示:

@Test
public void doAdminStuff(){
 loginAsUser(DEFAULT_USER);
 doAdminStuff;
}

@Test
public void doUserStuff(){
 loginAsUser(new User("testytester","testytest"));
 doUserStuff();
}


@BeforeMethod将完全避免登录的位置。

09-25 17:48