<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                上一篇文章我們已經知道testcases目錄中xml配置文件讀取出來后的形式,繼續往下看: ![](https://box.kancloud.cn/2016-01-09_56911dd452703.jpg) 然后把xml對應的TestPackageDef保存到Map中,所以我們可以這樣說,TestPackageDef就代表了一個testcases目錄下的xml文件。所以有多少個xml文件就有多少個TestPackageDef對象,然后將這些對象保存到map中。key值為xml的appPackageName屬性值。當所有的xml文件都配置完成后,我們就回到了buildTestsToRun方法中: ![](https://box.kancloud.cn/2016-01-09_56911dd5df798.jpg) 這個時候調用了getTestPackagesToRun,這個方法是從剛才得到的testRepo對象中篩選出本次任務需要跑的ITestPackageDef列表。再根據該列表組裝List 對象testPkgList并返回。 ![](https://box.kancloud.cn/2016-01-09_56911dd6580ab.jpg) 然乎根據參數來添加發生錯誤時的操作: 保存bugreport信息 保存截圖 保存logcat system的信息 然后找到要安裝的apk和執行完任務后要卸載的包名: ![](https://box.kancloud.cn/2016-01-09_56911dd6a7631.jpg) 這是根據xml中targetBinaryName屬性對應的值找到apk名和targetNameSpace屬性找到要卸載的包名。然后安裝這些apk,并獲取手機設備信息。實際上是通過安裝TestDeviceSetup.apk,然后運行Instrumentation的case來獲取信息的。獲取完信息以后,會判斷是否需要重啟,只有當要執行的case包大于1且mDisableReboot為false時才重啟設備。然后是循環執行測試任務,以包為單位執行,執行的核心為test.run(filter); ![](https://box.kancloud.cn/2016-01-09_56911dd738a4e.jpg) ![](https://box.kancloud.cn/2016-01-09_56911dd7a4c85.jpg) 先將包含測試的apk安裝到設備中,然后運行case,最后刪除case包。我們來看看刪除的case包到底是什么。 ![](https://box.kancloud.cn/2016-01-09_56911dd7d118d.jpg) 原來apk安裝后,android系統是通過其包名來定位apk的,所以卸載的時候肯定要用包名。先來再來回頭看super.run(listener); ![](https://box.kancloud.cn/2016-01-09_56911dd80a0c5.jpg) 先通過DDM的RemoteAndroidTestRunner來創建測試的runner,然后設置一些基本參數,就可以調用doTestRun方法來進行實際的測試。 ![](https://box.kancloud.cn/2016-01-09_56911dd88abb2.jpg) 先獲得要測試的case信息。經過一系列跳來跳去跳來跳去,最后到了TestDevice中: ![](https://box.kancloud.cn/2016-01-09_56911dd8e4177.jpg) 最后到執行case,執行完以后會判斷是否成功發送了命令,如果沒有就要重連設備。最后講一下performDeviceAction這個方法: ~~~ private boolean performDeviceAction(String actionDescription, final DeviceAction action, int retryAttempts) throws DeviceNotAvailableException { // 如果成功直接返回,如果失敗就要重試 for (int i = 0; i < retryAttempts + 1; i++) { try { return action.run(); } catch (TimeoutException e) { logDeviceActionException(actionDescription, e); } catch (IOException e) { logDeviceActionException(actionDescription, e); } catch (InstallException e) { logDeviceActionException(actionDescription, e); } catch (SyncException e) { logDeviceActionException(actionDescription, e); // a SyncException is not necessarily a device communication // problem // do additional diagnosis if (!e.getErrorCode().equals(SyncError.BUFFER_OVERRUN) && !e.getErrorCode().equals(SyncError.TRANSFER_PROTOCOL_ERROR)) { // this is a logic problem, doesn't need recovery or to be // retried return false; } } catch (AdbCommandRejectedException e) { logDeviceActionException(actionDescription, e); } catch (ShellCommandUnresponsiveException e) { CLog.w("Device %s stopped responding when attempting %s", getSerialNumber(), actionDescription); } // TODO: currently treat all exceptions the same. In future consider // different recovery // mechanisms for time out's vs IOExceptions recoverDevice(); } if (retryAttempts > 0) { throw new DeviceUnresponsiveException(String.format("Attempted %s multiple times " + "on device %s without communication success. Aborting.", actionDescription, getSerialNumber())); } return false; ~~~ 上面的寫法會在case執行過程中出現異常的話,會有重試機制。但前提是retryAttempts這個變量的值要大于0。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看