TestNG小结

1、TestNG是什么:是Java中的一个测试框架,即可以做单元测试,也可以做集成测试。

2、TestNG的特点:注解;灵活的测试配置;测试例可以更容易地进行分组;实现测试并行;支持数据驱动测试;内置的报告。

3、TestNG注解

@BeforeSuite:在此套件中的所有测试运行之前运行。

@AfterSuite:在此套件中的所有测试运行之后运行。

@BeforeTest:在运行属于<test>标签内的类的任何测试方法之前运行。

@AfterTest:在运行属于<test>标签内的类的所有测试方法都已运行之后运行。

@BeforeGroups:在调用属于该组的第一个测试方法之前运行。

@AfterGroups:在调用属于组的最后一个测试方法之后运行。

@BeforeClass:在当前类的第一个测试方法之前运行。

@AfterClass:运行当前类中的所有测试方法之后都运行。

@BeforeMethod:每个测试方法之前运行。

@AfterMethod:每个测试方法之后运行。

4、TestNG套件测试类

第一个测试类:

@BeforeSuite
public void beforeSuite() {
    System.out.println("beforeSuite");
}

@AfterSuite
public void afterSuite() {
    System.out.println("afterSuite");
}

@BeforeTest
public void beforeTest() {
    System.out.println("beforeTest");
}

@AfterTest
public void afterTest() {
    System.out.println("afterTest");
}

第二个测试类:

@Test
public void test() {
    System.out.println("test");
}

@Test
public void test1() {
    System.out.println("test1");
}

创建一个XML文件一起运行多个测试用例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<!-- @BeforeSuite -->
<suite name="TestAll">

    <!-- @BeforeTest -->
    <test name="case1">
        <classes>
            <class name="com.fu2.TestConfiguration"/>
            <class name="com.fu2.TestDBConnection"/>
            <class name="com.fu2.DBConfig"/>
        </classes>
    </test>
    <!-- @AfterTest -->

    <!-- @BeforeTest -->
    <test name="case2">
        <classes>
            <class name="com.fu2.TestDBConnection"/>
            <class name="com.fu2.DBConfig"/>
        </classes>
    </test>
    <!-- @AfterTest -->

</suite>
<!-- @AfterSuite -->

5、TestNG异常测试

1.运行时异常

@Test(expectedExceptions = ArithmeticException.class)
public void test() {
    int i = 1 / 0;
    System.out.println(i);
}

2.检查异常

定义一个类:

private String id;
private String name;

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

自定义异常:

public class OrderSaveException extends RuntimeException {
    public OrderSaveException(String message) {
        super(message);
    }
}

在其他方法抛出自定义异常:

public void save(Order order) throws OrderSaveException{
    if (order == null){
        throw new OrderSaveException("为空");
    }
}

验证:

OrderBo orderBo = new OrderBo();
Order o = new Order();

@Test()
public void throwIfOrderIsNull() throws OrderSaveException {
    orderBo.save(null);
}

6、TestNG忽略测试

@Test(enabled = false)注释在测试方法上,禁用此测试用例。

//不禁用此测试用例
@Test(enabled = true)
public void test() {
    Assert.assertEquals(true, true);
}

//禁用此测试用例
@Test(enabled = false)
public void test1() {
    Assert.assertEquals(true, true);
}

7、TestNG超时测试

“超时”表示如果单元测试花费的时间超过指定的毫秒数,那么Test将会中止它并将其标记为失败。

@Test(timeOut = 5000)
public void test() throws InterruptedException {
    Thread.sleep(4000);
}

@Test(timeOut = 1000)
public void test1() {
    while (true) {
    }
}

8、分组测试:将方法调度到适当的部分,并执行复杂的测试方法分组。

1.在方法上的分组:

@BeforeGroups("database")
public void test1() {
    System.out.println("test1");
}

@AfterGroups("database")
public void test2() {
    System.out.println("test2");
}

@Test(groups = "selenium-test")
public void test3() {
    System.out.println("test3");
}

@Test(groups = "selenium-test")
public void test4() {
    System.out.println("test4");
}

@Test(groups = "database")
public void test5() {
    System.out.println("test5");
}

@Test(groups = "database")
public void test6() {
    System.out.println("test6");
}

@Test(dependsOnGroups = {"database", "selenium-test"})
public void test7() {
    System.out.println("test7");
}

2.在类上的分组:

@Test(groups = "selenium-test")
public class TestSelenium {
    public void test8() {
        System.out.println("test8");
    }

    public void test9() {
        System.out.println("test9");
    }

9、TestNG依赖测试:使用dependOnMethods和dependOnGroups来实现依赖测试。如果依赖方法失败,将跳过所有后续测试方法。

1.dependOnMethods示例:方法一通过,执行方法二。方法一不通过,则跳过方法二。

@Test
public void method1() {
    System.out.println("method1");
}

@Test(dependsOnMethods = {"method1"})
public void method2() {
    System.out.println("method2");
}

2.dependOnGroups示例:

创建第一个类:

@Test(groups = "deploy")
public class TestServer {
    @Test
    public void test() {
        System.out.println("test...");
    }

    @Test(dependsOnMethods = "test")
    public void test1() {
        System.out.println("test1...");
    }
}

创建第二个类:

@Test(groups = "db", dependsOnGroups = "deploy")
public void test2() {
    System.out.println("test2...");
}

@Test(dependsOnMethods = {"test2"}, groups = "db")
public void test3() {
    System.out.println("test3...");
}

创建第三个类:

@Test(dependsOnGroups = {"deploy", "db"})
public void test4() {
    System.out.println("test4...");
}

@Test(dependsOnMethods = "test4")
public void test5() {
    System.out.println("test5...");
}

创建XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<suite name="TestDependency">

    <test name="TestCase1">

        <classes>
            <class
                    name="com.fu8.TestApp">
            </class>
            <class
                    name="com.fu8.TestDatabase">
            </class>
            <class
                    name="com.fu8.TestServer">
            </class>
        </classes>

    </test>

</suite>

10、TestNG参数化测试:使用testng.xml和使用数据提供者2种方式。

1.使用XML传递参数:

创建一个test.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
<suite name="suite1">
    <test name="test01">
        <!--parameter标签中写要传入的参数  -->
        <parameter name="URL" value="https://www.baidu.com"></parameter>
        <parameter name="PORT" value="443"></parameter>
        <classes>
            <class name="com.fu9.ParametersTest" />
        </classes>
    </test>
</suite>

创建一个类:

WebDriver driver;

@Parameters({"URL", "PORT"})
@BeforeMethod
public void test(String URL, String PORT) {
    System.setProperty("webdriver.firefox.bin", "E:\\Mozilla Firefox\\firefox.exe");
    System.setProperty("webdriver.gecko.driver", "E:\\selenium\\geckodriver\\geckodriver.exe");
    driver = new FirefoxDriver();
    driver.manage().window().maximize();
    driver.get(URL+":"+PORT);
}
@Test
public void test1()
{
    String str = driver.getTitle();
    Assert.assertEquals(str, "百度一下,你就知道");
}

@AfterMethod
public void test2() throws InterruptedException
{
    Thread.sleep(2000);
    driver.quit();
}

2.通过@DataProvider传递参数:

WebDriver driver;

@DataProvider(name = "data01")
public Object[][] test() {
    return new Object[][]{{"!", "!_百度搜索"}, {"?", "?_百度搜索"}};
}

@DataProvider(name = "data02")
public Iterator<Object[]> test1() {
    Set<Object[]> set = new HashSet<Object[]>();
    set.add(new String[]{"!", "!_百度搜索"});
    set.add(new String[]{"?", "?_百度搜索"});
    return set.iterator();
}

@Parameters({"URL", "PORT"})
@BeforeMethod
public void test2(String URL, String PORT) {
    System.setProperty("webdriver.firefox.bin", "E:\\Mozilla Firefox\\firefox.exe");
    System.setProperty("webdriver.gecko.driver", "E:\\selenium\\geckodriver\\geckodriver.exe");
    driver = new FirefoxDriver();
    driver.manage().window().maximize();
    driver.get(URL + ":" + PORT);
}

@Test(dataProvider = "data02")
public void test3(String a, String b) throws InterruptedException {
    driver.findElement(By.cssSelector("#kw")).sendKeys(a);
    driver.findElement(By.cssSelector("#su")).click();
    Thread.sleep(1000);
    String str = driver.getTitle();
    Assert.assertEquals(str, b);
}

@AfterMethod
public void test4() throws InterruptedException {
    Thread.sleep(2000);
    driver.quit();
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值