成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Testng(一):注解

junfeng777 / 2696人閱讀

摘要:執(zhí)行順序,包含和兩種形式,剛好對(duì)應(yīng)各階段的初始化和清理另外和可以定義不同的組合,比如指定某個(gè)功能模塊,或者以提測(cè)版本號(hào)將測(cè)試類方法分組

1 執(zhí)行順序

suit -> class -> method,包含before和after兩種形式,剛好對(duì)應(yīng)各階段的初始化(setup)和清理(teardown)

另外test 和 groups可以定義不同的組合,比如指定某個(gè)功能模塊(package),或者以提測(cè)版本號(hào)將測(cè)試類/方法分組

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

public class App {
    private void log(String action) {
        final String FORMATTER = "===== %-20s =====";
        System.out.println(String.format(FORMATTER, action));
    }

    @BeforeSuite
    public void beforeSuit() {
        log("before suit");
    }

    @AfterSuite
    public void afterSuit() {
        log("after suit");
    }

    @BeforeClass
    public void beforeClass() {
        log("before class");
    }

    @AfterClass
    public void afterClass() {
        log("after class");
    }

    @BeforeMethod
    public void beforeMethod() {
        log("before method");
    }

    @AfterMethod
    public void afterMethod() {
        log("after method");
    }

    @Test
    public void testAdd() {
        log("test add");
        Assert.assertEquals(4, 1 + 3);
    }
 }
 
---------------------------------------------------
===== before suit          =====
===== before class         =====
===== before method        =====
===== test add             =====
===== after method         =====
===== after class          =====
===== after suit           =====

另外,除了@Test注解可以出現(xiàn)多次外,before/after + suit/test/class/method等也可以出現(xiàn)多次,不過(guò)貌似沒(méi)多大意義

2 @Test參數(shù) 2-1 enabled

測(cè)試方法是否生效,默認(rèn)為true;如果不希望執(zhí)行,可以置為false

@Test(enabled = false)
2-2 dependsOnMethods/dependsOnGroups

測(cè)試方法的上游依賴,如果依賴的對(duì)象執(zhí)行失敗,則該測(cè)試方法不執(zhí)行(skip)

public class App {
    private void log(String action) {
        final String FORMATTER = "===== %-20s =====";
        System.out.println(String.format(FORMATTER, action));
    }

    @Test(dependsOnMethods = {"upMethod"})
    public void downMethod() {
        log("run down method");
        Assert.assertEquals(2, 1+1);
    }

    @Test
    public void upMethod() {
        log("run up method");
        Assert.assertEquals(3, 5/3);
    }
}

------------------------------------------------
===============================================
Default Suite
Total tests run: 2, Failures: 1, Skips: 1
==============================================
2-3 expectedExceptions

Assert無(wú)法實(shí)現(xiàn)異常的校驗(yàn),但無(wú)法避免異常的發(fā)生,或者希望人為地拋出異常,因此需要借助此參數(shù)

public class App {

    @Test(expectedExceptions = {java.lang.ArithmeticException.class})
    public void testExcption() {
        int a = 5 / 0;
    }
}
2-4 dataProvider

方法引用的測(cè)試數(shù)據(jù),避免同一個(gè)方法書(shū)寫(xiě)多次,可以設(shè)計(jì)為數(shù)據(jù)驅(qū)動(dòng)

public class App {

    @DataProvider(name = "data")
    public Object[][] data() {
        return new Object[][] {
                {1, 1},
                {2, 4},
                {3, 9},
        };
    }

    @Test(dataProvider = "data")
    public void testSquare(int num, int expected) {
        int result = num * num;
        Assert.assertEquals(result, expected);
    }
}
3 @DataProvider

測(cè)試方法的數(shù)據(jù)提供者,必須返回Object[][]對(duì)象

包含2個(gè)參數(shù):

name,唯一命名,且測(cè)試方法的dataProvider與其一致;如果為空,默認(rèn)為方法名

parallel,默認(rèn)為false;在并行執(zhí)行不影響測(cè)試執(zhí)行時(shí),設(shè)置為true可以提高任務(wù)的執(zhí)行效率

3-1 由其他類提供數(shù)據(jù)

測(cè)試方法查找指定的dataProvider時(shí),默認(rèn)是當(dāng)前類及其父類

如果數(shù)據(jù)由其他類提供,則需指定dataProviderClass,并且由@DataProvider注解的方法必須為static

public class App {

    @Test(dataProvider = "data", dataProviderClass = DataDriver.class)
    public void testSquare(int num, int expected) throws InterruptedException {
        int result = num * num;
        Assert.assertEquals(result, expected);
    }
}

class DataDriver {
    @DataProvider(name = "data", parallel = true)
    public static Object[][] data() {
        return new Object[][] {
                {1, 1},
                {2, 4},
                {3, 9},
        };
    }
}
3-2 帶參數(shù)的DataProvider

多個(gè)測(cè)試方法可以指定同一個(gè)DataProvider

DataProvider支持將Method作為第一個(gè)參數(shù),根據(jù)不同的方法讀取不同的數(shù)據(jù)文件,如Excel、Txt

public class App {

    @Test(dataProvider = "dp", dataProviderClass = DataDriver.class)
    public void test_1(String arg) {
        System.out.println("== run test-1");
        Assert.assertTrue(arg != null);
    }

    @Test(dataProvider = "dp", dataProviderClass = DataDriver.class)
    public void test_2(String arg) {
        System.out.println("== run test-2");
        Assert.assertTrue(arg != null);
    }
}

class DataDriver {
    @DataProvider(name = "dp")
    public static Object[][] data(Method method) {
        System.out.println(method.getName());
        return new Object[][]{
                {"java"},
        };
    }
}

----------------------------------------------------
test_1
== run test-1
test_2
== run test-2
4 @Parameters

加載環(huán)境變量

比如在初始化時(shí),根據(jù)提供的參數(shù)區(qū)分開(kāi)發(fā)環(huán)境與測(cè)試環(huán)境

@Parameters(value = {"jdbcUrl"})
@BeforeSuite
public void initSuit(String jdbcUrl) {
    String jdbcurl = jdbcUrl;
}

那么parameter的值在哪設(shè)置呢? ——testng.xml


  
  
  ...

當(dāng)然與jenkins結(jié)合會(huì)更妙

Parameters are scoped. In testng.xml, you can declare them either under a  tag or under . If two parameters have the same name, it"s the one defined in  that has precedence. This is convenient if you need to specify a parameter applicable to all your tests and override its value only for certain tests.*

test標(biāo)簽下的參數(shù)優(yōu)先級(jí)高于suit

5 @Factory

動(dòng)態(tài)創(chuàng)建測(cè)試類

拿官網(wǎng)例子來(lái)講:編寫(xiě)一個(gè)方法實(shí)現(xiàn)多次訪問(wèn)同一網(wǎng)頁(yè)

// 官網(wǎng)使用了parameter,然后需要在testng.xml中配置多個(gè)參數(shù)值,實(shí)屬麻煩

public class TestWebServer {
  @Test(parameters = { "number-of-times" })
  public void accessPage(int numberOfTimes) {
    while (numberOfTimes-- > 0) {
     // access the web page
    }
  }
}

那么使用@Factory將簡(jiǎn)化配置

public class WebTest {
    private int m_numberOfTimes;

    public WebTest(int numberOfTimes) {
        m_numberOfTimes = numberOfTimes;
    }

    @Test
    public void testServer() {
        for (int i = 0; i < m_numberOfTimes; i++) {
            // access the web page
        }
    }
}
-----------------------------------------------------
public class WebTestFactory {
    @Factory
    public Object[] createInstances() {
        Object[] result = new Object[10];
        for (int i = 0; i < 10; i++) {
            result[i] = new WebTest(i * 10);
        }
        return result;
    }
}

通過(guò)@Factory動(dòng)態(tài)創(chuàng)建測(cè)試類,返回Object[]對(duì)象 —— 包含一組測(cè)試類實(shí)例,框架會(huì)自動(dòng)運(yùn)行每個(gè)實(shí)例下的測(cè)試方法

不過(guò),雖然簡(jiǎn)化了配置,但并不是指不用配置,需要在testng.xml中指定工廠類


    
        
            
            
        
    

但是細(xì)想一下,測(cè)試方法的參數(shù)化可以通過(guò)@DataProvider實(shí)現(xiàn)

我理解的二者區(qū)別如下:

@Factory實(shí)現(xiàn)測(cè)試類的動(dòng)態(tài)創(chuàng)建,@DataProvider改變測(cè)試方法的實(shí)參

@Factory實(shí)例化的類及屬性對(duì)所有測(cè)試方法有效

@Factory和@DataProvider可以一起使用,花式組合數(shù)據(jù)

6 @Ignore

應(yīng)用于測(cè)試類,忽略該類下所有的測(cè)試方法

相當(dāng)于@Test(enabled=false),不過(guò)是批量的

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/72498.html

相關(guān)文章

  • 使用java+TestNG進(jìn)行接口回歸測(cè)試

    摘要:類似于特別是,但它不是框架的擴(kuò)展相較于而言,功能更強(qiáng)大,使用起來(lái)更加方便,比較適合測(cè)試人員來(lái)進(jìn)行集成測(cè)試或是接口回歸測(cè)試。自帶生成的測(cè)試報(bào)告不太美觀,可以使用進(jìn)行美化。 TestNG是一個(gè)開(kāi)源自動(dòng)化測(cè)試框架,TestNG表示下一代(Next Generation的首字母)。 TestNG類似于JUnit(特別是JUnit 4),但它不是JUnit框架的擴(kuò)展,相較于Junit而言,功能更...

    Barry_Ng 評(píng)論0 收藏0
  • Testng(二):監(jiān)聽(tīng)

    摘要:前言監(jiān)聽(tīng),捕捉的行為,并支持修改,用于定制化,如日志輸出自定義報(bào)告監(jiān)聽(tīng)器如下,只支持注解轉(zhuǎn)換,支持,,等注解轉(zhuǎn)換,比第一代更全面,替代測(cè)試方法,并提供回調(diào)函數(shù),常用于權(quán)限校驗(yàn),監(jiān)聽(tīng)形為,代增加上下文參數(shù),攔截器,調(diào)整測(cè)試方法的執(zhí)行順序,執(zhí)行 1 前言 監(jiān)聽(tīng)(Listeners),捕捉Testng的行為,并支持修改,用于定制化,如日志輸出、自定義報(bào)告 監(jiān)聽(tīng)器如下: IAnnotatio...

    nidaye 評(píng)論0 收藏0
  • 3.springboot單元測(cè)試

    摘要:?jiǎn)卧獪y(cè)試因?yàn)楣締卧獪y(cè)試覆蓋率需要達(dá)到,所以進(jìn)行單元測(cè)試用例編寫(xiě)。測(cè)試的時(shí)候可以把每個(gè)判斷分支都走到。同這句代碼,可以通過(guò)如此一個(gè)對(duì)象,使用以上方法基本上可以編寫(xiě)所有代碼的測(cè)試類。編寫(xiě)測(cè)試一定程度上可以發(fā)現(xiàn)代碼錯(cuò)誤,可以借此重構(gòu)代碼。 3.springboot單元測(cè)試因?yàn)楣締卧獪y(cè)試覆蓋率需要達(dá)到80%,所以進(jìn)行單元測(cè)試用例編寫(xiě)。多模塊項(xiàng)目的因?yàn)闀?huì)經(jīng)常調(diào)用其他服務(wù),而且避免數(shù)據(jù)庫(kù)操作對(duì)...

    anRui 評(píng)論0 收藏0
  • Spring、Spring Boot和TestNG測(cè)試指南 - @TestPropertySourc

    摘要:地址可以用來(lái)覆蓋掉來(lái)自于系統(tǒng)環(huán)境變量系統(tǒng)屬性的屬性。同時(shí)優(yōu)先級(jí)高于。利用它我們可以很方便的在測(cè)試代碼里微調(diào)模擬配置比如修改操作系統(tǒng)目錄分隔符數(shù)據(jù)源等。源代碼例子使用工具也可以和一起使用。源代碼見(jiàn)參考文檔 Github地址 @TestPropertySource可以用來(lái)覆蓋掉來(lái)自于系統(tǒng)環(huán)境變量、Java系統(tǒng)屬性、@PropertySource的屬性。 同時(shí)@TestPropertySou...

    paney129 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<