TestNG

一、TestNG技术

maven地址:https://mvnrepository.com/artifact/org.testng/testng/7.0.0

文档地址:http://testingpai.com/article/1595507259282

1、TestNg使用

package com.lemon.testng;

import org.testng.Assert;
import org.testng.annotations.Test;

//testng:http://testingpai.com/article/1595507259282

public class TestNgDemo1 {

    @Test
    public void test() {
        //testng插件+testng坐标(依赖)
        System.out.println("这是TestNgDemo1-test");
    }

    @Test(dependsOnMethods = "test3") //表示需要依赖test3方法
    public void test2() {
        System.out.println("这是TestNgDemo1-test2");
    }

    @Test()
    public void test3() {
        System.out.println("这是TestNgDemo3-test3");
    }

    @Test
    public void test4() {
        System.out.println("这是TestNgDemo3-test4");
        Assert.fail(); //断言失败
    }

}

2、并发测试:@Test(invocationCount=5,threadPoolSize=10)

package com.lemon.testng;

import org.testng.annotations.Test;

public class TestNgDemo2_Concurrent {

    @Test(invocationCount = 50, threadPoolSize = 10) //可用做并发测试
    public void test() {
        System.out.println(Thread.currentThread().getName() + "== TestNgCurrent.test");
    }
}

3、优先级:priority

package com.lemon.testng;

import org.testng.annotations.Test;

public class TestNgDemo3_Priority {


    @Test(priority = 1) //值越小,优先级越高
    public void test1() {
        System.out.println("test1");
    }

    @Test(priority = 2)
    public void test2() {
        System.out.println("test2");
    }

    @Test(priority = 4)
    public void test3() {
        System.out.println("test3");
    }

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

testng.xml文件代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="我的项目">
    <test name="模块/接口">
        <classes>
            <class name="com.lemon.testng.TestNgDemo1"/>
            <class name="com.lemon.testng.TestNgDemo2_Concurrent"/>
            <class name="com.lemon.testng.TestNgDemo3_Priority"/>
        </classes>
    </test>
</suite>

4、Before/After注解

 

 

 

package com.lemon.testng;

import org.testng.annotations.*;

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

    @Test
    public void test2() {
        System.out.println("我是TestNgDemo4_Before1中的.test2");
    }

    @BeforeSuite
    public void beforeSuite() {
        System.out.println("suite套件中的所有测试运行之前运行-->beforeSuite");
    }

    @AfterSuite
    public void afterSuite() {
        System.out.println("suite套件中的所有测试运行之后运行--afterSuite");
    }

    @BeforeClass
    public void beforeClass() {
        System.out.println("调用当前类中的第一个测试方法之前运行--beforeClass");
    }

    @AfterClass
    public void afterClass() {
        System.out.println("调用当前类中的第一个测试方法之后运行--afterClass");
    }

    @BeforeTest
    public void beforeTest() {
        System.out.println("运行属于标记内的类的任何测试方法之前运行(test/test2)-beforeTest");
    }

    @AfterTest
    public void afterTest() {
        System.out.println("运行属于标记内的类的任何测试方法之前运行(test/test2)-afterTest");
    }

    @BeforeMethod
    public void beforeMehtod() {
        System.out.println("每个测试方法之前运行(test/test2)-beforeMethod");
    }
    @AfterMethod
    public void afterMehtod() {
        System.out.println("每个测试方法之后运行(test/test2)-afterMehtod");
    }


}

  

package com.lemon.testng;

import org.testng.annotations.Test;

public class TestNgDemo5_Before2 {
    @Test
    public void test() {
        System.out.println("我是TestNgDemo5_Before2中的.test");
    }
}

  

package com.lemon.testng;

import org.testng.annotations.Test;

public class TestNgDemo6_Before3 {
    @Test
    public void test() {
        System.out.println("我是TestNgDemo6_Before3中的test");
    }
}

  

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="我的项目">
    <test name="Before/After1">
        <classes>
            <class name="com.lemon.testng.TestNgDemo4_Before1"/>
            <class name="com.lemon.testng.TestNgDemo5_Before2"/>
        </classes>
    </test>
    <test name="Before/After2">
        <classes>
            <class name="com.lemon.testng.TestNgDemo6_Before3"/>
        </classes>
    </test>
</suite>

 运行结果如图

 

 

 5、Parameters参数化

package com.lemon.testng;

import org.testng.annotations.Parameters;
import org.testng.annotations.Test;


public class TestNgDemo7_Parameter {

    @Test
    @Parameters({"type","version"})
    public void test(String type,String version) {
        System.out.println("type = " + type + ", version = " + version);
    }

}
testng.xml文件中parameter配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="我的项目">
    <test name="参数化">
        <classes>
            <class name="com.lemon.testng.TestNgDemo7_Parameter"/>
            <parameter name="type" value="chrome"/>
            <parameter name="version" value="81"/>
        </classes>
    </test>
</suite>

6、DataProvider数据提供者

package com.lemon.testng;

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class TestNgDemo8_DataProvider {
    @Test(dataProvider = "datas")
    public void test(String username, String password) {
        System.out.println("username = " + username + ", password = " + password);
    }

    //@如果DataProvider注解没有给name属性,name的值就是方法名,如果给了就是name的值。
    //@DataProvider(name = "aaa"),顶部@Test(dataProvider = "aaa")
    @DataProvider  //@如果DataProvider注解没有给name属性,name的值就是方法名
    public Object[][] datas() {
        Object[][] datas = {
                {"zhangsan", "123456"},
                {"lisi", "123456"}
        };
        //excel => POI => 封装到二维数组中
        //数据库 => jdbc => 封装到二维数组中
        return datas;
    }

    @Test(dataProvider = "datas2")
    public void test2(String username) {
        System.out.println("username = " + username);
    }

    //@DataProvider注解的返回值是一维数组,那么@Test方法必须只有一个参数。
    @DataProvider
    public Object[] datas2() {
        Object[] datas = {"zhangsan", "lisi", "马保国"};
        return datas;
    }

    @Test(dataProvider = "datas3")
    //单参数为自定义对象,相当于可以无限扩展参数
    public void test3(Teacher t) {
        System.out.println("t = " + t.getName() + "," + t.getSex() + "," + t.getAge());
    }

    //@DataProvider注解的返回值是一维数组,那么@Test方法必须只有一个参数。
    @DataProvider
    public Object[] datas3() {
        Teacher t1 = new Teacher("马老师", 69, "男");
        Teacher t2 = new Teacher("泰老师", 59, "男");
        Teacher t3 = new Teacher("马老师", 60, "男");
        Object[] datas = {t1, t2, t3};
        return datas;
    }

    //dataProviderClass 指定数据支持所在的类,dataProvider所在的方法名,注意方法必须是静态。
    @Test(dataProviderClass = TestNgDemo8_DataProviderClass.class, dataProvider = "createData")
    public void datas4(String username, String password) {
        System.out.println("username = " + username + ", password = " + password);
    }
}

  

package com.lemon.testng;

import org.testng.annotations.DataProvider;

public class TestNgDemo8_DataProviderClass {
    @DataProvider
    public static Object[][] createData() {
        Object[][] datas = {
                {"zhangsan111", "123456"},
                {"lisi1111", "123456"}
        };
        return datas;
    }
}

  

 

posted @ 2022-09-12 15:54  袁丫头  阅读(55)  评论(0)    收藏  举报