日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Selenium WebDriver中的TestNG侦听器及示例

發布時間:2023/12/3 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Selenium WebDriver中的TestNG侦听器及示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java提供了不同的接口,使您可以修改TestNG行為。 這些接口在Selenium WebDriver中進一步稱為TestNG偵聽器。 TestNG Listeners還允許您根據項目要求自定義測試日志或報告。
Selenium WebDriver中的TestNG偵聽器是偵聽某些事件并跟蹤測試執行情況的模塊,同時在測試執行的每個階段執行某些操作。

這是一個TestNG教程,在這里我將通過示例幫助您實現不同的TestNG偵聽器,以便下次計劃使用TestNG和Selenium時可以熟練使用它們。

Selenium WebDriver中的TestNG偵聽器可以在兩個級別上實現:

  • 類級別:在此,您可以為每個特定的類實現偵聽器,無論它包含多少測試用例。
  • 套件級別:在此,您將為特定套件實現偵聽器,該套件包括多個類作為測試用例。
  • 如果您不了解TestNG,建議您查看我們的TestNG教程以使用TestNG和Selenium運行您的第一個自動化腳本。

    Selenium WebDriver中的TestNG偵聽器類型

    Selenium WebDriver中有許多TestNG偵聽器,其中一些經常被測試社區使用,而有些則幾乎被遺忘。 在本TestNG教程中,我將通過示例演示最受歡迎的TestNG偵聽器,但在此之前,讓我在Selenium WebDriver中注冊各種TestNG偵聽器。

  • ITestListener
  • IAnnotationTransformer
  • IInvokedMethodListener
  • ISuiteListener
  • iReporter
  • 可配置
  • IExecutionListener
  • 掛鉤
  • IMethodInterceptor
  • IConfigurationListener
  • 常用的TestNG偵聽器及示例

    現在,在這個TestNG教程中,讓我們首先查看帶有示例的最受歡迎和使用最廣泛的TestNG偵聽器。

    1. ITestListener

    ITestListener是Selenium WebDriver中使用最廣泛的TestNG偵聽器。 通過普通的Java類為您提供易于實現的接口,該類將覆蓋ITestListener內部聲明的每個方法。 通過在Selenium WebDriver中使用此TestNG偵聽器,可以通過向方法添加不同的事件來更改測試的默認行為。 它還定義了一種新的日志記錄或報告方式。

    以下是此接口提供的一些方法:

    onStart:在執行任何測試方法之前,將調用此方法。 這可以用來獲取運行測試的目錄。

    onFinish:執行所有測試方法后,將調用此方法。 這可用于存儲所有已運行測試的信息。

    onTestStart:在調用任何測試方法之前,將先調用此方法。 這可以用來指示特定的測試方法已經開始。

    onTestSkipped:跳過每個測試方法時,將調用此方法。 這可以用來指示特定的測試方法已被跳過。

    onTestSuccess:成功執行任何測試方法時,將調用此方法。 這可以用來指示特定的測試方法已成功完成其執行。

    onTestFailure:當任何測試方法失敗時,將調用此方法。 這可以用來指示特定的測試方法已失敗。 您可以創建一個截屏事件,以顯示測試失敗的地方。

    onTestFailedButWithinSuccessPercentage:每次測試方法失敗但在提及的成功百分比之內,都會調用此方法。 為了實現此方法,我們在TestNG中使用兩個屬性作為測試注釋的參數,即successPercentage和invocationCount。 成功百分比取成功百分比的值,調用計數表示特定測試方法將執行的次數。

    例如:@Test(successPercentage = 60,invocationCount = 5),在此注釋中,成功百分比為60%,調用計數為5,這意味著如果至少3次((?)* 100 = 60),則表示5次以上測試方法通過,則視為通過。

    如果您不了解TestNG和Selenium,建議您檢查我們的TestNG教程以運行第一個自動化腳本。

    對于每個ITestListener方法,我們通常傳遞以下參數:

    • “ ITestResult”接口及其實例“ result”(描述測試結果)。

    注意:如果要通過ITestResult跟蹤異常,則需要避免try / catch處理。

    • “ ITestContext”接口及其實例“上下文”描述了包含給定測試運行的所有信息的測試上下文。

    現在,在此TestNG偵聽器教程中,我們將獲取一個基本的示例代碼,用于在類級別運行測試。 日志將在控制臺上生成,它將幫助您了解哪些測試通過,失敗和跳過。

    第一個類(ListentersBlog.java)將包含ITestListener接口實現的所有方法:

    package TestNgListeners;import org.testng.ITestContext; import org.testng.ITestListener; import org.testng.ITestResult;public class ListenersBlog implements ITestListener {public void onTestStart(ITestResult result) {System.out.println("New Test Started" +result.getName());}public void onTestSuccess(ITestResult result) {System.out.println("Test Successfully Finished" +result.getName());}public void onTestFailure(ITestResult result) {System.out.println("Test Failed" +result.getName());}public void onTestSkipped(ITestResult result) {System.out.println("Test Skipped" +result.getName());}public void onTestFailedButWithinSuccessPercentage(ITestResult result) {System.out.println("Test Failed but within success percentage" +result.getName());}public void onStart(ITestContext context) {System.out.println("This is onStart method" +context.getOutputDirectory());}public void onFinish(ITestContext context) {System.out.println("This is onFinish method" +context.getPassedTests());System.out.println("This is onFinish method" +context.getFailedTests());} }

    以下是包含測試方法(TestNGListenersTest.java)的代碼。 確保在類名上方添加一個Listeners注釋,以實現上述添加的方法。
    語法: @Listeners(PackageName.ClassName.class)

    package TestNgListeners;import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.SkipException; import org.testng.annotations.Listeners; import org.testng.annotations.Test;import junit.framework.Assert;@Listeners(TestNgListeners.ListenersBlog.class) public class TestNGListenersTest {@Test //Passing Testpublic void sampleTest1() throws InterruptedException{System.setProperty("webdriver.chrome.driver", "C:\\Users\\Lenovo-I7\\Desktop\\Selenium\\chromedriver.exe");WebDriver driver = new ChromeDriver();driver.get("https://www.apple.com/");driver.manage().window().maximize();driver.findElement(By.xpath("//*[@id=\'ac-globalnav\']/div/ul[2]/li[3]")).click();Thread.sleep(2000); driver.findElement(By.cssSelector("#chapternav > div > ul > li.chapternav-item.chapternav-item-ipad-air > a")).click();Thread.sleep(2000); driver.findElement(By.linkText("Why iPad")).click();Thread.sleep(2000); driver.quit();}@Test //Failing Testpublic void sampleTest2() throws InterruptedException{System.out.println("Forcely Failed Test Method");Assert.assertTrue(false);}private int i = 0;@Test(successPercentage = 60, invocationCount = 5) //Test Failing But Within Success Percentagepublic void sampleTest3() {i++;System.out.println("Test Failed But Within Success Percentage Test Method, invocation count: " + i);if (i == 1 || i == 2) {System.out.println("sampleTest3 Failed");Assert.assertEquals(i, 6);}}@Test //Skipping Testpublic void sampleTest4(){throw new SkipException("Forcely skipping the sampleTest4");}}

    控制臺輸出屏幕:

    現在,假設您的項目中有多個類,那么將Selenium WebDriver中的TestNG偵聽器添加到每個類中可能會很麻煩。 在這種情況下,您可以創建一個測試套件并將Listeners標記添加到套件(xml文件)中,而不是將Listeners添加到每個類中。

    這是用于在套件級別運行測試的示例代碼(testng.xml):

    <suite name="TestNG Listeners Suite" parallel="false"><listeners><listener class-name="TestNgListeners.ListenersBlog"></listener></listeners><test name="Test"><classes><class name="TestNgListeners.TestNGListenersTest"></class></classes></test></suite>

    2. IAnnotationTransformer

    IAnnotationTransformer是一個提供“轉換”方法的接口,TestNG會調用該方法來修改測試類中Test注釋方法的行為。
    轉換方法提供各種參數:

  • 注解:從測試類中讀取的注解。
  • testClass:如果在類上找到注釋,則此參數將表示同一類。
  • testConstructor:如果在構造函數上找到注釋,則此參數表示相同的構造函數。
  • testMethod:如果在方法上找到注釋,則此參數表示相同的方法。
  • 注意:至少一個參數為非null。

    以下是將在套件級別執行的示例代碼。 在此代碼中,我們在Test批注中使用了一個參數“ alwaysRun = true” ,該參數指示即使該方法所依賴的參數失敗,該測試方法也將始終運行。 但是,我們將通過IAnnotationTransformer Listener轉換測試方法的這種行為,這將不允許執行特定的測試方法。

    偵聽器類文件:

    package TestNgListeners;import java.lang.reflect.Constructor; import java.lang.reflect.Method;import org.testng.IAnnotationTransformer; import org.testng.annotations.ITestAnnotation;public class AnnotationTransformers implements IAnnotationTransformer {public boolean isTestRunning(ITestAnnotation ins) {if(ins.getAlwaysRun()){return true;}return false;}public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod) {if(isTestRunning(annotation)){annotation.setEnabled(false);} }}

    測試類文件:

    package TestNgListeners;import org.testng.annotations.Listeners; import org.testng.annotations.Test;public class AnnotationTransformerTests {@Test(alwaysRun=true)public void test1(){System.out.println("This is my first test whose behaviour would get changed while executing"); }@Testpublic void test2(){System.out.println("This is my second test executing"); }}

    控制臺輸出屏幕:

    3. IInvokedMethodListener

    該界面允許您在執行方法之前和之后執行一些操作。 調用此偵聽器以進行配置和測試方法。 Selenium WebDriver中的此TestNG偵聽器與ITestListerner和ISuiteListerner相同。 但是,您應該記下&的區別,即在IInvokedMethodListener中,它在每個方法之前和之后進行調用。

    有兩種方法可以實現:

    beforeInvocation(): This method is invoked prior every method.

    afterInvocation(): This method is invoked post every method.

    這是此偵聽器的示例代碼,在類級別實現。

    InvokedMethodListeners.java(includes listeners implemented methods)package TestNgListeners;import org.testng.IInvokedMethod; import org.testng.IInvokedMethodListener; import org.testng.ITestResult;public class InvokedMethodListeners implements IInvokedMethodListener {public void beforeInvocation(IInvokedMethod method, ITestResult testResult) {System.out.println("Before Invocation of: " + method.getTestMethod().getMethodName() + "of Class:" + testResult.getTestClass()); }public void afterInvocation(IInvokedMethod method, ITestResult testResult) {System.out.println("After Invocation of: " + method.getTestMethod().getMethodName() + "of Class:" + testResult.getTestClass());} }

    文件名: InvokedMethodListenersTest.java(包括配置和測試方法)

    package TestNgListeners;import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Listeners; import org.testng.annotations.Test;@Listeners(value=InvokedMethodListeners.class) public class InvokedMethodListenersTest { @Testpublic void test1(){System.out.println("My first test");}@Testpublic void test2(){System.out.println("My second test");}@BeforeClasspublic void setUp() {System.out.println("Before Class method");}@AfterClasspublic void cleanUp() {System.out.println("After Class method");} }

    控制臺輸出屏幕:

    4. ISuiteListener

    Selenium WebDriver中的此TestNG偵聽器以稱為ISuiteListener的套件級別實現。 它有2種方法:

    onStart:在測試套件執行之前調用此方法。

    onFinish:在測試套件執行后調用此方法。

    此偵聽器基本上偵聽套件執行之前和之后發生的事件。如果父套件還包含子套件,則在運行父套件之前執行子套件。

    步驟1:使用普通的Java類實現ISuiteListener并添加未實現的方法。

    類:SuiteListeners

    package TestNgListeners;import org.testng.ISuite; import org.testng.ISuiteListener;public class SuiteListeners implements ISuiteListener {public void onStart(ISuite suite) { System.out.println("Suite executed onStart" + suite.getName());}public void onFinish(ISuite suite) {System.out.println("Suite executed onFinish" + suite.getName());} }

    步驟2:創建要添加到兩個不同子套件中的兩個測試類。

    第1類:SuiteListenersTests1

    package TestNgListeners;import org.testng.annotations.AfterSuite; import org.testng.annotations.BeforeSuite; import org.testng.annotations.Test;public class SuiteListenersTests1 {@BeforeSuitepublic void test1(){System.out.println("BeforeSuite method in Suite1"); }@Testpublic void test2(){System.out.println("Main Test method 1");}@AfterSuitepublic void test3(){System.out.println("AfterSuite method in Suite1"); }}

    第2類:SuiteListenersTests2

    package TestNgListeners;import org.testng.annotations.AfterSuite; import org.testng.annotations.BeforeSuite; import org.testng.annotations.Test;public class SuiteListenersTests2 {@BeforeSuitepublic void test1(){System.out.println("BeforeSuite method in Suite2"); }@Testpublic void test2(){System.out.println("Main Test method 2");}@AfterSuitepublic void test3(){System.out.println("AfterSuite method in Suite2"); }}

    步驟3:將測試類添加到子套件中。

    套件1:測試套件One.xml

    <!--?xml version="1.0" encoding="UTF-8"?-->

    套件2:測試套件Two.xml

    <!--?xml version="1.0" encoding="UTF-8"?-->

    步驟4:創建一個父套件xml文件,該文件將結合其他2個定義的套件以及listeners類。

    <!--?xml version="1.0" encoding="UTF-8"?-->

    控制臺輸出屏幕:

    5. IReporter

    Selenium WebDriver中的此TestNG偵聽器提供了一個界面,可幫助您自定義TestNG生成的測試報告。 它提供了generateReport方法,該方法將在所有套件執行后被調用。 該方法還包含三個參數:

  • xmlSuite:它為您提供了正在執行的testng xml文件中提供的多個套件的列表。
  • 套件:此對象表示有關類,包,測試執行結果以及所有測試方法的大量信息。 基本上,它表示最終執行后有關套件的詳細信息。
  • outputDirectory:包含生成報告的輸出文件夾路徑。
  • 以下是套件級別的IReporterer偵聽器示例。

    文件名:ReporterListener.java

    package TestNgListener;import java.util.List; import java.util.Map;import org.testng.IReporter; import org.testng.ISuite; import org.testng.ISuiteResult; import org.testng.ITestContext; import org.testng.xml.XmlSuite;public class ReporterListener implements IReporter {public void generateReport(List xmlSuites, List suites, String outputDirectory) {for(ISuite isuite : suites){Map<string, isuiteresult=""> suiteResults = isuite.getResults();String sn = isuite.getName();for(ISuiteResult obj : suiteResults.values()){ITestContext tc = obj.getTestContext();System.out.println("Passed Tests of" + sn + "=" + tc.getPassedTests().getAllResults().size());System.out.println("Failed Tests of" + sn + "=" + tc.getFailedTests().getAllResults().size());System.out.println("Skipped Tests of" + sn + "=" + tc.getSkippedTests().getAllResults().size());}}}} </string,>

    文件名:ReporterTest.java

    package TestNgListener;import org.testng.SkipException; import org.testng.annotations.Listeners; import org.testng.annotations.Test;import junit.framework.Assert;public class ReporterTest {@Testpublic void FirstTest(){System.out.println("The First Test Method");Assert.assertTrue(true);}@Testpublic void SecondTest(){System.out.println("The Second Test Method");Assert.fail("Failing this test case");}@Testpublic void ThirdTest(){System.out.println("The Third Test Method");throw new SkipException("Test Skipped");}}

    控制臺輸出屏幕:

    Selenium WebDriver中不太常用的TestNG偵聽器

    在本節中,我將重點介紹那些TestNG偵聽器,這些偵聽器沒有上一節中討論的那樣知名。 我已經避免了這些TestNG偵聽器及其示例的實際演示,因為它們很少使用。 但是,我將幫助您了解其目的。

    6. IConfigurationListener

    Selenium WebDriver中的此TestNG偵聽器僅在通過,失敗或跳過配置方法時才用于創建事件。
    下面是此偵聽器提供的未實現的方法:

    • onConfigurationSuccess:配置方法成功時將調用它。
    • onConfigurationFailure:配置方法失敗時,將調用它。
    • onConfigurationSkip:顧名思義,當您的配置方法被跳過時,它將調用onConfigurationSkip方法。

    7. IExecutionListener

    此偵聽器用于跟蹤測試或套件運行開始和結束的時間。 它提供了兩種方法:

    onExecutionStart:在套件或測試開始運行之前被調用。

    onExecutionFinish:在套件或測試執行后調用。

    注意:此偵聽器不可能阻止執行,而只能以某種方式創建事件。 此外,在配置TestNG時,您可以提供多個“ IExecution”偵聽器。

    8. IHookable

    此接口跳過測試方法的調用,并提供一個被調用的run方法,而不是找到的每個@Test方法。 然后,一旦調用IHookCallBack參數的callBack()方法,就會調用測試方法。

    當您希望對需要JAAS身份驗證的類執行測試時,可以使用IHookable偵聽器。 這可以用來設置權限,即測試對象應該針對誰運行以及何時跳過測試方法。

    9. IMethodInterceptor

    →要返回IMethodInstance的列表,請執行TestNG。

    →對測試方法列表進行排序。

    TestNG將按照返回值中定義的相同順序執行測試方法。
    IMethodInterceptor接口僅包含一種實現“攔截”的方法,該方法返回修改后的測試方法列表。

    示例:一種測試方法SampleTestOne是測試日志,因此我們將其分組在“ LogCheck”中。

    現在,假設我們只想運行LogCheck分組測試,而不是其他測試,因此,我們必須提供一個IMethodInterceptor偵聽器,該偵聽器可以消除其他測試并僅返回LogCheck分組測試。

    10. IConfigurable

    ICongurable偵聽器與IHookable偵聽器有些相似。 此接口跳過測試方法的調用,并提供一個run方法,而不是找到的每個配置方法都將被調用。 一旦調用IConfigureCallBack參數的callBack()方法,便會調用配置方法。

    您在Selenium WebDriver中使用最多的哪些TestNG偵聽器?

    我希望這個TestNG教程能夠幫助您了解哪種TestNG偵聽器最適合您的項目要求。 關于很少使用的TestNG偵聽器,如果您發現Selenium中有任何特定的TestNG偵聽器非常有用,請隨時在下面的評論部分中共享它們。 另外,如果您對本文有任何疑問,請告訴我。 我期待您的答復。 測試愉快!


    翻譯自: https://www.javacodegeeks.com/2019/06/testng-listeners-in-selenium-webdriver-examples.html

    總結

    以上是生活随笔為你收集整理的Selenium WebDriver中的TestNG侦听器及示例的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。