首頁 > 軟體

自動化測試實戰篇:基於Python實踐效能指標結果自動採集工具

2021-05-19 20:00:19

關注我,每天分享軟體測試技術乾貨、面試經驗,想要領取測試資料、進入軟體測試學習交流群的可以直接加atstudy-js

1.背景

在效能測試過程中,往往需要監控伺服器的效能情況,並記錄這些效能指標結果。不論是雲下資料庫伺服器還是應用伺服器,都可以通過nmon來進行監控,設定打點間隔和打點次數,將效能指標情況儲存成nmon檔案,並通過工具,如Excel插件Nmon_Analyzer、Java GUI工具nmon visualizer等讀取nmon檔案內容,分析採集結果。

但當監控的伺服器數量較多時,依次採集多個nmon檔案中的效能指標結果會耗費時間,同時,人工讀取和記錄資料也可能會出現記錄錯誤的偶然誤差。因此我們可以嘗試使用自己熟悉的程式語言,如Python等,來開發一款簡單易實現的小工具,用於自動採集效能測試nmon檔案中的效能測試指標。

2. 工具介紹與設計

工具實現的基本思想是逐個掃描指定路徑下的nmon檔案,根據nmon檔案的內部格式,提取出目標效能指標資料,再對提取出來的資料進行加工處理,得到結果,並將結果自動儲存到新生成的結果Excel檔案中。為了更直觀地獲取使用者輸入的nmon檔案路徑及結果儲存路徑,我們可以編寫GUI介面,利用介面上的文字輸入框來獲取使用者的輸入,並採用介面上的按鈕來觸發這一採集事件。

圖1 工具設計流程圖

3. 工具實現

(1)匯入所需模組

由於我們的工具中包含對檔案和路徑進行操作,這需要依賴os模組實現。在逐行讀取nmon檔案內容時,用codecs提供的open方法來指定開啟的檔案的語言編碼,它會在讀取的時候自動轉換為內部unicode。re模組是python獨有的匹配字元串的模組,利用正則表示式對字元串進行模糊匹配,提取自己需要的字元串部分,使用該模組可以實現逐行掃描進行模糊匹配查詢到CPU和記憶體的相關效能指標。xlwt庫的作用是將資料寫入Excel表格中。Tkinter 是 Python 的標準 GUI 庫,匯入 Tkinter 模組後可以使用控制項快速的創建 GUI 應用程式。 tkinter.StringVar 能自動重新整理的字元串變數,可用set和get方法進行傳值和取值,以此來接收使用者輸入。

圖2 程式碼-匯入所需模組

(2)視窗的實現

利用Tkinter模組創建視窗並插入輸入框控制項用來獲取使用者輸入的路徑資訊,輸入框的內容儲存到StringVar當中,設定按鈕Button用於和滑鼠點選事件繫結。

圖3 程式碼-視窗的實現

圖3 視窗的實現圖

(3)編寫事件程式碼——求CPU平均利用率的函數

不同版本的nmon檔案內部格式略有不同,因此在編寫程式時,要先了解目標版本的內部結構,用來確定字元串模式匹配時,需要利用nmon檔案中效能指標相關內容的哪些特徵。

為了計算均值,需要獲取nmon檔案中記錄的打點次數。通過了解nmon檔案中AAA參數是關於作業系統以及nmon本身的一些資訊,可以查詢該行來進行提取。

圖4 程式碼-獲取打點次數和打點間隔

CPU_ALL參數是對所有CPU的概述,顯示所有CPU平均佔用情況,將記錄的CPU佔用率逐個取出存放在數組裡,並求陣列元素的平均值,即為整個監控期間CPU的平均利用率,函數將該值返回。

圖5 程式碼-求CPU平均利用率

(4)編寫事件程式碼——求記憶體均佔用率的函數

類似地,通過MEM參數獲取記憶體佔用情況,與CPU情況不同的是,該參數行包括多項記憶體相關指標,而在監控效能指標時,我們常用公式1來計算記憶體的佔用率,因此需要從MEM參數中提取相關指標,包括memtotal、memfree、cached、buffers,按照公式進行計算,並返回記憶體佔用率。

公式1 記憶體佔用率常用計算公式

圖6 程式碼-求記憶體佔用率

(5)編寫事件程式碼——滑鼠點選事件

該事件用於和介面上的按鈕Button進行繫結,實現當點選按鈕後的一系列操作:從輸入框取nmon檔案路徑和目標儲存路徑,生成Excel檔案並創建工作表,寫入預設的表頭內容,呼叫求CPU平均利用率的函數和求記憶體均佔用率的函數,將返回的值寫入Excel檔案並儲存。

圖7 程式碼-滑鼠點選事件

4. 總結

該工具是基於Python語言的簡單實踐,可以實現批量自動提取nmon檔案中的效能指標結果,並且可以沿用本思路根據需要對工具的功能進行修改或擴展。使用本工具進行效能結果的自動採集相比人工讀取數值更加節省時間,並且避免了記錄時出現錯誤的偶然誤差,有助於提升準確度和測試效率。


IT145.com E-mail:sddin#qq.com