欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java優(yōu)秀測(cè)試框架TestNG詳解

 更新時(shí)間:2022年02月22日 11:03:12   作者:再來(lái)一塊紅燒肉  
這篇文章主要為大家詳細(xì)介紹了Java優(yōu)秀測(cè)試框架TestNG,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助

我們?yōu)槭裁葱枰猅estNG?

Java有好幾個(gè)測(cè)試框架,JUnit是比較常見(jiàn)的一個(gè),Spring系列默認(rèn)的測(cè)試框架就是JUnit。TestNG也是Java的一個(gè)測(cè)試框架,與JUnit功能類似, 但支持更多的注解與功能。

我們常使用JUnit做單元測(cè)試,而在做自動(dòng)化測(cè)試時(shí),更偏向于選擇TestNG。

TestNG搭建

Maven工程中,添加TestNG依賴包即可,可自行選擇版本:

		<dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>7.1.0</version>
            <scope>test</scope>
        </dependency>

TestNG注解及功能

TestNG的注解與JUnit類似,但會(huì)更豐富,更細(xì)致:

注解描述
@Test標(biāo)記一個(gè)類里所有的public void方法,或某個(gè)方法,作為測(cè)試案例。
@BeforeSuite對(duì)于套件測(cè)試,在此套件中的所有測(cè)試執(zhí)行之前運(yùn)行,僅運(yùn)行一次。
@AfterSuite對(duì)于套件測(cè)試,在此套件中的所有測(cè)試執(zhí)行之后運(yùn)行,僅運(yùn)行一次。
@BeforeClass在調(diào)用當(dāng)前類之前運(yùn)行,只運(yùn)行一次。
@AfterClass在調(diào)用當(dāng)前類之后運(yùn)行,只運(yùn)行一次。
@BeforeTest對(duì)于套件測(cè)試,在屬于標(biāo)簽內(nèi)的所有類的測(cè)試方法執(zhí)行之前運(yùn)行。
@AfterTest對(duì)于套件測(cè)試,在屬于標(biāo)簽內(nèi)的所有類的測(cè)試方法都已執(zhí)行完之后運(yùn)行。
@BeforeGroups在調(diào)用屬于該組的第一個(gè)測(cè)試方法之前運(yùn)行。
@AfterGroups在調(diào)用屬于該組的最后一個(gè)測(cè)試方法執(zhí)行之后運(yùn)行 。
@BeforeMethod注解的方法將每個(gè)測(cè)試方法之前運(yùn)行。
@AfterMethod在每個(gè)測(cè)試方法執(zhí)行之前都會(huì)運(yùn)行。
@DataProvider標(biāo)志著一個(gè)方法,提供數(shù)據(jù)的一個(gè)測(cè)試方法。注解的方法必須返回一個(gè)Object[] [],其中每個(gè)對(duì)象[]的測(cè)試方法的參數(shù)列表中可以分配。該@Test 方法,希望從這個(gè)DataProvider的接收數(shù)據(jù),需要使用一個(gè)dataProvider名稱等于這個(gè)注解的名字。
@Factory作為一個(gè)工廠,返回TestNG的測(cè)試類的對(duì)象將被用于標(biāo)記的方法。該方法必須返回Object[]。
@Listeners定義一個(gè)測(cè)試類的監(jiān)聽(tīng)器。
@Parameters用于將參數(shù)傳遞給@Test方法。

TestNG配置文件

對(duì)比JUnit,TestNG最顯眼的區(qū)別就是多了一個(gè)配置文件。

有了這個(gè)配置文件的存在,可以更方便的管理測(cè)試案例的執(zhí)行。

1.新增配置文件

在項(xiàng)目根目錄下,新增testng.xml格式的配置文件,文件名任意,配置文件可以有多個(gè)。

maven工程在pom文件中,指定配置文件路徑后,可以直接運(yùn)行配置文件:

			<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0-M4</version>
                <configuration>
                    <suiteXmlFiles>
                        <suiteXmlFile>./testng.xml</suiteXmlFile>
                    </suiteXmlFiles>
                </configuration>
            </plugin>

TestNG配置的內(nèi)容并不復(fù)雜,這里的配置并不是TestNG啟動(dòng)的依賴,而是對(duì)測(cè)試案例的執(zhí)行方式進(jìn)行劃分。

2.配置測(cè)試套件(suit)

一個(gè)配置文件,有且只能有一個(gè)測(cè)試套件。suit標(biāo)簽的常見(jiàn)屬性如下,其中name為強(qiáng)制填寫(xiě)的,會(huì)展示在最終的測(cè)試報(bào)告中。

屬性描述
name套件的名稱,這是一個(gè)強(qiáng)制屬性
verbose運(yùn)行的級(jí)別或詳細(xì)程度,級(jí)別為0-10,其中10最詳細(xì)
parallelTestNG是否運(yùn)行不同的線程來(lái)運(yùn)行這個(gè)套件,默認(rèn)為none,其他級(jí)別為methods、tests、classes、instances
thread-count如果啟用并行模式(忽略其他方式),則為使用的線程數(shù)
annotations在測(cè)試中使用的注釋類型
time-out在本測(cè)試中的所有測(cè)試方法上使用的默認(rèn)超時(shí)
preserve-order用于配置測(cè)試案例是否按順序執(zhí)行

3.配置測(cè)試案例

按照groups組進(jìn)行劃分(使用了@Test (groups={“group1”})進(jìn)行注解的),include標(biāo)簽標(biāo)注的組名會(huì)被執(zhí)行,被exclude標(biāo)注的組則不會(huì)被執(zhí)行:

		<groups>
  			<run>
     			<include name = "includedGroupName" />
     			<exclude name = "excludedGroupName" />
  			</run>
		</groups>

按照包、類、方法三個(gè)層級(jí)劃分:

包:

		<packages>
            <package name = "com.hhm.demo1.*" />
            <package name = "com.hhm.demo2.*" />
        </packages>

類:

		<classes>
            <class name="com.hhm.demo1.DemoTest1"/>
            <class name="com.hhm.demo1.DemoTest2"/>
		</classes>

方法:

		<classes>
            <class name="com.hhm.demo1.DemoTest1">
                <methods>
                    <include name="testMethodName"></include>
                </methods>
            </class>
        </classes>

完整配置示例:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="First suite" verbose="1" >
    <test name="MyTest" parallel="classes" thread-count="4">
        <packages>
            <package name="com.hhm.demo1.*"></package>
            <package name="com.hhm.demo2.*"></package>
        </packages>
    </test>
</suite>

配置完成后,可以直接運(yùn)行配置文件,以執(zhí)行測(cè)試案例。也可以通過(guò)maven-Lifecycle的test命令執(zhí)行。

在這里插入圖片描述

TestNG測(cè)試

1.異常測(cè)試

預(yù)期異常測(cè)試通過(guò)在@Test注解后加入預(yù)期的Exception來(lái)進(jìn)行添加,示例如下:

	@Test(expectedExceptions = ArithmeticException.class)
    public void divisionWithException() {
        int i = 1 / 0;
        System.out.println("After division the value of i is :"+ i);
    }

2.忽略測(cè)試

有時(shí)候我們寫(xiě)的用例沒(méi)準(zhǔn)備好,或者該次測(cè)試不想運(yùn)行此用例,那么刪掉顯然不明智,那么就可以通過(guò)注解@Test(enabled = false)來(lái)將其忽略掉,此用例就不會(huì)運(yùn)行了,如下范例:

public class DemoTest1{
    @Test(enabled=false)
    public void TestNgLearn1() {
        System.out.println("this is TestNG test case1");
    }
    @Test
    public void TestNgLearn2() {
        System.out.println("this is TestNG test case2");
    }
}

3.超時(shí)測(cè)試

“超時(shí)”表示如果單元測(cè)試花費(fèi)的時(shí)間超過(guò)指定的毫秒數(shù),那么TestNG將會(huì)中止它并將其標(biāo)記為失敗。此項(xiàng)常用于性能測(cè)試。如下為一個(gè)范例:

public class DemoTest2{
    @Test(timeOut = 5000) // time in mulliseconds
    public void testThisShouldPass() throws InterruptedException {
        Thread.sleep(4000);
    }
    @Test(timeOut = 1000)
    public void testThisShouldFail() {
        while (true){
            // do nothing
        }
    }
}

4.參數(shù)化測(cè)試

4.1 使用XML配置文件提供

代碼如下:

public class DemoTest2 {
    @Parameters({"param1", "param2"})
    public void TestNgLearn1(String param1, int param2) {
        System.out.println("this is TestNG test case1, and param1 is:"+param1+"; param2 is:"+param2);
        Assert.assertFalse(false);
    }
}

XML配置如下:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="First suite" verbose="1" >
    <test name="MyTest">
	    <parameter name="param1" value="1011111" />
	    <parameter name="param2" value="10" />
        <classes>
      		<class name="com.hhm.demo1.DemoTest2"/>
    	</classes>
    </test>
</suite>

4.2 使用@DataProvider傳遞參數(shù)

此處需要注意,傳參的類型必須要一致,且?guī)в蠤DataProvider注解的函數(shù)返回的必然是Object[][],此處需要注意。當(dāng)提供多組數(shù)據(jù)時(shí),測(cè)試案例則會(huì)執(zhí)行相應(yīng)次數(shù)。

public class DemoTest2 {
    @DataProvider(name = "provideNumbers")
    public Object[][] provideData() {
        return new Object[][] { { 10, 20 }, { 100, 110 }, { 200, 210 } };
    }
    @Test(dataProvider = "provideNumbers")
    public void TestNgLearn1(int param1, int param2) {
        System.out.println("this is TestNG test case1, and param1 is:"+param1+"; param2 is:"+param2);
        Assert.assertFalse(false);
    }
}

5.依賴測(cè)試

有時(shí)候,我們需要按順序來(lái)調(diào)用測(cè)試用例,那么測(cè)試用例之間就存在依賴關(guān)系。 TestNG支持測(cè)試用例之間的依賴,使用dependOnMethods和dependsOnGroups來(lái)實(shí)現(xiàn)依賴測(cè)試。如下案例,TestNgLearn1()案例失敗時(shí),TestNgLearn2()案例則不會(huì)執(zhí)行:

public class DemoTest1 {
    public void TestNgLearn1() {
        System.out.println("this is TestNG test case1");
        Assert.assertFalse(true);
    }
    @Test(dependsOnMethods= {"TestNgLearn1"})
    public void TestNgLearn2() {
        System.out.println("this is TestNG test case2");
    }
}

TestNG測(cè)試報(bào)告

使用maven執(zhí)行完測(cè)試用例后,會(huì)在 工程根目錄\target\surefire-reports 目錄下,生成測(cè)試報(bào)告文件,點(diǎn)擊index.html文件則可以在瀏覽器中查看。

這里的報(bào)告比較簡(jiǎn)單,不夠美觀。我們可以結(jié)合Allure插件,生成更美觀的測(cè)試報(bào)告。

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容! 

相關(guān)文章

  • MyEclipse如何取消默認(rèn)工作空間方法示例

    MyEclipse如何取消默認(rèn)工作空間方法示例

    這篇文章主要介紹了MyEclipse如何取消默認(rèn)工作空間,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 詳解java迭代器模式

    詳解java迭代器模式

    這篇文章主要介紹了java迭代器模式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • PowerJob的UserService工作流程源碼解讀

    PowerJob的UserService工作流程源碼解讀

    這篇文章主要介紹了PowerJob的UserService工作流程源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(4)

    Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(4)

    下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以幫到你
    2021-07-07
  • 基于springboot實(shí)現(xiàn)文件上傳

    基于springboot實(shí)現(xiàn)文件上傳

    這篇文章主要為大家詳細(xì)介紹了基于springboot實(shí)現(xiàn)文件上傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 深入解析spring?AOP原理及源碼

    深入解析spring?AOP原理及源碼

    這篇文章主要介紹了spring?AOP原理及源碼分析,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒,需要的朋友可以參考下
    2022-04-04
  • 使用Easyexcel實(shí)現(xiàn)不同場(chǎng)景的數(shù)據(jù)導(dǎo)出功能

    使用Easyexcel實(shí)現(xiàn)不同場(chǎng)景的數(shù)據(jù)導(dǎo)出功能

    這篇文章主要為大家詳細(xì)介紹了如何在不同場(chǎng)景下使用Easyexcel實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • springcloud 中 zuul 修改請(qǐng)求參數(shù)信息的方法

    springcloud 中 zuul 修改請(qǐng)求參數(shù)信息的方法

    這篇文章主要介紹了springcloud 中 zuul 修改請(qǐng)求參數(shù)信息的方法,需要的朋友可以參考下
    2018-02-02
  • Spring Data Jpa 復(fù)合主鍵的實(shí)現(xiàn)

    Spring Data Jpa 復(fù)合主鍵的實(shí)現(xiàn)

    這篇文章主要介紹了Spring Data Jpa 復(fù)合主鍵的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Spring注解之@PropertySource詳解

    Spring注解之@PropertySource詳解

    這篇文章主要介紹了Spring注解之@PropertySource詳解,@PropertySource注解用于指定資源文件讀取的位置,它不僅能讀取properties文件,也能讀取xml文件,并且通過(guò)YAML解析器,配合自定義PropertySourceFactory實(shí)現(xiàn)解析YAML文件,需要的朋友可以參考下
    2023-11-11

最新評(píng)論