和v1的plan不同,v2的測試用例是被組織成乙個乙個module的,乙個module被包裝成乙個apk,乙個apk對應乙個config配置檔案,測試時apk就被push到手機上,測試結束後解除安裝。
前面說過用例的模組分發是以裝置為單位的,下面我們看看是怎麼組織要測試的用例模組的。
在compatibility的run方法中呼叫了initializemodulerepo:
最後返回的是在指定分片(指定裝置)上執行的測試模組:
initialize函式傳入了分片數量、分片號、測試用例路徑、devicetoken等等資訊,猜測是最開始解析命令列輸入時就已經儲存好了。看一下這個函式實現(節選):
這個函式裡有關於裝置令牌的乙個解析,應該也是讀取裝置資訊時獲取到的,如果符合令牌的格式要求就將資訊新增到list中。
這部分是讀取了testcase的所有config檔案,然後遍歷config檔案,將字尾去除,視為xml檔案進行和sax解析處理,為每個abi生成不同配置,然後進行模組的過濾操作。
這裡對config進行了引數注入,然後對每類測試準備了實現介面等,然後進行了分片,以及最後模組的最終組織,最後settestruns,建立好了執行模組。
建立乙個shardedlist,判斷test是否可分,如果可分,就依次把每個分片的test構成的list加入到shardedlist中返回。每個分片的test是**分的呢?猜測是在invoke操作裡做了shard分片操作。(有興趣可以再去分析分析)
最後再遍歷test組織module:module分為了mtokenmodules和mnontokenmodules:
最後回到initializemodulerepo:
將模組列表新增到buildhelper中,模組總數量就等於有token的模組數+沒有token的模組數。modulerepo終於初始化好了。
return返回的是在指定sn號裝置上(也就指定shard序號)執行的測試模組,看下這個getmodules函式:
首先,將沒有token的模組分為具有平衡runtimehint的分片,取出shardindex對應的那一塊加到modules中(這裡的modules是待會兒要返回的,是針對特定裝置的):
然後,接下來是對於有token模組的分配:
首先,獲取到該裝置的token,如果不為空,就去遍歷token模組,如果有某個模組還沒有被排程並且該模組的token與裝置的token匹配,就把該模組加入要返回的modules中,同時加入已排程模組中表示已被排程。
簡言之,最後給i號裝置分配的模組就是一部分的untokenmodules + 與之匹配的tokenmodule。
在p版本中,所有用例都被視作了untoken,裝置和用例的token標籤都沒有實現。所以**這裡只是實現了乙個匹配的介面,還需要我們自己去實現。
附圖:
Cts框架解析 6 任務的執行
前兩篇講了任務的加入和9大項配置,這篇講任務的執行。任務的執行在commandscheduler的run方法中,所以刪除全部的斷點,在run方法中打上斷點,重新啟動啟動debug 先看while迴圈以下的第一行 executablecommand cmd dequeueconfigcommand p...
我研究過的cms
micecms akcms cms made 內容管理系統 cms made 簡稱cmsms 是一款輕量級的內容管理系統,獲得2008開源php最佳第3名,以及最有潛力第2名,旨在為靜態內容為主的小型門戶 提供最簡單最輕鬆的架站體驗。cmsms 以不限深度的樹型結構來組織內容,符合大部分場合的資訊結...
我有關PIM的研究
我的主要研究點集中在思維同計算機快速互動 計算機輔助記憶上 目前在結合認知心理學和行為心理學研究成果,進行短時記憶和工作 記憶內容恢復,基於任務的資源管理等領域的探索。關於短時記憶和工作記憶的恢復的問題 在當前的社會生活中,人在一天中往往是並行的做多件事 常常被一些事情打斷思考。這樣常常會出現下午的...