移動應用性能關注分析哪些指標

?移動應用常見性能指標

? 要對應用開展性能測試,首先需要了解需要重點關注哪些指標?指標的參考范圍大致是多少?可采用哪些工具收集這些指標?如何收集?如果指標有異常,大致有哪些high level的優化思路。這篇博客從cpu,內存,網絡,其他,四個方面整理了移動應用常見指標以及參考值范圍。具體如下圖所示:(需要注意:指標數據范圍僅供參考,以內存占用大小為例,國內很多app,實際應用大小都超過了200MB)

如何用Android Studio Profile分析應用性能

? 使用Android studio上運行移動應用,在工具最下面,會自動顯示Profile工具菜單,如果沒有看到這個菜單,還可以通過View/Tool Windows/中選擇Profile工具。選擇虛擬設備,以及選擇應用后,就可以通過profile觀察應用消耗的cpu,內存等信息了。

? 除了Android Profiler,還可以使用App Inspector觀察應用的網絡請求情況,數據庫連接情況,后臺任務情況等信息。通過收集這些信息進行性能評估。

? 在Android studio上還可以連接Firebase觀察crash情況。在App Quality Inspect菜單中,選擇Firebase,安裝FireBase官網給出的配置建議完成配置后,即可通過FireBase觀察應用Crash情況。

? 除了上面的性能數據收集分析工具,在Android studio中還可以查看logcat日志,查看應用運行過程中的異常信息,可幫助開發更好的進行分析。Android studio上的工具總體來將大部分都是白盒層面的工具,除了這些工具,實際還可以通過第三方黑盒類工具進行性能數據收集和分析。

如何用charles、wireshark等分析網絡情況

? 如果要使用工具對移動應用進行抓包,大致可以分為三個步驟。步驟一:在工具上設置代理端口以及bypass的URL,這樣所有通過這個端口的流量都會轉發到代理工具上。步驟二:保證移動應用和電腦連接到相同的wifi上,這樣可以保證通過內部IP地址訪問時,可以相互訪問,在手機上將電腦的內部IP地址+工具的代理端口設置為手機的代理,這樣所有經過手機的流量,實際都會轉發到電腦上安裝的代理工具上。步驟三:下載證書,并在手機上信任證書,這樣https的請求才能被解碼顯示。下面以charls和fidder為例子,簡要演示如何通過抓包工具抓取移動手機上http/https請求。

步驟一:代理端口和規則設置

下面是Fidder的connections菜單的設置,這里代理的端口是8866,enable“Allow remote devices to connect”,Bypass URLs中增加了*,即所有的請求都被代理轉發。

如果選用Charles來抓包,charles的默認端口是8888,這里也需要配置SSL proxying,增加了*,即所有的請求都被抓取并轉發。

步驟二:移動手機上手動設置代理

在手機上設置代理前,首先需要知道電腦的內網IP,這個IP可以從代理工具上獲取,以charles為例,在help菜單下,點擊“Install Charles Root certification on a Mobile Device”,即可顯示電腦的內網IP地址,當然,你也可以通過ifconfig命令獲取IP地址。

? 在移動手機的wifi菜單下,手動設置代理的IP地址的端口,如下圖所示:這里用的是Fidder的代理地址信息。設置代理后,所有的手機上的流量就能被抓包工具獲取,并進行轉發。

步驟三:下載安裝證書,并信任證書

? 代理設置后,就可以按工具的提示信息,到指定web地址上下載證書,下載后安裝,并信任證書。以Android手機為例,設置-安全-更多安全設置-加密與憑據-安裝證書,選擇剛才通過網站下載的證書,即可進行安裝。安裝完成后,在該目錄還有個用戶憑證的菜單,進入查看確保剛才的證書已經添加進去了。(需要注意一點:必須先設置代理,到chls.pro/ssl地址上才能下載證書。其他抓包工具如Fidder,HTTP toolkit等也是相同的步驟)

? 安裝證書后,即可開始用Fidder或者Charls進行抓包了。在手機上訪問移動app或者在瀏覽器上訪問網站,在工具中會顯示所有的https/http請求信息。下圖是Fidder中抓取到的http請求信息,可以看到里面包含了整個請求耗費的時間,以及分段時間(即DNS time/TCP connect Time/HTTPS Handshake Time等),除時間外,還包括包的大小信息,通過這些信息,可以有效進行性能分析。

? 當然,除了Fidder,Charles也同樣可以獲取到https/http請求的時間,包大小等信息。具體如下所示:

? 對于https請求,為什么charles等工具可以進行解碼呢?Charles和類似的中間人(Man-in-the-Middle, MITM)代理工具能夠解密 HTTPS 請求的原因在于它們能夠扮演客戶端和服務器之間的中間人角色,通過安裝自簽名根證書來實現。以下是詳細的解釋其工作原理和具體步驟:
? Charles 生成一個自簽名的根證書,并要求用戶在其設備上安裝并信任這個根證書。當 Charles 代理 HTTPS 請求時,它會在客戶端和目標服務器之間建立兩個獨立的 SSL/TLS 連接。對于每一個客戶端請求,Charles 生成一個與目標服務器對應的偽造證書,這個偽造證書是用 Charles 的自簽名根證書簽名的。

? Charles 與客戶端建立 SSL/TLS 連接,并將自己偽裝成目標服務器。因為客戶端信任 Charles 的根證書,所以它會信任這個偽造的服務器證書。
? 同時,Charles 與目標服務器建立另一個 SSL/TLS 連接,并使用服務器的真實證書進行通信。Charles 代理解密從客戶端發送到服務器的加密數據,然后將其轉發到目標服務器。同樣地,它解密從服務器返回到客戶端的加密數據,再將其轉發回客戶端。

? 當然,如果請求數據是應用層加密的,Charles 或其他類似的工具無法直接解密這些內容。你需要應用本身的密鑰和算法來解密,這通常是不可能的,因為這些信息對于普通用戶來說是不可訪問的。例如,抓取weixin的包,是無法看到包的request具體內容的,應該是weixin進行了請求數據層面的再次加密。

? charles和fidder主要是抓取https/http請求,如果要對網絡進行更加細致的分析,需要配合wireshark,wireshark是一個開源的抓包分析工具,對于https請求,wireshark不支持自動解密操作,這個部分可以用charles或者fidder解決。當開啟了charles或者fidder一類的工具后,因為移動手機上的所有流量都會經過代理工具,所以開啟wireshark,選擇以太網端口抓取流量,即可抓取電腦上所有流量,再通過在過濾器中設置過濾來查看需要的分析的包信息。啟動wireshark(這里為了不會有權限問題,使用sudo命令啟動應用:sudo /Applications/Wireshark.app/Contents/MacOS/Wireshark)。在filter中通過設置ip地址為移動手機地地址來篩選出移動手機上的所有請求,然后進行分析。

? 當然,除了啟動代理工具,來讓wireshark抓取移動手機上流量包外,還可以在電腦上開啟熱點,手機連接到熱點網絡上,在啟動wireshark時選擇熱點網路,也可以實現抓取移動手機上流量的效果。

如何用UIAutomator2進行巡檢

? 除了上面的性能數據收集工具,還可以使用Android提供的UIAutomator2工具編寫巡檢代碼。自動檢查某些關鍵操作是否在期望時間內完成。例如,這里假設期望的所有操作都能在200ms內完成,下面代碼調用Android提供的uiautomator2框架,對應用的一些需要檢查的元素進行操作,并判斷耗費的時間,將生成的結果存儲到巡檢報告文件中。為了測試更加穩定,也可以多次操作,求平均值,如果平均值在200ms內即可。

import uiautomator2 as u2
import time# 連接設備
d = u2.connect()# 定義關鍵元素的資源ID或其他屬性
elements_to_check = [{"resourceId": "com.example:id/button1"},{"resourceId": "com.example:id/button2"},{"resourceId": "com.example:id/input_field"},{"resourceId": "com.example:id/submit_button"}
]def check_operation_timing(element):# 開始計時start_time = time.time()# 執行操作try:el = d(**element)if el.exists:el.click()else:print(f"元素 {element} 不存在")return False, 0except Exception as e:print(f"操作失敗: {e}")return False, 0# 結束計時end_time = time.time()# 計算響應時間response_time = (end_time - start_time) * 1000  # 轉換為毫秒# 檢查響應時間是否在200ms以內if response_time <= 200:print(f"操作成功,響應時間:{response_time:.2f} 毫秒")return True, response_timeelse:print(f"操作超時,響應時間:{response_time:.2f} 毫秒")return False, response_timedef perform_inspection(elements):response_times = []for element in elements:success, response_time = check_operation_timing(element)if success:response_times.append(response_time)time.sleep(0.5)  # 添加一些延遲,以避免設備過載return response_times# 進行巡檢
response_times = perform_inspection(elements_to_check)# 統計結果
if response_times:average_time = sum(response_times) / len(response_times)print(f"平均響應時間:{average_time:.2f} 毫秒")
else:print("沒有成功的操作")# 處理巡檢結果,例如,保存到文件或數據庫

? 以上就是在進行移動應用性能測試分析時,需要關注的常用指標以及一些常用工具的使用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/45341.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/45341.shtml
英文地址,請注明出處:http://en.pswp.cn/web/45341.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

說一下GET請求和POST請求的區別

面試官常常會問到的一個問題就是&#xff1a;GET請求和POST請求的區別。因為一個看似簡單的問題就能考察出面試者對網絡協議和通信的掌握程度以及對前后端開發基礎知識是否了解、安全性意識是否足夠強&#xff0c;以及綜合分析與總結能力等。 所以答的好可以讓面試官對你刮目相…

YoloV8改進策略:卷積篇|Kan行天下之GRAM,KAN遇見Gram多項式V2版本

GRAM(GRAM可能是一個新提出的模型或方法的縮寫,這里我們根據上下文進行解釋)受到諸如TorchKAN和ChebyKAN等Kolmogorov-Arnold網絡(KAN)替代方案的啟發。GRAM引入了一種簡化的KAN模型,但同時利用了Gram多項式變換的簡單性。它與其他替代方案的不同之處在于其獨特的離散性特…

Vue3 使用emoji表情包 emoji-mart-vue-fast

文檔&#xff1a;emoji-mart-vue-fast - npm (npmjs.com) 非常簡單 代碼直接照抄即可 1. 引入 pnpm install emoji-mart-vue-fast 2. 使用 <template><Picker:data"emojiIndex":emojiSize"18":showPreview"false":infiniteScroll&quo…

【07】分布式事務解決方案

1、事務簡介 事務(Transaction)是訪問并可能更新數據庫中各種數據項的一個程序執行單元(unit)。在關系數據庫中&#xff0c;一個事務由一組SQL語句組成。事務應該具有ACID四個特性&#xff1a;原子性、一致性、隔離性、持久性。任何事務機制在實現時&#xff0c;都應該考慮事務…

J025_斗地主游戲案例開發(簡版)

一、需求描述 完成斗地主游戲的案例開發。 業務&#xff1a;總共有54張牌&#xff1b; 點數&#xff1a;3、4、5、6、7、8、9、10、J、Q、K、A、2 花色&#xff1a;黑桃、紅桃、方片、梅花 大小王&#xff1a;大王、小王 點數分別要組合4種花色&#xff0c;大小王各一張。…

[激光原理與應用-114]:南京科耐激光-激光焊接-焊中檢測-智能制程監測系統IPM介紹 - 18 - 產品宣傳、介紹、產品價值、幫助客戶解決的問題

目錄 一、第一印象 1.1 我是誰&#xff1f;產品是什么&#xff1f;產品在產業鏈中的位置 1.2 公司在產業鏈中的位置&#xff1f;公司簡介&#xff1f; 二、IPM工作原理 2.1 IPM系統組成 2.2 基于激光熔池光學檢測原理 2.3 基于信號特征的檢測原理 三、IPM產品如何與客…

2-17,18,19 -- 關于指針

指針(pointer 聲明指針 int *p;定義指針 int a 4; int *p &a; //指針p是指向變量a的地址的指針指針數組 int *arr[5];數組指針 int (*arr)[5];函數指針 int (*fun)(int,int) // 聲明一個指向函數的指針,這個函數的返回值是int,有兩個int的參數指針的指針 int **p;…

ArkTS學習筆記_封裝復用之@Styles裝飾器

ArkTS學習筆記_封裝復用之Styles裝飾器 背景&#xff1a; 在開發中&#xff0c;如果每個組件的樣式都需要單獨設置&#xff0c;就會出現大量代碼在進行重復樣式設置&#xff0c;雖然可以復制粘貼&#xff0c;但為了代碼簡潔性和后續方便維護&#xff0c;給出的思路是&#xff…

jmeter分布式(四)

一、gui jmeter的gui主要用來調試腳本 1、先gui創建腳本 先做一個腳本 演示&#xff1a;如何做混合場景的腳本&#xff1f; 用211的業務比例 ①啟動數據庫服務 數據庫服務&#xff1a;包括mysql、redis mysql端口默認3306 netstat -lntp | grep 3306處于監聽狀態&#xf…

深入了解MySQL中的innodb_lock_wait_timeout

引言 在數據庫管理中&#xff0c;確保數據的一致性和完整性是至關重要的。MySQL的InnoDB存儲引擎通過行級鎖定機制來實現這一點。然而&#xff0c;當多個事務同時操作數據庫時&#xff0c;可能會出現鎖等待的情況。了解并合理配置innodb_lock_wait_timeout參數&#xff0c;對于…

數據庫第6次作業

內容 1、創建視圖v_emp_dept_id_1&#xff0c;查詢銷售部門的員工姓名和家庭住址 2、創建視圖v_emp_dept&#xff0c;查詢銷售部門員工姓名和家庭住址及部門名稱。 3、創建視圖v_dept_emp_count(dept_name,emp_count,avg_salay)&#xff0c;統計每個部門人數并計算平均工資。 …

Spring 使用log4j

porn.xml 引入依賴 <dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.23.1</version></dependency><dependency><groupId>org.apache.logging.log4j<…

解讀網傳《深圳IT圈?新解讀八小時工作制》

網傳深圳IT圈的新解讀八小時工作制 工作時間安排&#xff1a; 10:00-12:0014:00-18:0019:00-21:00 初看&#xff1a;有驚喜 上午開始時間晚&#xff1a;相對于傳統的9點開始&#xff0c;這種安排允許員工有更多的早晨時間&#xff0c;可以用來休息或處理個人事務。下午和晚上分…

typescript新規范及vue3常用的屬性解析【2024】

文章目錄 如在vue中 使用tyescript來規范定義類型解釋一下 < >的意思 定義 了 personList &#xff1a;是個數組 Array 且要告訴里面每一項 結構長什么樣 Array<PersonInter>definepropsvue3中的hooks組件父子組件 方法、數據、相互調用 如在vue中 使用tyescript來…

【LSTM和GRU極簡,和最新的TT也就是狀態】機器學習模型來學習狀態

LSTM&#xff08;長短期記憶網絡&#xff09;中的關鍵參數包括輸入門、遺忘門、輸出門、細胞狀態和隱藏狀態。以下是如何進行推理計算的示例&#xff1a; LSTM參數和公式 輸入門&#xff08;i_t&#xff09;&#xff1a;決定輸入的信息量。 遺忘門&#xff08;f_t&#xff0…

【React Native】做了一個簡約的雷達圖組件

本文目錄 【React Native】做了一個簡約的雷達圖組件獲取組件實現思路用法示例簡易用法自定義美化 結語 【React Native】做了一個簡約的雷達圖組件 最近在使用 react-native 中需要繪制雷達圖&#xff0c;沒有找到合適的小組件&#xff08;大的圖表庫未直接提供&#xff0c;需…

pico+unity3d運行測試方法

一. 發布并運行程序 這個就很簡單&#xff0c;電腦和pico數據庫連接、pico打開開發者模式、運行的時候選擇設備pico 二. pico串流助手 1.需要先下載pico的軟件 PICO Developer Center、并安裝串流助手、這種方式的話&#xff0c;安裝了向日葵的小伙伴可能有沖突、百度一下解…

c#中的特性

在C#中&#xff0c;特性&#xff08;Attributes&#xff09;是一種向程序元素&#xff08;如類、方法、屬性等&#xff09;添加元數據的方式。特性可以用來提供關于程序元素的附加信息&#xff0c;這些信息可以在編譯時和運行時被訪問。 特性主要有以下幾個用途&#xff1a; 提…

手機數據恢復篇:如何從 Android 設備內恢復數據

如何從 Android 內部存儲恢復數據&#xff1f; 要從 Android 內部存儲恢復已刪除的文件&#xff0c;您需要一個 Android 內部存儲恢復應用或程序。請繼續閱讀以獲取可靠的 Android 數據恢復軟件&#xff0c;并讓它幫助您從 Android 手機的內部存儲恢復數據。 是否有可能恢復 An…

Typescript 合并接口

在TypeScript中&#xff0c;合并接口&#xff08;Interface Merging&#xff09;是一種強大的特性&#xff0c;它允許你擴展現有的接口&#xff0c;無論是通過聲明合并還是在同一個聲明塊中直接擴展。這種特性在基于類的面向對象編程中非常有用&#xff0c;但TypeScript的接口合…