首頁 > 後端開發 > Python教學 > 用python實作高效能測試工具(二)

用python實作高效能測試工具(二)

little bottle
發布: 2019-04-10 11:29:19
轉載
4393 人瀏覽過

在上一篇文章《用python實作高效能測試工具(一)》中我們透過換python的解析器來優化效能,但離實際需求還很遠。本文介紹的是自動化測試的最佳化程式碼。

方案2: 最佳化程式碼

         工欲善其事,必先利其器。要最佳化程式碼,必須先找到程式碼的瓶頸所在,最土的方法是新增log, 或print, 偵錯完成還需要刪除,比較麻煩。 python裡面也提供了很多profile工具:profile, cProfile, hotshot, pystats, 但這些工具提供的結果可讀性不是很好,不夠直觀的一眼就能看到那個函數或者那一行佔用時間最多。 python line_profiler 提供了這樣的功能,可以直觀的看到哪一行佔用的時間最多,可謂“快準狠”,下載地址: http://pythonhosted.org/line_profiler/

          安裝完line_proer

      之後,在C:\Python27\Lib\site-packages 目錄下會有一個kernprof.py,在可能存在瓶頸的函數上添加@profile, 如以下例子:

    @profile
    def create_msg2(self,H,msg):
        li = msg.keys()
        msg_type=li[0]
        ULR_avps=[]
        ULR=HDRItem()
        ULR.cmd=self.dia.dictCOMMANDname2code(self.dia.MSG_TERM[msg_type])

        if msg_type[-1]=='A':
            msg=msg[msg_type]
            self.dia.setAVPs_by_dic(msg_type,msg,ULR_avps)
            ULR.appId=H.appId
            ULR.EndToEnd=H.EndToEnd
            ULR.HopByHop=H.HopByHop
            msg=self.dia.createRes(ULR,ULR_avps)

        else:
            self.dia.setAVPs(msg_type,msg,ULR_avps)
            ULR.appId=self.dia.APPID
            self.dia.initializeHops(ULR)
            msg=self.dia.createReq(ULR,ULR_avps)

        return msg
登入後複製
運行此檔案: kernprof. py -l -v D:\project\mp\src\protocols\libdiametermt.py, 得到以下結果。從這張圖中可以很直觀的看到setAVPS方法佔用了96.6%的時間,再進一步定位到此函數,再次添加@proflie修飾符(可以一次在多個函數上添加Profile), 可以再進一步看到setAVPS函數中各行程式碼的佔用時間比。


透過一步步的分析看到,在開源協定庫中,setAVPS的方法中,找出avp的屬性是從一個3000的循環裡面找的,每個AVP都需要循環3000次,一個diameter訊息中至少10個avp,每次encoding一個avp需要循環3W次。我們初步的解決方法是刪除了很多我們效能測試中用不到的avp(沒辦法,測試開發資源有限,很多時候沒有很好的設計,先做出滿足需求的東西再說。), 但也只是提高到了150左右,離需求還差的很遠。所以我們把AVP都改成了字典方式,可以依照名字快速查找到AVP的屬性。

除了程式碼的最佳化,同時也增加了encoding avp的執行緒數,後面章節將會講到多執行緒和多進程,對效能的影響。待續。 。 。 。

【推薦課程:Python影片課程

####

以上是用python實作高效能測試工具(二)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板