原址 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