zoukankan      html  css  js  c++  java
  • TestNG 101

    最近看了点TestNG,做个入门笔记

    0.Maven + TestNG

    0a. 创建Maven 项目,pom中添加依赖(可能还需要安装TestNG插件

    <dependencies>
            <dependency>
                <groupId>org.testng</groupId>
                <artifactId>testng</artifactId>
                <version>6.8.21</version>
            </dependency>
            <!--报告-->
            <dependency>
                <groupId>org.uncommons</groupId>
                <artifactId>reportng</artifactId>
                <version>1.1.4</version>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.testng</groupId>
                        <artifactId>testng</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>com.google.inject</groupId>
                <artifactId>guice</artifactId>
                <version>3.0</version>
                <scope>test</scope>
            </dependency>
        </dependencies>

    0b.项目结构

    文件路径是在test目录下

    1. 一个简单的case

    package com.lernenTestNG;
    
    //1. 常用的import的包
    import org.testng.annotations.*;
    import org.testng.Assert;
    
    //1. 实际的testcase为类中被@Test注释的方法
    public class Lecktion1 {
    
        @BeforeTest
        public void y_beforeTest(){
            System.out.println("**** BeforeTest ****");
        }
    
        @BeforeMethod
        public void y_beforeMethod(){
            System.out.println("**** BeforeMethod ****");
        }
    
        @Test
        public void y_Test1() {
            int a = 1;
            int b = 2;
            int res = a + b;
            System.out.println("y_Test1()");
            System.out.println("result=" + res);
            Assert.assertEquals(res,3);
    
        }
    
        @Test
        public void y_Test2() {
            int a = 2;
            int b = 3;
            int res = a + b;
            System.out.println("y_Test2()");
            System.out.println("result=" + res);
    //       3. Assert.XXX只能在testcase中使用
            Assert.assertEquals(res,5);
    
        }
    
        @Test
        public void y_Test3() {
            int a = 2;
            int b = 4;
            int res = a + b;
            System.out.println("y_Test3()");
            System.out.println("result=" + res);
            Assert.assertEquals(res,5);
    
        }
    
        @AfterMethod
        public void y_AfterMethod(){
            System.out.println("**** AfterMethod ****");
        }
    
        @AfterTest
        public void y_AfterTest(){
            System.out.println("**** AfterTest ****");
        }
    }

    2.常用注解

    2a. @Test  ——测试执行主体,作用域为Public

    @Test 的可选参数

    // 多个参数可以如下使用
    // @Test(dataProvider = "",dependsOnGroups = "",groups = {"",""})
    
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.METHOD, ElementType.TYPE, ElementType.CONSTRUCTOR})
    public @interface Test {
        String[] groups() default {};
    
        boolean enabled() default true;
    
        /** @deprecated */
        @Deprecated
        String[] parameters() default {};
    
        String[] dependsOnGroups() default {};
    
        String[] dependsOnMethods() default {};
    
        long timeOut() default 0L;
    
        long invocationTimeOut() default 0L;
    
        int invocationCount() default 1;
    
        int threadPoolSize() default 0;
    
        int successPercentage() default 100;
    
        String dataProvider() default "";
    
        Class<?> dataProviderClass() default Object.class;
    
        boolean alwaysRun() default false;
    
        String description() default "";
    
        Class[] expectedExceptions() default {};
    
        String expectedExceptionsMessageRegExp() default ".*";
    
        String suiteName() default "";
    
        String testName() default "";
    
        /** @deprecated */
        boolean sequential() default false;
    
        boolean singleThreaded() default false;
    
        Class retryAnalyzer() default Class.class;
    
        boolean skipFailedInvocations() default false;
    
        boolean ignoreMissingDependencies() default false;
    
        int priority() default 0;
    }

    2b. @BeforeTest、@BeforeClass、@BeforeMethod

    2c. @AfterTest、@AfterClass、@AfterMethod

    ——测试前后setup,teardown,具体执行顺序如名称所示

    2d. @DetaProvider  ——数据驱动

    public class Lecktion2 {
        //注意大小写
        @Test(dataProvider = "dp")
        public void y_test_dp(int a, int b, int res){
            System.out.println("a is "+ a +", b is " + b + ", res is " + res);
            Assert.assertEquals(a+b,res);
        }
    
        //@DataProvider支持修饰方法,源码就是这么写的。。。这边可以改成读取文件、或是其他地方得到数据
        @DataProvider
        public Object[][] dp(){
            return new Object[][]{
                    {1,2,3},
                    {4,5,6}, 
                    {1,1,2}};
        }
    
        //调用三次y_test_dp,所以y_AfterMethod也会执行三次
        @AfterMethod
        public void y_AfterMethod(){
            System.out.println("**** AfterMethod ****");
        }
    }

    2e. @Pataneters  ——接受配置文件testng.xml中同名参数到测试用例中使用

    引用某个触的文档:http://www.cnblogs.com/TankXiao/p/3888070.html

    package TankLearn2.Learn;
    
    import org.testng.annotations.Parameters;
    import org.testng.annotations.Test;
    
    public class ParameterizedTest1 {
        
        @Test
        @Parameters("test1")
        public void ParaTest(String test1){
            System.out.println("This is " + test1);
        }
    }

    testng.xml

    <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
    <suite name="Suite1">
            <parameter name="test1" value="Tank" />
            <parameter name="test1" value="Xiao" />
        <test name="test12">
            <classes>
                <class name="TankLearn2.Learn.ParameterizedTest1" />
            </classes>
        </test>
    </suite>

    3.testng.xml

    码ing 

  • 相关阅读:
    什么是JDBC的最佳实践?
    如何将jquery对象转换为js对象?
    JQuery有几种选择器?
    jQuery 库中的 $() 是什么
    JS 中 == 和 === 区别是什么?
    有两张表;请用SQL查询,所有的客户订单日期最新的前五条订单记录?
    根据你以往的经验简单叙述一下MYSQL的优化?
    数据库MySQL分页时用的语句?
    LeetCode231-2的幂(水题,考察是否粗心)
    LeetCode191-位1的个数(题目有问题)
  • 原文地址:https://www.cnblogs.com/silvi/p/testng.html
Copyright © 2011-2022 走看看