• 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());
        }
    
    }
  • 相关阅读:
    C#中int和System.Int32理解总结
    谈C#中的Delegate
    Html的安全隐患
    Oracle性能优化
    Selenium私房菜系列7 深入了解Selenium RC工作原理(2)
    java取整和java四舍五入方法
    Android SufaceView 背景设置透明
    android图片加水印,文字
    关于android集成开发环境引入jar包错误的问题
    android bitmap绘制文字自动换行
  • 原文地址:https://www.cnblogs.com/laoguigui/p/9795942.html
Copyright © 2020-2023  润新知