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

資訊專欄INFORMATION COLUMN

Testng(二):監(jiān)聽(tīng)

nidaye / 3039人閱讀

摘要:前言監(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)器如下:

IAnnotationTransformer,只支持@Test注解轉(zhuǎn)換

IAnnotationTransformer2,支持@Test,@DataProvider,@Factory等注解轉(zhuǎn)換,比第一代更全面

IHookable,替代@Test測(cè)試方法,并提供回調(diào)函數(shù),常用于權(quán)限校驗(yàn)

IInvokedMethodListener/IInvokedMethodListener2,監(jiān)聽(tīng)before/after形為,2代增加上下文參數(shù)

IMethodInterceptor,攔截器,調(diào)整測(cè)試方法的執(zhí)行順序

IReporter,suit執(zhí)行完成后生成報(bào)告

ISuiteListener,測(cè)試套件執(zhí)行監(jiān)聽(tīng)

ITestListener,測(cè)試方法執(zhí)行監(jiān)聽(tīng)

2 IAnnotationTransformer

實(shí)現(xiàn)IAnnotationTransformer的transform方法

參數(shù)含義:

ITestAnnotation,即@Test注解本身,可以修改它的各種屬性,如dataProvider,enabled,invocationCount等

Class,當(dāng)@Test應(yīng)用于class時(shí),指向當(dāng)前類;否則值為null

Constructor,同上,作用對(duì)象為構(gòu)造器

Method,同上,作用對(duì)象為方法

需求:以2結(jié)尾的方法執(zhí)行2次

public class MyTransformer implements IAnnotationTransformer {
    @Override
    public void transform(ITestAnnotation iTestAnnotation, Class aClass, Constructor constructor, Method method) {
        if (method.getName().endsWith("2")) {
            iTestAnnotation.setInvocationCount(2);
        }
    }
}
public class App {

    @Test
    public void test_1() {
        System.out.println("Just run once");
    }

    @Test
    public void test_2() {
        System.out.println("Run twice");
    }
}
---------------------------
Just run once
Run twice
Run twice

testng.xml配置


    
        
    

    
        
            
        
    
@Listeners不支持IAnnotationTransformer 和 IAnnotationTransformer2,所以只能在testng.xml上配置監(jiān)聽(tīng)器,當(dāng)然命令行也可行
3 IHookable

實(shí)現(xiàn)IHookable的run方法

調(diào)用IHookCallBack的runTestMethod方法,可以回調(diào)原測(cè)試方法

需求:只執(zhí)行以2結(jié)尾的方法

public class MyHookable implements IHookable {

    @Override
    public void run(IHookCallBack callBack, ITestResult testResult) {
        if (testResult.getMethod().getMethodName().endsWith("2")) {
            callBack.runTestMethod(testResult);
        }
    }
}
@Listeners({MyHookable.class})
public class App {

    @Test
    public void test_1() {
        System.out.println("Just run once");
    }

    @Test
    public void test_2() {
        System.out.println("Run twice");
    }
}
-----------------------------
Run twice
4 IInvokedMethodListener

適用于configuration(suit, test, class),以及test

配合log4j,可以記錄詳細(xì)的執(zhí)行過(guò)程

public class MyInvokedMethodListener implements IInvokedMethodListener {
    @Override
    public void beforeInvocation(IInvokedMethod method, ITestResult testResult) {
        System.out.println("begin to run " + testResult.getName());
    }

    @Override
    public void afterInvocation(IInvokedMethod method, ITestResult testResult) {
        System.out.println("end to run " + testResult.getName() + ", result code is " + testResult.getStatus());
    }
}
@Listeners({MyInvokedMethodListener.class})
public class App {

    @BeforeClass
    public void setup() {
        System.out.println("initial env");
    }

    @Test
    public void test_1() {
        System.out.println("test 1");
        Assert.assertTrue(true);
    }

    @Test
    public void test_2() {
        System.out.println("test 2");
        Assert.assertTrue(false);
    }
}
---------------------
begin to run setup
initial env
end to run setup, result code is 1
begin to run test_1
test 1
end to run test_1, result code is 1
begin to run test_2
test 2
end to run test_2, result code is 2

4 IMethodInterceptor

需求:優(yōu)先執(zhí)行fast組成員方法

public class MyMethodInterceptor implements IMethodInterceptor {
    @Override
    public List intercept(List methods, ITestContext context) {
        List result = new ArrayList<>();

        methods.forEach(method -> {
            Test test = method.getMethod().getConstructorOrMethod().getMethod().getAnnotation(Test.class);
            Set groups = new HashSet<>();
            Arrays.stream(test.groups()).forEach(group -> groups.add(group));

            if (groups.contains("fast")) {
                result.add(0, method);
            } else {
                result.add(method);
            }
        });
        return result;
    }
}
public class App {

    @Test
    public void test_1() {
        System.out.println("first to run");
    }

    @Test(groups = {"fast"})
    public void test_2() {
        System.out.println("second to run");
    }

    @Test void test_3() {
        System.out.println("third to run");
    }
}
---------------------------------
second to run
first to run
third to run
5 ISuiteListener

覆寫(xiě)onStart 和 onFinish方法,分別對(duì)應(yīng)suite開(kāi)始階段和結(jié)束階段

6 ITestListener

對(duì)應(yīng)測(cè)試方法的7種狀態(tài):

onStart,測(cè)試類實(shí)例化后執(zhí)行

onFinish,測(cè)試類下的所有測(cè)試方法完成后執(zhí)行

onTestStart,每次執(zhí)行測(cè)試方法前執(zhí)行

onTestSuccess,每次測(cè)試方法執(zhí)行成功后執(zhí)行

onTestFailure,每次測(cè)試方法執(zhí)行失敗后執(zhí)行

onTestSkipped,每次測(cè)試方法跳過(guò)時(shí)執(zhí)行

onTestFailedButWithinSuccessPercentage,每次測(cè)試方法執(zhí)行失敗,但正確率符合successPercentage要求

實(shí)現(xiàn)ITestListener接口,需要覆寫(xiě)上述7種方法,比較麻煩

因此實(shí)際偏向于繼承TestListenerAdapter

7 IReporter

獲取testng執(zhí)行結(jié)果,與html模板結(jié)合可以定制測(cè)試報(bào)告

public class MyReporter implements IReporter {
    @Override
    public void generateReport(List xmlSuites, List suites, String outputDirectory) {
        suites.forEach(suite -> {
            System.out.println("測(cè)試方法如下:");
            suite.getAllMethods().forEach(iTestNGMethod -> System.out.println("	" + iTestNGMethod.getMethodName()));

            System.out.println("報(bào)告輸出路徑:" + suite.getOutputDirectory());

            suite.getResults().values().forEach(iSuiteResult -> {
                ITestContext iTestContext = iSuiteResult.getTestContext();

                Set passedTests = iTestContext.getPassedTests().getAllResults();
                System.out.println("執(zhí)行成功的方法:" + passedTests.size());
                passedTests.forEach(iTestResult -> {
                    System.out.println("	" + iTestResult.getName());
                    System.out.println("		開(kāi)始時(shí)間:" + iTestResult.getStartMillis());
                    System.out.println("		結(jié)束時(shí)間:" + iTestResult.getEndMillis());
                });

                Set failedTests = iTestContext.getFailedTests().getAllResults();
                System.out.println("執(zhí)行失敗的方法:" + failedTests.size());
                failedTests.forEach(iTestResult -> {
                    System.out.println("	" + iTestResult.getName());
                    System.out.println("		開(kāi)始時(shí)間:" + iTestResult.getStartMillis());
                    System.out.println("		結(jié)束時(shí)間:" + iTestResult.getEndMillis());
                });
            });
        });
    }
}
@Listeners({MyReporter.class})
public class App {

    @Test
    public void test_1() {
        System.out.println("first to run");
    }

    @Test
    public void test_2() {
        System.out.println("second to run");
    }

    @Test
    public void test_3() {
        Assert.assertTrue(false);
    }
}
------------------------
測(cè)試方法如下:
    test_1
    test_2
    test_3
報(bào)告輸出路徑:E:codejavalab	est-outputDefault Suite
執(zhí)行成功的方法:2
    test_2
        開(kāi)始時(shí)間:1541921094204
        結(jié)束時(shí)間:1541921094204
    test_1
        開(kāi)始時(shí)間:1541921094188
        結(jié)束時(shí)間:1541921094188
執(zhí)行失敗的方法:1
    test_3
        開(kāi)始時(shí)間:1541921094204
        結(jié)束時(shí)間:1541921094204

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

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

相關(guān)文章

  • 有贊 WEB-UI 自動(dòng)化實(shí)踐

    摘要:概述是由有贊開(kāi)發(fā)的自動(dòng)化工具,并以此實(shí)現(xiàn)了端和端的核心業(yè)務(wù)的自動(dòng)化。旨在簡(jiǎn)化開(kāi)源工具提供的接口,方便自動(dòng)化測(cè)試用例的設(shè)計(jì)。元素定位自動(dòng)化用例其實(shí)可以分成兩部分,定位元素調(diào)用接口操作該元素。一臺(tái)用于跑自動(dòng)化用例的服務(wù)器。 概述 Bee 是由有贊 QA 開(kāi)發(fā)的 UI 自動(dòng)化工具,并以此實(shí)現(xiàn)了 web 端和 wap 端的核心業(yè)務(wù)的自動(dòng)化。旨在簡(jiǎn)化開(kāi)源工具提供的接口,方便 UI 自動(dòng)化測(cè)試用例...

    h9911 評(píng)論0 收藏0
  • 使用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(一):注解

    摘要:執(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)...

    junfeng777 評(píng)論0 收藏0
  • Spring、Spring Boot和TestNG測(cè)試指南 - 共享測(cè)試配置

    摘要:地址在使用工具中提到在測(cè)試代碼之間盡量做到配置共用。本章將列舉幾種共享測(cè)試配置的方法我們可以將測(cè)試配置放在一個(gè)里,然后在測(cè)試或中引用它。也可以利用的及自定義機(jī)制,提供自己的用在測(cè)試配置上。 Github地址 在使用Spring Boot Testing工具中提到: 在測(cè)試代碼之間盡量做到配置共用。...能夠有效利用Spring TestContext Framework的緩存機(jī)制,Ap...

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

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

0條評(píng)論

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