天天看點

如何使用python實作高通工具自動化?兩個工具QXDM&QCAT教會你!

作者:Atstudy網校

高通工具簡介

針對高通無線通信終端(如手機、上網卡等)産品,有兩大故障分析工具QXDM和QCAT。當産品出現問題時,例如:手機無法上網、手機下載下傳速率低、手機信号差等等,需要抓取故障日志進行定位排查,此時就需要用到QXDM工具。

如何使用python實作高通工具自動化?兩個工具QXDM&QCAT教會你!

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界面做如下設定:

如何使用python實作高通工具自動化?兩個工具QXDM&QCAT教會你!

第二步:按照需求篩選資料

這一步的主要目的是,保留所需的資料類型,提高腳本執行和資料分析的效率。我們需要使用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界面做如下設定:

如何使用python實作高通工具自動化?兩個工具QXDM&QCAT教會你!

第三步:導出有效資料

這一步導出的資料由兩部分組合,一部分是由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",各級路徑之間用分号”;”隔開。

如何使用python實作高通工具自動化?兩個工具QXDM&QCAT教會你!

接下來是,用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界面做如下設定:

如何使用python實作高通工具自動化?兩個工具QXDM&QCAT教會你!

第四步:資料提取和計算

這一步主要是使用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自動化測試、接口自動化測試、測試進階持續內建、測試架構開發測試架構、性能測試等。