国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Testng(二):監聽

nidaye / 3032人閱讀

摘要:前言監聽,捕捉的行為,并支持修改,用于定制化,如日志輸出自定義報告監聽器如下,只支持注解轉換,支持,,等注解轉換,比第一代更全面,替代測試方法,并提供回調函數,常用于權限校驗,監聽形為,代增加上下文參數,攔截器,調整測試方法的執行順序,執行

1 前言

監聽(Listeners),捕捉Testng的行為,并支持修改,用于定制化,如日志輸出、自定義報告

監聽器如下:

IAnnotationTransformer,只支持@Test注解轉換

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

IHookable,替代@Test測試方法,并提供回調函數,常用于權限校驗

IInvokedMethodListener/IInvokedMethodListener2,監聽before/after形為,2代增加上下文參數

IMethodInterceptor,攔截器,調整測試方法的執行順序

IReporter,suit執行完成后生成報告

ISuiteListener,測試套件執行監聽

ITestListener,測試方法執行監聽

2 IAnnotationTransformer

實現IAnnotationTransformer的transform方法

參數含義:

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

Class,當@Test應用于class時,指向當前類;否則值為null

Constructor,同上,作用對象為構造器

Method,同上,作用對象為方法

需求:以2結尾的方法執行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上配置監聽器,當然命令行也可行
3 IHookable

實現IHookable的run方法

調用IHookCallBack的runTestMethod方法,可以回調原測試方法

需求:只執行以2結尾的方法

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,可以記錄詳細的執行過程

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

需求:優先執行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

覆寫onStart 和 onFinish方法,分別對應suite開始階段和結束階段

6 ITestListener

對應測試方法的7種狀態:

onStart,測試類實例化后執行

onFinish,測試類下的所有測試方法完成后執行

onTestStart,每次執行測試方法前執行

onTestSuccess,每次測試方法執行成功后執行

onTestFailure,每次測試方法執行失敗后執行

onTestSkipped,每次測試方法跳過時執行

onTestFailedButWithinSuccessPercentage,每次測試方法執行失敗,但正確率符合successPercentage要求

實現ITestListener接口,需要覆寫上述7種方法,比較麻煩

因此實際偏向于繼承TestListenerAdapter

7 IReporter

獲取testng執行結果,與html模板結合可以定制測試報告

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

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

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

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

                Set failedTests = iTestContext.getFailedTests().getAllResults();
                System.out.println("執行失敗的方法:" + failedTests.size());
                failedTests.forEach(iTestResult -> {
                    System.out.println("	" + iTestResult.getName());
                    System.out.println("		開始時間:" + iTestResult.getStartMillis());
                    System.out.println("		結束時間:" + 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);
    }
}
------------------------
測試方法如下:
    test_1
    test_2
    test_3
報告輸出路徑:E:codejavalab	est-outputDefault Suite
執行成功的方法:2
    test_2
        開始時間:1541921094204
        結束時間:1541921094204
    test_1
        開始時間:1541921094188
        結束時間:1541921094188
執行失敗的方法:1
    test_3
        開始時間:1541921094204
        結束時間:1541921094204

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72497.html

相關文章

  • 有贊 WEB-UI 自動化實踐

    摘要:概述是由有贊開發的自動化工具,并以此實現了端和端的核心業務的自動化。旨在簡化開源工具提供的接口,方便自動化測試用例的設計。元素定位自動化用例其實可以分成兩部分,定位元素調用接口操作該元素。一臺用于跑自動化用例的服務器。 概述 Bee 是由有贊 QA 開發的 UI 自動化工具,并以此實現了 web 端和 wap 端的核心業務的自動化。旨在簡化開源工具提供的接口,方便 UI 自動化測試用例...

    h9911 評論0 收藏0
  • 使用java+TestNG進行接口回歸測試

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

    Barry_Ng 評論0 收藏0
  • Testng(一):注解

    摘要:執行順序,包含和兩種形式,剛好對應各階段的初始化和清理另外和可以定義不同的組合,比如指定某個功能模塊,或者以提測版本號將測試類方法分組 1 執行順序 suit -> class -> method,包含before和after兩種形式,剛好對應各階段的初始化(setup)和清理(teardown) 另外test 和 groups可以定義不同的組合,比如指定某個功能模塊(package)...

    junfeng777 評論0 收藏0
  • Spring、Spring Boot和TestNG測試指南 - 共享測試配置

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

    CHENGKANG 評論0 收藏0

發表評論

0條評論

nidaye

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<