1. 程式人生 > >Cts問題之備份問題(測試案例:CtsShortcutHostTestCases)

Cts問題之備份問題(測試案例:CtsShortcutHostTestCases)

不積跬步無以至千里

       前邊已經說了關於cts單項測試的流程,接下來說一下我遇到的這個關於系統備份功能的測試出現的bug。

簡單說下解CTS的小體會:

1、先檢視這個cts的bug是哪個測試案例的問題,如下面,我這個是CtsShortcutHostTestCases項測試的一個bug

2、然後查詢CTS的測試程式碼,目錄在android下,你必須知道它怎麼測試的?測試邏輯才能知道它怎麼導致你的系統出錯的。

3、其實你可以的話,要進行單項測試一下,觀察一下這一項到底是什麼?有的測試項還是有測試現象的,這樣更直觀些。

4、前邊你已經對你這個測試項有所瞭解,你就需要通過報錯資訊或者程式碼邏輯去檢視一下到底呼叫的是哪個api進行測試的,然後進行改善、解決bug。

我其中遇到的是CtsShortcutHostTestCases測試中其中的android.content.pm.cts.shortcuthost.ShortcutManagerBackupTest#testBackupAndRestore_withNoUninstalltestBackupAndRestore的問題會出現的的錯誤為:

根據他的報錯得知其想要的結果為:Backup finished with result:Success,但是返回的結果為Running backup for 1 requested packages。(其實這個說法其實從程式碼邏輯看出來的,前邊是期望的結果,後邊是返回的結果,但並非所有cts測試都是這樣的形式)

然後發現其中的報錯其實在這個地方,如下截圖:

其中是呼叫了adb的shell bmgr命令去操作BackupManagerService.java 來實現的備份、恢復等功能。

如此文章的操作URL:http://blog.csdn.net/wangkaiblog/article/details/9491993 。

第一種解決方案:

為什麼給你上邊的網址?目的是你可以通過adb shell 操作bmgr命令,看檢視是否自身的系統這個功能是否正常。

我這裡發現我的不正常,不能正常的使用,其中的如果你操作成功就會如下圖:

其中最後會出現processed這個資料夾。

我這裡沒成功的原因是沒有把google的gsm功能未放到android/vendor目錄下,這裡有個app功能就是來實現備份功能:

因此我把google資料夾加上並把它在device下的msm8909.mk檔案加上:$(call inherit-product-if-exists, vendor/google/products/gms.mk) 來實現引用。

其實得知上邊說google這個gsm包是當cts認證過了以後才能加上這個包,因此這個解決方案只能完成功能,並不能當做cts的備份的解決方案

第二種解決方案:

根據cts的log可以看出,如下圖:

因此,檢視程式碼出現在這裡的程式碼邏輯上(BackupManagerService.java)中:

因此可以看出是因為!mTransportWhitelist.contains(svcName)這個判斷條件不通過,因此去檢視mTransportWhitelist的由來邏輯程式碼:

因此,需要檢視SystemConfig是怎麼獲取的這個白名單列表,如下(SystemConfig.java):

因此是在這裡會新增到白名單裡,因此通過查詢他需要在這裡配置一個paltform.xml中:

這樣就能通過上邊的那個條件了,建議採用第二種方案。

這樣這個功能就完善了。^_^