robotium 測試用例操作失敗自動重跑測試用例方法

我們在做自動化的時候,偶爾會遇到測試用例莫名其妙的失敗,再次運行又OK的情況。針對這種情況我們有必要在測試用例操作失敗時自動重跑 來避免不必要的核查。

那麼針對robotium框架該如何實現自動重跑測試用例呢?

導致測試用例中止可能會有以下幾種情況:

1、我們自己的斷言 junit.framework.AssertionFailedError(有bug的情況)這個類的根類是Error

2、測試用例拋出exception

3、被測應用進程crash

對於第一種情況,是我們不需要重跑的,第三種情況crash我們今天的方法還無法重跑(個人觀點robotium針對crash的重跑是沒有意義的),那麼第二種情況纔是我們應該重跑的情況


接下來我們就來實際操作如何重跑用例,在繼承ActivityInstrumentationTestCase2的類中複寫runTest直接看到代碼(都有註釋就不多說了)

@Override
protected void tearDown() throws Exception {
    solo.finishOpenedActivities();
}

@Override
protected void runTest() throws Throwable {
    int times = 2;//重試次數
    while (true) {
        try {
            super.runTest();
            Log.e("123",this.getClass().getSimpleName() + "/"+getName()+":測試成功");
            break;
        } catch (Exception e) {//測試過程發生Exception後的處理
            if (times > 0) {
                times--;
                tearDown();//釋放資源
                Runtime run = Runtime.getRuntime();
                try {
                    //啓動被測app
                    run.exec("am start --user 0 -n 被測app包名/被測app launchactivity");
                } catch (Exception e1) {
                    throw new RunTestException(e1);
                }
                setUp();//初始化重新開始
                continue;
            } else {
                solo.takeScreenshot(this.getClass().getSimpleName() + "/"+getName());
                Log.e("123",this.getClass().getSimpleName() + "/"+ getName() + ":測試執行過程中出現異常");
                throw new RunTestException(e);
            }
        } catch (AssertionFailedError e2) {
            Log.e("123", this.getClass().getSimpleName() + "/"+getName() + ":測試失敗");
            solo.takeScreenshot(this.getClass().getSimpleName() + "/"+getName());
            throw new OperationErrorException(e2);
        }
    }
}

接下來我們試一試,直接在測試用例中跑出一個異常,重跑2次

public void testCase_001()  {
    solo.sleep(5000);
    Log.e("123", "啓動測試123");
    throw new RuntimeException("運行時異常");
}
我們的logcat中打印信息爲:

02-10 15:19:17.263 26812-26849/? E/123: 啓動測試123
02-10 15:19:23.923 26812-26849/? E/123: 啓動測試123
02-10 15:19:30.273 26812-26849/? E/123: 啓動測試123
02-10 15:19:30.403 26812-26849/? E/123: TestDemo/testCase_001:測試執行過程中出現異常

先跑的一次+重跑的2次正好打印了3次,看來我們的重跑是成功的(也可以在設備上觀察是否重跑了)

那我們再來看看斷言錯誤是如何處理的,同樣重啓次數定義爲2,在測試用用例直接面斷言錯誤,

public void testCase_001()  {
    solo.sleep(5000);
    Log.e("123", "啓動測試123");
    assertTrue(false);
}

運行後logcat的結果爲:

02-10 15:31:14.657 32393-32428/? E/123: 啓動測試123
02-10 15:31:14.657 32393-32428/? E/123: TestDemo/testCase_001:測試失敗

正常斷言失敗後並未重跑達到了我們的目的。

如果有其它問題或不清楚的地方還請留言

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章