多个测试类 只使用同一个浏览器,同一个driver对象, 或者同一个页面的对象

如果是:多个测试类 只使用同一个浏览器,同一个driver对象, 或者同一个页面的对象,
只需要:
1. 创建一个基本的测试类(BaseTest),具有一个公共静态的driver属性, public static WebDriver driver
2. 给BaseTest类一个@Test(groups={"functionTests","checkinTests"})方法,
3. BaseTest类中创建@beforeTest,@afterTest注解的方法, 不要创建@Test注解的方法,
4. 其实,如果是PageObject设计模式,每个页面的对象创建也可以放在基础类BaseTest中,
5. 其他的测试类继承这个基本的测试类BaseTest, 此时,所有的测试类就具有了一个共同的唯一的" driver ", 页面对象句柄。
6. 给其他类中的方法也加上@Test(groups={"functionTests","checkinTests"})的注解,注解根据需要来设置。
7. 当前也可以在其他类的类上声明@Test(groups={"functionTests","checkinTests"})注解。
8. 如果某个测试类中有多个@Test注解的方法,则需要指定所有类中方法的执行顺序,而不是单个类中的,priority=0,开始
9. 经过实验,发现每个测试类执行都是从默认的priority=0开始,
如果只指定一个类中的测试方法的顺序,此时一起执行全部测试类时,不会按照类的顺序进行执行,而是会按照默认的priority来执行
由于每个测试中的测试方法默认的priority=0,所以testng会先将priority=0的方法执行完毕后,才会执行priority=1,2,3...

基础测试类

@Test(groups={"functionTests","checkinTests"})
public class BaseTest {
    public static WebDriver driver;
    
     @BeforeTest
     public void before(){
         System.setProperty("webdriver.chrome.driver", "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe");
         driver = new ChromeDriver();
         driver.manage().window().maximize();
         driver.get("https://www.sogou.com/");
     }
    
      @AfterTest
      public void after() throws Exception{
          Thread.sleep(2000);
          driver.close();
          driver.quit();
      }
}

测试类

@Test(groups={"functionTests","checkinTests"})
public class TEST2 extends BaseTest{
    
     @Test(priority=0)
    public void TWO1(){
        System.out.println("TWO1");
        driver.findElement(By.className("sec-input")).sendKeys("testTWO--1--");
        
    }
     @Test(priority=1)
    public void TWO2(){
        System.out.println("TWO2");
        driver.findElement(By.className("sec-input")).sendKeys("testTWO--2--");
        
    }
     @Test(priority=2)
    public void TWO3(){
        System.out.println("TWO3");
        driver.findElement(By.className("sec-input")).sendKeys("testTWO--3--");
        
    }
}

测试类

public class TEST3 extends BaseTest{

    @Test(groups={"functionTests","checkinTests"},priority=3)
    public void THREE(){
        System.out.println("33333333333333333");
        driver.findElement(By.className("sec-input")).sendKeys("testTHREE----");
        
    }
}

测试类

public class TEST4 extends BaseTest{

    @Test(groups={"functionTests","checkinTests"},priority=4)
    public void FOUR(){
        System.out.println("444444444");
        driver.findElement(By.className("sec-input")).sendKeys("testFOUR----");
        
    }
}

testng.xml文件配置如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="classes" thread-count="1">
 
    <test verbose="10" preserve-order="true" name="TestDebug">  
        <groups>
            <run>
              <exclude name="brokenTests" />
              <include name="functionTests" />
            </run>
        </groups>
      
        <classes>
         <class name = "com.test.ztest.Test.TEST2"/>
           <class name = "com.test.ztest.Test.TEST3"/>
           <class name = "com.test.ztest.Test.TEST4"/>
            
        </classes>

    </test> <!-- Test -->
</suite> <!-- Suite -->

 

分享完成,如有更好的方法,请不令赐教。

 

posted @ 2017-08-20 17:26  心悦飞飞  阅读(717)  评论(0编辑  收藏  举报