Selenium WebDriver - 使用其他测试的测试

时间:2015-07-23 15:36:31

标签: automated-tests junit4

举个例子,我有:

@Test
public void login(*Code ommitted*){

测试登录网站。

然后我想做一些从登录开始的其他测试,所以我得到了:

@Test
public void sendUserInvite(){
login();
*Other code omitted*
}

有些东西直观地告诉我这是非常糟糕的做法,但同时如果登录测试做了我需要它,那么为什么不以这种方式重复使用呢?任何人都可以澄清这一点。过了一会儿,我最后在另一个测试开始时做了几次测试,因为它们是进行特定测试的前提条件。

3 个答案:

答案 0 :(得分:0)

如果您使用的是TestNG,则可以使用@BeforeClass@BeforeSuite@BeforeTest@BeforeMethod等,以便在您{之前的某个步骤中启动前提条件{1}}方法

E.g。你在xml中有2个测试:

@Test

我们假设<suite name="Suite0" verbose="1" > <test name="name0" > <classes> <class name="Test0" /> </classes> </test> <test name="name1"> <classes> <class name="Test1"/> </classes> </test> </suite> Test0都扩展了类Test1

然后在BaseTest

BaseTest

因此,启动套件时,将调用login方法。请注意public class BaseTest { @BeforeTest public void login() { // smth w/ login } } 适用于套件中的每个测试,而不适用于@BeforeTest的每个方法,这有时会让人感到困惑。

<强> UPD

如果您使用的是 JUnit ,则可以使用@Test,并且可以在课程中的每个@Before之前运行带有它的方法。也就是说,它与 TestNG

中的@Test相同
@BeforeMethod

执行顺序:

  

登录

     

A

     

退出

     

登录

     

B

     

注销

答案 1 :(得分:0)

根据以下链接,JUnit测试用例被设计为独立运行,每个测试应该彼此独立。我相信你必须重新考虑你的设计并选择像TestNG这样的测试框架,它完全符合你的要求。

Choose order to execute JUnit tests

running a subset of JUnit @Test methods

How to run test methods in specific order in JUnit4?

答案 2 :(得分:0)

如果您觉得需要从另一个测试方法中调用一个测试方法,那么这是一个需要提取类的好兆头。

我建议将login移到PageObject班级:

public class HomePage {
  private final WebDriver driver;

  public HomePage(WebDriver driver) {
    this.driver = driver;
  }

  public WelcomePage login(String userName, String password) {
    signIn(userName, password);
    Assert.assertEquals("sign in failed", userName, getSignedInUser());

    return new WelcomePage(driver, userName);
  }

  private void signIn(String userName, String password) {
    // Add code to perform the sign in
  }

  public String getSignedInUser() {
    // Add code to check the current page to see who is reported
    // as the signed in user
  }
}

然后你的测试看起来像这样:

@Test
public void login() {
  HomePage page = new HomePage(driver);

  page.login(TEST_USER_NAME, TEST_PASSWORD);
}

@Test
public void sendUserInvite() {
  WelcomePage page = new HomePage(driver)
      .login(TEST_USER_NAME, TEST_PASSWORD);

  page.sendUserInvite(NON_USER_EMAIL_ADDRESS);
}

当然,您的页面对象也可能有一些代码重复(例如,获取登录用户可能是一个常见的问题)。发生这种情况时,您可以为所有页​​面对象提取基类,也可以为常用逻辑提取辅助类。