1.程序無響應,ANR問題:在日志中搜索“ANR”
2.崩潰問題:在日志中搜索“CRASH”
3.其他問題:在日志中搜索”Exception”
搜索了一下,發現無1,2問題,但又一個Exception異常
Got IOException performing flipjava.io.IOException: write failed: EINVAL (Invalid argument)
// Injection Failed
百度后,發現別人這樣解釋的:monkey發送各種事件操作app,中間有一個io異常,但是並沒有堆棧,所以沒有任何意義。
如果在這里發現monkey崩潰日志,應該要看monkey當時執行了什么事情,自己手動執行看看是否出現,如果不出現,再次使用相同的seed和相同的頁面,再次啟動app monkey再來一次隨機測試,如果沒有出現,證明次問題是偶然性問題。
3.adb logcat查看安卓日志
記得只查看並過濾自己操作的app日志,不過在屏幕上輸出並不好找出問題,最好把它輸出到text文件再查看
命令如下:
adb logcat -v time | findstr vchat.faceme >C:\Users\admin\Downloads\TESTER\monkey_log\andriod_log.txt
一樣的搜索關鍵字ANR/CRASH/Exception 查看日志異常
搜索到一個崩潰和一個異常:
08-13 11:09:27.658 D/CrashReport(15779): >>> vchat.faceme.ui.personal.PersonalSettingActivity onResumed <<<
08-12 20:12:20.073 D/Error ( 4763): ERR: stack=android.util.Log$TerribleFailure: {"ptid":"4763-1*","stack":"java.lang.NumberFormatException: Invalid long: \"gp-500108\"\\n\tat java.lang.Long.invalidLong(Long.java:124)\\n\tat java.lang.Long.parse(Long.java:363)\\n\tat java.lang.Long.parseLong(Long.java:353)\\n\tat java.lang.Long.parseLong(Long.java:321)\\n\tat vchat.common.util.IMDecodeUtil.decodeContactByTargetId(IMDecodeUtil.java:96)\\n\tat vchat.faceme.message.adapter.MessageListAdapter.convert(MessageListAdapter.java:65)\\n\tat vchat.faceme.message.adapter.MessageListAdapter.convert(MessageListAdapter.java:47)\\n\tat com.chad.library.adapter.base.BaseQuickAdapter.onBindViewHolder(BaseQuickAdapter.java:937)\\n\tat com.chad.library.adapter.base.BaseQuickAdapter.onBindViewHolder(BaseQuickAdapter.java:66)\\n\tat androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6890)\\n\tat androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6932)\\n\tat androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5852)\\n\tat androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6119)\\n\tat androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5958)\\n\tat androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5954)\\n\tat androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2226)\\n\tat androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1557)\\n\tat androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1517)\\n\tat androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:612)\\n\tat androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3990)\\n\tat androidx.recyclerview.widget.RecyclerView.onMeasure(RecyclerView.java:3402)\\n\tat android.view.View.measure(View.java:18831)\\n\tat androidx.constraintlayout.widget.ConstraintLayout.internalMeasureChildren(ConstraintLayout.java:1248)\\n\tat androidx.constraintlayout.widget.ConstraintLayout.onMeasure(ConstraintLayout.java:1593)\\n\tat android.view.View.measure(View.java:18831)\\n\tat vchat.common.widget.MyDrawerLayout.onMeasure(MyDrawerLayout.java:1115)\\n\tat android.view.View.measure(View.java:18831)\\n\tat androidx.constraintlayout.widget.ConstraintLayout.internalMeasureChildren(ConstraintLayout.java:1248)\\n\tat androidx.constraintlayout.widget.ConstraintLayout.onMeasure(ConstraintLayout.java:1593)\\n\tat android.view.View.measure(View.java:18831)\\n\tat android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5990)\\n\tat android.widget.FrameLayout.onMeasure(FrameLayout.java:194)\\n\tat androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:143)\\n\tat android.view.View.measure(View.java:18831)\\n\tat android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5990)\\n\tat android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)\\n\tat android.widget.LinearLayout.measureVertical(LinearLayout.java:748)\\n\tat android.widget.LinearLayout.onMeasure(LinearLayout.java:630)\\n\tat android.view.View.measure(View.java:18831)\\n\tat android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5990)\\n\tat android.widget.FrameLayout.onMeasure(FrameLayout.java:194)\\n\tat android.view.View.measure(View.java:18831)\\n\tat android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5990)\\n\tat android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)\\n\tat android.widget.LinearLayout.measureVertical(LinearLayout.java:748)\\n\tat android.widget.LinearLayout.onMeasure(LinearLayout.java:630)\\n\tat android.view.View.measure(View.java:18831)\\n\tat android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5990)\\n\tat android.widget.FrameLayout.onMeasure(FrameLayout.java:194)\\n\tat com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:26
出現了一個崩潰異常,給開發反饋后,開發果然知道是出現了什么問題,然后正在看,對我來說,合適蠻有成就感的哈哈哈
停止monkey的辦法:
注意 Monkey啟動后會不斷地向被測對象發送隨機事件流,直到事件執行完畢或者發生異常時才停止。在Monkey運行過程中,即便斷開 與PC的連接,Monkey依然可以在手機上繼續運行。
停止Monkey的方法是:直接殺掉手機上的Monkey進程。具體方法如下:
adb shell 進入腳本界面
shell界面輸入
ps |grep monkey
獲取到com.android.commands.monkey的進程ID
kill pid進程號
使用monkey查看app是否有內存泄露:
adb shell monkey -p vchat.faceme --pct-touch 100 --throttle 1000 -s 100 -v -v 50 >C:\Users\admin\Downloads\TESTER\monkey_log\java_monkey_log.txt
adb shell 查看進程內存
dumpsys meminfo 后面有點難,后面再看好了