TestNG官方文檔記錄+例子運(yùn)行

testng.xml

使用maven工程時(shí),我們可以在工程中添加testng.xml來運(yùn)行。運(yùn)行xml,可以使用IDE工具(eclipse、Intellij's IDEA),命令行,ant。使用eclipse需要安裝插件,使用IDEA時(shí),直接右鍵運(yùn)行


image.png

使用命令行(需要把TestNG加入到class path中)具體命令查看help

java org.testng.TestNG testng1.xml [testng2.xml testng3.xml ...]

testng.xml是依賴testng-1.0.dtd,所以在xml的開頭需要把dtd文件加進(jìn)去,把依賴加進(jìn)去以后在寫xml文件時(shí),IDE才會(huì)調(diào)起方法
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

image.png

例子
使用class名配置運(yùn)行
--只有一個(gè)test

image.png

--有多個(gè)test

image.png

使用package名配置運(yùn)行

image.png

使用group名配置運(yùn)行,xml文件中不僅要加上group注解,也需要加上classes,group是在classes的范圍內(nèi)挑選所需要的group
修改下代碼

public class Demo1 {

    @Test(groups = "g1")
    public void test1(){
        System.out.println("測(cè)試01");
    }
    @Test(groups = "g2")
    public void test11(){
        System.out.println("測(cè)試11");
    }
}
public class Demo3 {

    @Test(groups = "g1")
    public void test3(){
        System.out.println("測(cè)試03");
    }
    @Test(groups = "g2")
    public void test33(){
        System.out.println("測(cè)試33");
    }
}
image.png

下面是大頭了
group
TestNG允許使用group進(jìn)行分組,一個(gè)test不僅屬于一個(gè)group,可以屬于多個(gè)group:@Test(groups={"g1","g2"}),在testng.xml中可以配置不同group運(yùn)行,group可以放在<suite>下,也可以放在<test>下,作用范圍的差別:如果<suite>指明g1,<test>指明g2,則g1、g2都會(huì)運(yùn)行的,可以使用include(包含)也可以使用exclude(排除)
下面的例子是運(yùn)行g(shù)roup名為g1和g2

public class Demo1 {

    @Test(groups = {"g1","g2"})
    public void test1(){
        System.out.println("測(cè)試01");
    }
    @Test(groups = "g2")
    public void test11(){
        System.out.println("測(cè)試11");
    }
    @Test
    public void test111(){
        System.out.println("測(cè)試111");
    }
}
public class Demo3 {

    @Test(groups = "g1")
    public void test3(){
        System.out.println("測(cè)試03");
    }
    @Test(groups = "g2")
    public void test33(){
        System.out.println("測(cè)試33");
    }
}
image.png

group名可以使用.,同時(shí)在指定要運(yùn)行哪些group時(shí),也可以使用通配符 星號(hào) (使用通配符 星號(hào),一定要加上. dot star)


public class Demo1 {

    @Test(groups = {"windows.g1","linux.g2"})
    public void test1(){
        System.out.println("測(cè)試01");
    }
    @Test(groups = "linux.g2")
    public void test11(){
        System.out.println("測(cè)試11");
    }
    @Test
    public void test111(){
        System.out.println("測(cè)試111");
    }
}
public class Demo3 {

    @Test(groups = "windows.g1")
    public void test3(){
        System.out.println("測(cè)試03");
    }
    @Test(groups = "linux.g2")
    public void test33(){
        System.out.println("測(cè)試33");
    }
}
image.png

當(dāng)有些test case不運(yùn)行了以后,我們可以在group中多加一個(gè)標(biāo)簽,然后在testng.xml的group中排除該標(biāo)簽,這些case就不會(huì)跑起來了。如果有的case沒有加上group注解,是不會(huì)被運(yùn)行起來的

public class Demo1 {

    @Test(groups = {"checkintest","broken"})
    public void test1(){
        System.out.println("測(cè)試01");
    }
    @Test(groups = "checkintest")
    public void test11(){
        System.out.println("測(cè)試11");
    }
    @Test
    public void test111(){
        System.out.println("測(cè)試111");
    }
}
image.png

dependencies
有時(shí)候有些case是需要依賴其他case的,這個(gè)時(shí)候就可以用dependencies注解
默認(rèn)情況下,被依賴的類需要運(yùn)行成功,依賴的類才會(huì)運(yùn)行,而且被依賴的類一定會(huì)在依賴類之前運(yùn)行
如下圖,test22運(yùn)行在test2之前
dependsOnMethods


image.png

如果怕失敗了,依賴類不運(yùn)行,可以多加個(gè)alwaysRun=true,無論如何都要運(yùn)行的,被依賴類如果失敗了,依賴類是不運(yùn)行(skipped)而不是失敗

image.png
image.png

dependsOnGroups


image.png

在testng.xml中也可以使用dependsOnGroup。目前實(shí)踐結(jié)果是,只能放在<test>下,放在<suite>會(huì)報(bào)錯(cuò):org.testng.TestNGException: java.lang.NullPointerException。而且

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="suite01" verbose="1">
    <test name="test">
        <groups>
            <dependencies>
                <group name="ss" depends-on="yy"></group>
            </dependencies>
        </groups>
        <classes>
            <class name="com.tyoko.demo.TestNGDemo1"></class>
        </classes>
    </test>
</suite>

運(yùn)行結(jié)果是被依賴的方法先運(yùn)行,然后按照書寫順序運(yùn)行,最后是依賴的類

image.png

并發(fā)
parallel="methods",運(yùn)行所有方法在各自的線程,依賴方法也是運(yùn)行在不同的線程,但是如果你有指定的話會(huì)按照你指定的執(zhí)行
parallel=”tests",將相同<test>中的case運(yùn)行在同一個(gè)線程,不同的<test>分開不同線程運(yùn)行。如果在同個(gè)<test>中有非線程安全的類的話,可以使用group以保證在同個(gè)線程內(nèi)運(yùn)行所有case
parallel=“classes",同個(gè)類中的方法運(yùn)行在同個(gè)線程中,不同類的方法運(yùn)行在不同線程中
parallel="instances",同個(gè)實(shí)例的方法運(yùn)行在同個(gè)線程,不同實(shí)例則運(yùn)行在不同線程中


image.png

參數(shù)化
parameters
在方法上使用Parameters({""})注解,在testng.xml中添加<parameter name="" value=""/>
name必須一致,方法則會(huì)去讀取xml文件中設(shè)置的值。一般用于配置數(shù)據(jù)庫信息時(shí)使用。在<suite><test>中都可以設(shè)置,有作用域差別

@Parameters({ "first-name" })
@Test
public void testSingleString(String firstName) {
  System.out.println("Invoked testString " + firstName);
  assert "Cedric".equals(firstName);
}
<suite name="My suite">
  <parameter name="first-name"  value="Cedric"/>
  <test name="Simple example">
  <-- ... -->

dataProviders
返回值是Object[][],二維數(shù)組,設(shè)置了name后,方法上的注解dataProvider="name"使用name,如果未設(shè)置name,可以使用方法名。

@DataProvider(name = "test1")
public Object[][] createData1() {
 return new Object[][] {
   { "Cedric", new Integer(36) },
   { "Anne", new Integer(37)},
 };
}
 
//This test method declares that its data should be supplied by the Data Provider
//named "test1"
@Test(dataProvider = "test1")
public void verifyData1(String n1, Integer n2) {
 System.out.println(n1 + " " + n2);
}

實(shí)際使用時(shí),可以把數(shù)據(jù)寫在同一個(gè)類中(靜態(tài)方法),再去獲取數(shù)據(jù)

public class BaseFactory {
    @DataProvider(name = "getData")
    public static Object[][] createData(){
        return new Object[][]{
                {"wanger",18},
                {"lisi",16}
        };
    }

}
image.png

一堆的before、after,可以添加以下注解:alwaysRun(不可以使用在beforeGroup) dependsOnGroups dependsOnMethods enables groups inheritGroups(=true,該方法屬于指定的group,注解在class級(jí)別)
@BeforeSuite
@AfterSuite
@BeforeTest
@AfterTest
@BeforeGroups
@AfterGroups
@BeforeClass
@AfterClass
@BeforeMethod
@AfterMethod
實(shí)踐結(jié)果是@BeforeMethod@AfterMethod@BeforeClass@AfterClass可以寫在同一個(gè)類中。@BeforeTest@AfterTest另起一個(gè)類,不然在多個(gè)類中都寫了@BeforeTest@AfterTest會(huì)同時(shí)運(yùn)行多個(gè),造成結(jié)果失敗
@BeforeGroups@AfterGroups一定要加上是在哪寫group中使用的

public class GroupFactory {
    @BeforeGroups(groups = {"yy"})
    public void beforeGroup(){
        System.out.println("Before group");
    }
    @AfterGroups(groups = {"yy"})
    public void afterGroup(){
        System.out.println("After group");
    }
}
image.png

@BeforeSuite@AfterSuite就直接新起一個(gè)類來寫要操作的方法

public class SuiteFactory {
    @BeforeSuite
    public void beforeSuite(){
        System.out.println("Before Suite");
    }
    @AfterSuite
    public void afterSuite(){
        System.out.println("After Suite");
    }
}
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 感謝原作者的奉獻(xiàn),原作者博客地址:http://blog.csdn.net/zhu_ai_xin_520/arti...
    狼孩閱讀 14,301評(píng)論 1 35
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,569評(píng)論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,275評(píng)論 6 342
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,728評(píng)論 18 399
  • 又剛剛看完歡樂喜劇人。 年后兩天的工作日,今天一天的休息日,定的目標(biāo)是所有空余時(shí)間來準(zhǔn)備教招,昨晚沒睡好,白天又偷...
    趙自律閱讀 262評(píng)論 0 0

友情鏈接更多精彩內(nèi)容