Android如何在測試程序中刪除被測應用私有的原始數據

閱讀目錄 html

咱們知道在Android App測試時,當咱們想把應用程序恢復的初始狀態,咱們一般能夠有如下幾種作法: shell

手動

到Setting -> Apps -> 單擊咱們要測得應用程序 -> 選擇Clear data 安全

這樣從新啓動App的時候,咱們的程序就處於初始狀態了。 app

命令行

固然咱們也是可使用命令行來操做的,好比: 單元測試

adb shell pm clear my.app.package

只要把對應的包名,改爲你本身的就能夠了。 測試

自動化

要是能自動化就更加完美了,這樣咱們就能夠在咱們的自動化Case裏添加相應的恢復App原始狀態的代碼了,如此咱們就能夠保證咱們的Case老是在一個一致的測試環境中,豈不更美? ui

這裏我找到了兩種方法。 this

方法一:在VBS腳本中添加代碼,完成操做

Set objWsh = CreateObject("Wscript.Shell") objWsh.Run "adb shell pm clear my.app.package",1, True

方法二:在Android Test Project中添加相應代碼刪除私有原始數據

複製代碼
Context context = this.getInstrumentation().getTargetContext().getApplicationContext(); Editor edit = context.getSharedPreferences(m_strPreferencesName, Context.MODE_PRIVATE).edit(); edit.clear(); edit.commit();
複製代碼

固然我這裏是刪除名叫「m_strPreferencesName」的數據,若是咱們想刪除其餘,或者全部的Share Preferences數據都是能夠的。 spa

請注意:

雖然Java 有Java.lang.runtime,咱們能夠經過它在運行時去執行Command命令,完成一些操做,可是在Android裏,相似下面的代碼就不能夠: 命令行

複製代碼
try { Runtime.getRuntime().exec("adb shell pm clear com.my.package"); } catch(IOException ex) { ex.printStackTrace(); }
複製代碼

這裏不會拋任何異常,並且也不會清除App的數據。

這是由於Andorid的安全機制不容許一個App去刪除另外一個App的數據。

參考資料:

http://stackoverflow.com/questions/5544205/accessing-application-context-from-testsuite-in-setup-before-calling-getactivi

http://stackoverflow.com/questions/4856955/how-to-programatically-clear-application-data

 

 

軟件開發測試,關注測試自動化,單元測試,壓力測試,尋找測試之美
相關文章
相關標籤/搜索