Roboitum中加入失敗重跑機制

原址 http://www.yeetrack.com/?p=987android

Robotium是個開源的android功能測試自動化框架,比較流行。我平時使用robotium+maven+spoon,這樣的組合作androd自動化。作界面自動化,尤爲是移動端,case常常失敗,網絡問題、等待機制不合理、手機問題等等。一個case失敗後,再次運行可能又正常了,這種狀況不少。其實咱們在使用Robotium時,能夠手動實現case失敗後,重跑幾回,若是幾回都失敗了,那麼case才斷定爲失敗。git

方法github

使用Robotium要繼承Robotium的ActivityInstrumentationTestCase2這個抽象類,而且要實現其中的setup、tearDown方法。其中還有一個方法runTest就是控制執行咱們的測試用例的,咱們能夠重載這個方法,實現case失敗後重跑。代碼以下:網絡

@Override
protected void runTest() throws Throwable {
    int retryTimes = 3;

    while(retryTimes > 0)
    {
        try{
            Log.d("Robotium", "super");
            super.runTest();
            break;
        } catch (Throwable e)
        {
            if(retryTimes > 1) {
                Log.d("Robotium", "fail,重跑--"+retryTimes);
                retryTimes--;
                tearDown();
                setUp();
                continue;
            }
            else
                throw e;  //記得拋出異常,不然case永遠不會失敗
        }
    }
}

Over,就這麼簡單。框架

Spoon截圖重複maven

由於我使用spoon插件,重跑會致使截圖重複出現。我如今時修改下Spoon-client的源碼。在Spoon-client的Spoon這個final類中,有截圖的實現方法。部分代碼以下:ide

public static File screenshot(Activity activity, String tag)        {
    if (!TAG_VALIDATION.matcher(tag).matches()) {
    throw new IllegalArgumentException("Tag must match " + TAG_VALIDATION.pattern() + ".");
    }
    try {
    File screenshotDirectory =      obtainScreenshotDirectory(activity);
    String screenshotName = System.currentTimeMillis() +        NAME_SEPARATOR + tag + EXTENSION;
    File screenshotFile = new File(screenshotDirectory,         screenshotName);
    takeScreenshot(screenshotFile, activity);
    Log.d(TAG, "Captured screenshot '" + tag + "'.");
    return screenshotFile;
    } catch (Exception e) {
    throw new RuntimeException("Unable to capture screenshot.", e);
    }
}

能夠看到做者爲了防止截圖重複使用了時間戳方法System.currentTimeMillis(),這裏咱們就把時間戳去掉,讓重複的截圖直接覆蓋。測試

代碼改完,打到本地maven倉庫,或者私服,使用便可。插件

附上android-spoon插件地址:https://github.com/square/spooncode

相關文章
相關標籤/搜索