TestNg学习笔记

TestNG执行顺序

@BeforeMethod :测试方法运行之前运行

@AfterMethod: 测试方法运行之后运行

@BeforeClass:类方法之前运行(静态的方法,变量赋值)

@BeforeClass:类方法之后运行

@BeforeSuite:测试套件,Suite可以包含多个class,在class运行之前

@AfterSuite:测试套件,Suite可以包含多个class,在class运行之后


运行TestNG测试脚本(https://www.cnblogs.com/superbaby11/p/6400400.html)

运行TestNG测试脚本有两种方式:一种是直接通过IDE运行(例如使用eclipse中的“Run TestNG tests”),另一种是从命令行运行(通过使用xml配置文件)

  1. 首先要声明一个suite的名字,用于描述将要运行的测试脚本集,可以根据自己需要任意命名,最终这个名字会在testng的测试报告中看到。
<suite name="test">
    <test name="login">
        <classes>
            <class name="com.course.testng.suite.SuiteConfig"/>
            <class name="com.course.testng.suite.LoginTest"/>
        </classes>
    </test>

    <test name="pay">
        <classes>
            <class name="com.course.testng.suite.SuiteConfig"/>
            <class name="com.course.testng.suite.PayTest"/>
        </classes>
    </test>
</suite>

忽略测试

@Test(enabled = false)

组测试

public class GroupOnMethod {
    @Test(groups = "server")
    public void test1(){
        System.out.println("这是服务端组的测试方法1111");
    }
    @Test(groups = "server")
    public void test2(){
        System.out.println("这是服务端组的测试方法2222");
    }
    @Test(groups = "client")
    public void test3(){
        System.out.println("这是服务端组的测试方法3333");
    }
    @Test(groups = "client")
    public void test4(){
        System.out.println("这是服务端组的测试方法4444");
    }
    @BeforeGroups("server")
    public void beforeGroupOnServer(){
        System.out.println("这是服务端组运行之前的方法");
    }
    @AfterGroups("server")
    public void afterGroupOnserver(){
        System.out.println("这是服务端组运行之后的方法");
    }
    @BeforeGroups("client")
    public void beforeGroupOnClient(){
        System.out.println("这是客户端组运行之前的方法");
    }
    @AfterGroups("client")
    public void afterGroupOnClient(){
        System.out.println("这是客户端组运行之后的方法");
    }

}

运行结果:

这是服务端组运行之前的方法
这是服务端组的测试方法1111
这是服务端组的测试方法2222
这是服务端组运行之后的方法
这是客户端组运行之前的方法
这是服务端组的测试方法3333
这是服务端组的测试方法4444
这是客户端组运行之后的方法

组测试中的类分组测试

<?xml version="1.0" encoding="UTF-8" ?>
<suite name="suitename">
    <test name="runall">
        <classes>
            <class name="com.course.testng.groups.GroupOnClass1"/>
            <class name="com.course.testng.groups.GroupClass2"/>
            <class name="com.course.testng.groups.GroupOnClass3"/>
        </classes>
    </test>
    <!-- 只运行class name为stu的文件-->
    <test name="runOnly">
        <groups>
            <run>
                <include name="stu"></include>
            </run>
        </groups>
        <classes>
            <class name="com.course.testng.groups.GroupOnClass1"/>
            <class name="com.course.testng.groups.GroupClass2"/>
            <class name="com.course.testng.groups.GroupOnClass3"/>
        </classes>
    </test>
</suite>

异常测试

package com.course.testng;

import org.testng.annotations.Test;

public class ExpectedException {
    @Test(expectedExceptions = RuntimeException.class)
    public void runTimeException(){
        System.out.println("这是一个异常测试");
        throw new RuntimeException();

    }
}

依赖测试

public class DependTest {
    @Test
    public void test1(){
        System.out.println("test1执行");
        //test1抛出异常test2就不执行
        throw new RuntimeException();
    }
    //test1执行成功才能执行test2
    @Test(dependsOnMethods = {"test1"})
    public void test2(){
        System.out.println("test1执行");
    }
}

参数化测试

  1. xml配置文件参数化
public class paramterTest {
    @Test
    @Parameters({"name","age"})
    public void parameter(String name,int age){
        System.out.println("name="+name+"; age"+age);
    }
}

配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<suite name = "param">
    <test name = "parame">
        <classes>
            <parameter name = "name" value = "zhangsan"></parameter>
            <parameter name = "age" value = "10"></parameter>
            <class name="com.course.testng.paramter.paramterTest"></class>
        </classes>
    </test>
</suite>

dataProvider

public class dataParameter {
    @Test(dataProvider = "data")
    public void datapara(String name, int age) {
        System.out.println("name=" + name + ";age=" + age);
    }

    @DataProvider(name = "data")
    public Object[][] providerData() {
        Object[][] o = new Object[][]{
                {"zhangsan", 10},
                {"lisi", 20}
        };
        return o;
    }

    @Test(dataProvider = "dataMethod")
    public void test1(String name, int age) {
        System.out.println("test1中name=" + name + ";age=" + age);
    }

    @Test(dataProvider = "dataMethod")
    public void test2(String name, int age) {
        System.out.println("test2中name=" + name + ";age=" + age);
    }

    @DataProvider(name = "dataMethod")
    public Object[][] dataMethod(Method method) {
        Object[][] result = null;
        if (method.getName().equals("test1")) {
            result = new Object[][]{
                    {"zhangsan",40}
            };


        }else if (method.getName().equals("test2")){
            result = new Object[][]{
                    {"lisi",60}
            };

        }
        return result;
    }
}

多线程测试注解 (适合各个线程之间无关联)

public class MultiTreadOnAnnotation {
    @Test(invocationCount = 10,threadPoolSize = 3)
    public void test1(){
        System.out.println(1);
        System.out.printf("Thread Id %s%n",Thread.currentThread().getId());
    }

}

posted on 2018-10-16 08:51  laoguigui  阅读(304)  评论(0编辑  收藏  举报

导航