TestNG 快速入门

TestNG 快速入门

IntelliJ IDEA 中默认集成了 TestNG。
在这里插入图片描述

maven 配置:

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.testng/testng -->
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>7.4.0</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

快速入门

import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

/**
 * @Author song
 * @Time 2024/5/29 11:25
 */
public class TestNgLearn01 {
    @BeforeClass
    public void beforeClass() {
        System.out.println("@BeforeClass");
    }

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

    @AfterClass
    public void afterClass() {
        System.out.println("@AfterClass");
    }
}

运行结果:

@BeforeClass
@Test TestNG test case
@AfterClass

===============================================
Default Suite
Total tests run: 1, Passes: 1, Failures: 0, Skips: 0
===============================================

XML 方式运行

在项目根目录下编写 testng.xml

<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >

<suite name="Suite1" verbose="1" >
    <test name="TestNgLearn01" >
        <classes>
            <class name="com.example.TestNgLearn01" />
        </classes>
    </test>
</suite>

右键 XML 文件,即可运行测试。

Maven 运行

pom.xml 中添加:

   <!-- 和 <dependencies> 标签同一级别 -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.19</version>
                <configuration>
                    <suiteXmlFiles>
                        <suiteXmlFile>testng.xml</suiteXmlFile>
                    </suiteXmlFiles>
                </configuration>
            </plugin>
        </plugins>
    </build>

然后可以使用 Maven 命令 mvn test 来运行

常用注解的执行顺序

这里再添加一个测试类。

import org.testng.Assert;
import org.testng.annotations.*;

import java.util.ArrayList;
import java.util.Collection;

/**
 * @Author song
 * @Time 2024/5/29 13:53
 */
public class TestNgLearn03 {

    private Collection collection;

    @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");
    }

    @BeforeClass
    public void oneTimeSetUp() {
        // one-time initialization code
        System.out.println("@BeforeClass");
    }

    @AfterClass
    public void oneTimeTearDown() {
        // one-time cleanup code
        System.out.println("@AfterClass");
    }

    @BeforeMethod
    public void setUp() {
        collection = new ArrayList();
        System.out.println("@BeforeMethod - setUp");
    }

    @AfterMethod
    public void tearDown() {
        collection.clear();
        System.out.println("@AfterMethod - tearDown");
    }

    @Test
    public void testEmptyCollection() {
        Assert.assertEquals(collection.isEmpty(), true);
        System.out.println("@Test - testEmptyCollection");
    }

    @Test
    public void testOneItemCollection() {
        collection.add("itemA");
        Assert.assertEquals(collection.size(), 1);
        System.out.println("@Test - testOneItemCollection");
    }
}

修改 testng.xml,添加该测试类:

<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >

<suite name="Suite1" verbose="1" >
    <test name="TestNgLearn01" >
        <classes>
            <class name="com.example.TestNgLearn01" />
        </classes>
    </test>

    <test name="TestNgLearn03" >
        <classes>
            <class name="com.example.TestNgLearn03" />
        </classes>
    </test>

</suite>

运行结果:

@BeforeSuite
@BeforeClass
@Test TestNG test case
@AfterClass
@BeforeTest
@BeforeClass
@BeforeMethod - setUp
@Test - testEmptyCollection
@AfterMethod - tearDown
@BeforeMethod - setUp
@Test - testOneItemCollection
@AfterMethod - tearDown
@AfterClass
@AfterTest
@AfterSuite

===============================================
Suite1
Total tests run: 3, Passes: 3, Failures: 0, Skips: 0
===============================================

@BeforeSuite、@AfterSuite 在整个测试套件(可以包含多个测试类)的前后被调用。

@BeforeTest、@AfterTest 在整个测试类运行的前后被调用(测试套件级别)。

@BeforeClass、@AfterClass 是整个测试类运行时的前后被调用(类级别)。

@BeforeMethod、@AfterMethod 则在每个测试方法(@Test)被调用前都会被调用。

异常测试

public class ExceptionTest {

    // @Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = "NullPoint")
    @Test(expectedExceptions = IllegalArgumentException.class)
    public void testException() {
        throw new IllegalArgumentException("NullPoint");
    }
}

组测试

把测试用例分组。

public class GroupTest {
    
    @Test(groups = {"group1"})
    public void test1(){
        System.out.println("test group1");
    }
    
    @Test(groups = {"group2"})
    public void test2(){
        System.out.println("test group2");
    }
}

参数化测试

为测试方法传递参数。

XML 方式传递

<suite name="Suite">
    <parameter name="test1" value="Tank"/>
    <parameter name="test1" value="Xiao"/>
    <test name="test12">
        <classes>
            <class name="com.example.ParameterizedTest"/>
        </classes>
    </test>
</suite>
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class ParameterizedTest {

    @Test
    @Parameters("test1")
    public void ParaTest(String test1) {
        System.out.println("get " + test1);
    }
}

DataProvider

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

public class DataProviderTest {

    @DataProvider(name = "user")
    public Object[][] Users() {
        return new Object[][]{
                {"root", "passowrd"},
                {"cnblogs.com", "tankxiao"},
                {"tank", "xiao"}
        };
    }

    @Test(dataProvider = "user")
    public void verifyUser(String userName, String password) {
        System.out.println("Username: " + userName + " Password: " + password);
    }
}

忽略测试

当测试用例未准备好或者不想运行某一个测试的时候,可以使用 @Test(enabled = false)

import org.testng.annotations.Test;

public class IgnoreTesg {
    
    @Test(enabled = false)
    public void testIgnore(){
        System.out.println("ignore...");
    }
}

依赖测试

测试用例存在先后关系

import org.testng.annotations.Test;

public class DependsTest {
    
    @Test
    public void setupEnv(){
        System.out.println("this is setup Env");
    }
    
    @Test(dependsOnMethods = {"setupEnv"})
    public void testMessage(){
        System.out.println("this is test message");
    }
}

更多的细节可以参考博客:https://blog.youkuaiyun.com/lovedingd/article/details/106784561

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值