testng

一、maven项目添加插件 

        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.14.3</version>
            <scope>compile</scope>
        </dependency>

二、关于testng中各个组件的执行顺序 

参考 https://blog.csdn.net/cunchi4221/article/details/107475221

依赖:@Test(dependsOnMethods = {"你的依赖函数"})
忽略:@Test(enable = false)

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

public class TC1 {

    @BeforeClass
    public void beforeClass() { System.out.println("BeforeClass,开始执行一次"); }
    @AfterClass
    public void afterClass() { System.out.println("AfterClass,结束执行一次");}

    @BeforeMethod
    public void beforeTest() { System.out.println("BeforeMethod,每个用例前执行一次"); }
    @AfterMethod
    public void afterMethod() { System.out.println("AfterMethod,每个用例后执行一次"); }

    @BeforeGroups("mark")
    public void beforeGroups() { System.out.println("BeforeGroups,group前执行一次"); }
    @AfterGroups("mark")
    public void afterGroups() { System.out.println("AfterGroups,group后执行一次"); }

    @Test(groups = "mark", priority = 2) // 将该case 的groups标注为 mark;priority表示运行顺序
    public void case1() { Assert.assertEquals(1, 1); }
    @Test(dataProvider = "dp", priority = 1) // dataProvider 获取数据驱动
    public void case2(Integer n, String s) { System.out.println("case2:"+n+s); }

    @DataProvider // 做数据驱动,数据源文件可以是EXCEL,XML,甚至可以是TXT文本
    public Object[][] dp() {
        System.out.println("Inside @DataProvider");
        return new Object[][] { new Object[] { 1, "a" }, new Object[] { 2, "b" },};
    }
}
/*
 执行结果如下:
 BeforeClass,开始执行一次
 Inside @DataProvider
 BeforeMethod,每个用例前执行一次
 case2:1a
 AfterMethod,每个用例后执行一次
 BeforeMethod,每个用例前执行一次
 case2:2b
 AfterMethod,每个用例后执行一次
 BeforeGroups,group前执行一次
 BeforeMethod,每个用例前执行一次
 AfterMethod,每个用例后执行一次
 AfterGroups,group后执行一次
 AfterClass,结束执行一次

 ===============================================
 Default Suite
 Total tests run: 3, Failures: 0, Skips: 0
 ===============================================
 */

三、关于测试套件

上面有TC1类,补下下面xml用到的Suite类、TC2类以及TC2引用到的Utils类

import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeSuite;

public class Suite {

    @BeforeSuite
    public void suiteBefore(){
        System.out.println("测试BeforeSuite");
    }

    @AfterSuite
    public void suiteAfter(){
        System.out.println("测试AfterSuite");
    }
}
View Code
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class TC2 {


    @Test(dataProvider = "dp",groups = "1")
    public void test_add(Integer x, Integer y) {
        Utils u = new Utils();
        Assert.assertEquals(u.add(x, y), x + y);
    }

    @Test(dataProvider = "dp",groups = "2")
    public void test_subtract(Integer x, Integer y) {
        Utils u = new Utils();
        Assert.assertEquals(u.subtract(x, y), x - y);
    }

    @Test(dataProvider = "dpName")
    public void test_setName(String s) {
        Utils.setName(s);
        Assert.assertEquals(Utils.NAME, s);
    }

    @DataProvider
    public Object[][] dp() {
        return new Object[][] { new Object[] { 1, 1 }, new Object[] { 2, 2 }, };
    }

    @DataProvider
    public Object[][] dpName() {
        return new Object[][] { new Object[] { "Utils" }, new Object[] { "MyUtils" }, };
    }

}
View Code
public class Utils {
    public static String NAME = "";

    public int add(int x, int y) {
        return x + y;
    }

    public int subtract(int x, int y) {
        return x - y;
    }

    public static void setName(String s) {
        System.out.println("Setting NAME to " + s);
        NAME = s;
    }

}
View Code

下面是一个xml的测试套件,文件名不限。在xml文件上,右键run testng.xml即可,verbose参数是测试结果详细程度

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="TestAll">

    <test name="测试套件">
        <classes>
            <class name="com.example.demo.testng.Suite"/>
        </classes>
    </test>

<!--    <test name="测试用例,include-包含、exclude-排除">-->
<!--        <classes>-->
<!--            <class name="com.example.demo.testng.TC1">-->
<!--                <methods>-->
<!--                    <include name="case1"/>-->
<!--                    <exclude name="case2"/>-->
<!--                </methods>-->
<!--            </class>-->
<!--        </classes>-->
<!--    </test>-->

    <test name="测试group,include-包含、exclude-排除" verbose="2">
        <groups>
            <run>
                <exclude name="1" />
                <include name="2" />
            </run>
        </groups>

        <classes>
            <class name="com.example.demo.testng.TC2" />
        </classes>
    </test>

    <!--    <test name="测试类">-->
<!--        <classes>-->
<!--            <class name="com.example.demo.testng.TC1"/>-->
<!--            <class name="com.example.demo.testng.TC2"/>-->
<!--        </classes>-->
<!--    </test>-->

<!--    <test name="测试目录">-->
<!--        <packages>-->
<!--            <package name="com.example.demo.testng.*"/>-->
<!--        </packages>-->
<!--    </test>-->

</suite>

 四、默认的测试报告

IDEA默认不会生成报告,这里我们通过设置使用默认的报告模板来生成报告。

设置方法:Run——Edit Configurations,再按如下截图操作。

设置完成后,运行第三部的xml测试套件,生成的测试报告在 test-output 目录下,实际打开报告有乱码,没找到解决办法。

(如果用浏览器打开则不会乱码,如果是从idea跳转到浏览器则会乱码,2种方式在浏览器打开的url也不同,不明白。

如果在html报告中添加utf-8的说明,则idea跳转到浏览器也不会乱码)

 

一个只会点点点的测试,有疑问可以在测试群(群号:330405140)问我
原文地址:https://www.cnblogs.com/yinwenbin/p/15339510.html