亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在使用 TestNG 失敗的測試用例的情況下重新運行整個班級

在使用 TestNG 失敗的測試用例的情況下重新運行整個班級

呼如林 2022-03-10 21:43:54
我有一個使用 Appium 和 TestNG 開發的腳本設置。TestNG xml 包含多個類的執行,每個類都有多個測試用例。例子:Class1:-Class1_Test1-Class1_Test2-Class1_Test3Class2:-Class2_Test1-Class2_Test2-Class2_Test3我嘗試集成 IRetryAnalyzer 但這只是調用失敗的測試用例。要求是執行完整的 Class1,以防 Class1_Test2 在 Class1 失敗之前立即失敗,然后再進入 Class2?詢問的原因是應用程序是媒體播放器,如果由于網絡/服務器問題導致媒體播放失敗,則不需要執行下一個前進和后退測試用例,需要重新啟動應用程序并重試進行進一步測試之前的所有步驟。
查看完整描述

3 回答

?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

根據TestNg文檔沒有辦法實現這一點,可能下面的答案可以幫助你



查看完整回答
反對 回復 2022-03-10
?
撒科打諢

TA貢獻1934條經驗 獲得超2個贊

我正在使用小組測試。即使課堂上的某些測試失敗,它也會繼續測試。


在您的類文件中,您可以定義如下組。


public class myClass(){

    @Test(groups = {"abc"}, priority = 1)

    public void test1(){

    }

    @Test(groups = {"abc"}, priority = 2)

    public void test2(){

    }

    @Test(groups = {"abc"}, priority = 3)

    public void test3(){

    }

}

同樣,您可以定義具有相同組名或不同組名的第二類。優先級決定了測試用例運行的順序。


您的 Testng.xml 文件將如下所示:


<test name="any name">

  <groups>

    <run>


      <include name="abc"  />

      <include name="any other group name"  />

    </run>

  </groups>


  <classes>

    <class name="packageName.myClass"/>

    <class name="your_packageName.class2"/>

  </classes>

</test>

packageName 是您的測試類所在的路徑。如果您的測試類和 testng.xml 文件在同一個包中,則不需要 packageName。


有關 Testng 中的測試方法的更多信息,請參閱此鏈接。


查看完整回答
反對 回復 2022-03-10
?
眼眸繁星

TA貢獻1873條經驗 獲得超9個贊

終于找到了重新運行整個班級的解決方法。我將其稱為一種解決方法,因為從技術上講,TestNG 不提供在任何時間點發生故障時重新執行 @BeforeTest 的方法。


我發現最好的方法是沒有@BeforeTest 部分,只有一個@Test 部分,并將所有測試用例作為函數,在定義的單個@Test 中調用。因此,如果在任何時間點發生故障,將調用@Test,其中包含按所需順序包含的所有功能,包括設置功能。一旦觀察到失敗,重試邏輯就會重新運行整個 @Test 部分。


示例:


改動前:


package <yourpackagename>;


<import required packages>


public class Home {

    private AppiumDriver<?> driver;

    private static final String url = "http://0.0.0.0:4723/wd/hub";


    <define your variables>


    @Parameters({"deviceOS", "DSN"})

    @BeforeTest

    public void setUp(String deviceOS, String DSN) throws InterruptedException, MalformedURLException, ParseException {

        DesiredCapabilities capabilities = new DesiredCapabilities();

        capabilities.setCapability(CapabilityType.BROWSER_NAME, "");

        capabilities.setCapability("deviceName", "FireTVStick");

        capabilities.setCapability("platformVersion", deviceOS);

        capabilities.setCapability("udid", DSN);

        capabilities.setCapability("platformName", "Android");

        capabilities.setCapability("noReset", true);

        capabilities.setCapability("fullReset", false);

        capabilities.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 1200);

        capabilities.setCapability("appPackage", "<your app package>");

        capabilities.setCapability("appActivity", "<your launcher activity>");

        driver = new AndroidDriver<>(new URL(url), capabilities);

        driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);

        //End of Launch Code


        System.out.println("-Testing Home Section-");

    }   



    @Parameters({"DSN"})

    @Test

    public void Test1_VideoPlaybackVerification(String DSN) throws InterruptedException, ParseException{


        //Video playback verification code starts

        .

        .

        //End of code for Video playback verification

    }



    @Test //Test Case for Pause verification

    public void Test2_PauseVerification() throws InterruptedException, ParseException{

        //Video pause verification code starts

        .

        .

        //End of code for Video pause verification

    }


    @AfterTest

    public void End() {

        driver.quit();

    }

}

更改后:


package <yourpackagename>;


<import required packages>


@Listeners(MyTestListenerAdapter.class)

public class Home {

    private AppiumDriver<?> driver;


    <define your variables>


    public void setUp(String port, String deviceOS, String DSN, String deviceName) throws InterruptedException, MalformedURLException {

        DesiredCapabilities capabilities = new DesiredCapabilities();

        capabilities.setCapability(CapabilityType.BROWSER_NAME, "");

        capabilities.setCapability("platformVersion", deviceOS);

        capabilities.setCapability("deviceName", deviceName);

        capabilities.setCapability("udid", DSN);

        capabilities.setCapability("platformName", "Android");

        capabilities.setCapability("noReset", true);

        capabilities.setCapability("fullReset", false);

        capabilities.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 1200);

        capabilities.setCapability("appPackage", "<your app package>");

        capabilities.setCapability("appActivity", "<your launcher activity>");

        final String url = "http://127.0.0.1:"+port+"/wd/hub";

        driver = new AndroidDriver<>(new URL(url), capabilities);

        driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);

    }


    public void HomeVerification(String DSN, String deviceName) throws InterruptedException, ParseException

    {

        System.out.println(deviceName+": Testing Home Section-");


        <--Your code to perform any additional task before execution-->

    }


    public void Test1_VideoPlaybackVerification(String DSN, String deviceName) throws InterruptedException, ParseException

    {       

        //Video playback verification code starts

        .

        .

        //End of code for Video playback verification

    }


    public void Test2_PauseVerification(String deviceName) throws InterruptedException, ParseException

    {


        //Video pause verification code starts

        .

        .

        //End of code for Video pause verification

    }


    @Parameters({"port", "deviceOS", "DSN", "deviceName"})

    @Test (retryAnalyzer = Retry.class)

    public void TestRun(String port, String deviceOS, String DSN, String deviceName) throws InterruptedException, ParseException, MalformedURLException {


        try {

            setUp(port, deviceOS, DSN, deviceName);

            HomeVerification(DSN, deviceName);

            Test1_VideoPlaybackVerification(DSN, deviceName);

            Test2_PauseVerification(deviceName);

        } catch (WebDriverException e) {

            // TODO Auto-generated catch block

            Reporter.log(deviceName+": Error observed while executing script!", true);

            Assert.assertTrue(false); //Fails the test case

        }


    }


    @AfterTest

    public void End() {

        driver.quit();

    }

}


查看完整回答
反對 回復 2022-03-10
  • 3 回答
  • 0 關注
  • 186 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號