高通工具簡介
針對高通無線通信終端(如手機、上網卡等)産品,有兩大故障分析工具QXDM和QCAT。當産品出現問題時,例如:手機無法上網、手機下載下傳速率低、手機信号差等等,需要抓取故障日志進行定位排查,此時就需要用到QXDM工具。
QXDM主要用來抓故障日志、修改終端配置、更新終端軟體等。
QCAT主要用來解析日志log,這個工具可以将QXDM抓取的log解析成結構化的資料,便于開發進行快速定位故障。
自動化優勢
常見的通信信令流程分析,使用QXDM和QCAT UI界面手工操作即可以做到,比如手機無法上網。
但是,比如手機下載下傳速率低、手機信号差等問題,需要進行性能名額分析,可能包含多種資料的分析,比如實體層Throughput、應用層Throughput,還需要分開分析上行(UL)、下行(DL),LTE、5G,信号強度(RSRP、RSRQ)、信噪比(SINR)、誤碼率(BLER)等等。
由此可見,純手工進行分析明顯會影響分析效率和準确率,而借助工具自動化的實作,就可以解決這個問題,并且自動化除了分析快、準之外,還有兩個優勢,就是無人值守和批量執行。
自動化實作
總體思路
那麼,如何實作高通工具自動化,進而實作性能名額分析自動化呢?
QXDM和QCAT提供了com接口,支援多種語言調用,例如VBScript、Jscript、Perl、Python。
本文将介紹如何借助python語言,結合QCAT、QXDM、EXCEL等工具,實作QXDM日志的自動截取、分析、篩選、導出,以及輸出關鍵解析參數資料。
具體分為以下幾個步驟:
1.截取有效業務時間
2.按照需求篩選資料
3.導出有效資料
4.資料提取和計算
細細說來
下面依次來介紹各個步驟的實作思路和自動化接口。
第一步:截取有效業務時間
由于log中可能存在一些無效時間段,需要将有效時段從log中識别出來。雖然,不同的情況下,有效時間段的規則可能有所不同,但是,從工具的角度,都是從開始時間點到結束時間點,即一個時間窗。
此處,我們需要調用QCAT工具接口。而不管是QCAT還是QXDM,都是通過調用wind32com接口來實作工具功能子產品的自動化應用的。相關Python腳本如下:
from win32com.client import Dispatch
導入了Dispatch子產品之後,就可以調用QCAT和QXDM了。調用方法:
Dispatch("QCAT6.Application")
Dispatch("QXDM.QXDM5AutoApplication")
另外,還有一個前提是,系統資料庫中有QCAT和QXDM的應用。系統資料庫路徑如下:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\QCAT6.Application
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\QXDM.QXDM5AutoApplication
使用QCAT中的SetTimeWindowAbsolute方法,即可根據需要切割log,隻需要指定開始時間戳和結束時間戳。腳本示例如下:
#腳本示意,并非源碼
#打開一個QCAT6執行個體
qcat_test=Dispatch("QCAT6.Application")
#打開一個log
qcat_test.Openlog(logpath)
#設定時間窗
qcat_test.SetTimeWindowAbsolute(starttime,endtime)
#重新儲存一個log到指定路徑
qcat_test.SaveAsIsf(log_save_path)
starttime和endtime需要為如下格式:yyyy/mm/dd hh:mm:ss.ddd,例如2023/01/04 15:07:26.456。
上述自動化操作相當于手工在QCAT UI界面做如下設定:
第二步:按照需求篩選資料
這一步的主要目的是,保留所需的資料類型,提高腳本執行和資料分析的效率。我們需要使用QCAT中的PacketFilter方法來設定一個過濾器。腳本示例如下:
#腳本示意,并非源碼
#打開一個QCAT6執行個體
qcat_test=Dispatch("QCAT6.Application")
#打開一個log
qcat_test.Openlog(logpath)
#建立一個過濾器對象
filter=qcat_test.PacketFilter
#設定過濾器的值
filter.SetAll(False)
filter.Set(message_type,True)
filter.Commit()
上述自動化操作相當于手工在QCAT UI界面做如下設定:
第三步:導出有效資料
這一步導出的資料由兩部分組合,一部分是由QCAT導出的xlsm格式的資料,另一部分是由QXDM熬出的txt格式的資料。這兩部分資料将作為後續資料分析的主要資料來源。
首先是,用QCAT導出xlsm資料:
#腳本示意,并非源碼
qcat_test=Dispatch("QCAT6.Application")
qcat_test.Openlog(logpath)
qcat_test.LoadWorkspace
qcat_test.workspace.SelectOutput(";",False)
qcat_test.workspace.SelectOutput(workspace_path,True)
qcat_test.workspace.ExportToExcel(export_file_path,0)
上例中的workspace_path是指QCAT工作空間的路徑,例如,下圖中的工作空間路徑就是:";LTE;Time Grids;Physical Grid;LTE L1 CQI RI and MCS vs.Time",各級路徑之間用分号”;”隔開。
接下來是,用QXDM導出txt資料,QXDM導出資料要稍微複雜一些。
首先,建立一個logsession,然後在這個session中建立一個DataView,然後将每一條message的内容讀出來,最後将這些内容依次存儲到txt中:
#腳本示意,并非源碼
log_session.createDataView
data_items=log_session.getDataViewItems
file_object=open(file,"a")
file_object.write(data_items)
上述自動化操作相當于手工在QXDM UI界面做如下設定:
第四步:資料提取和計算
這一步主要是使用pandas.DataFrame進行資料處理,再結合min,max,mean等進行最小值、最大值、平均值的計算:
#腳本示意,并非源碼
df=pd.DataFrame({'A':dataA,"B":dataB,'C':dataC})
df[[“A”,”B”,”C”]].mean()
df[[“A”,”B”,”C”]].min()
df[[“A”,”B”,”C”]].max()
是否好用?
那麼,自動化與手工操作的效率對比效果如何呢?自動化的提升效果并不固定,但是,它會随着處理的資料量的增大,效果越加明顯。
舉個例子,我在實際使用過程中,一個1Gb左右的log,手工操作大概需要30分鐘,自動化大概7-8分鐘即可。
另外,基于以上處理邏輯,還可以将資料計算結果形成統一格式的測試報告。當然,還可以通過循環控制、多線程管理來實作多個log的連續處理和并發執行。
最後:
1)關注+私信回複:“測試”,可以免費領取一份10G軟體測試工程師面試寶典文檔資料。以及相對應的視訊學習教程免費分享!,其中包括了有基礎知識、Linux必備、Mysql資料庫、抓包工具、接口測試工具、測試進階-Python程式設計、Web自動化測試、APP自動化測試、接口自動化測試、測試進階持續內建、測試架構開發測試架構、性能測試等。