環境:CentOS 7.6_x64 FreeSWITCH版本 :1.10.9 sipp版本:3.6.1 python版本:3.9.12 日常工作中,有時會遇到批量自動壓測FreeSWITCH的需求,sipp是一個非常好的VoIP壓測工具,python是個很好用的腳本語言,今天記錄下CentOS 7環 ...
環境:CentOS 7.6_x64 FreeSWITCH版本 :1.10.9 sipp版本:3.6.1 python版本:3.9.12 日常工作中,有時會遇到批量自動壓測FreeSWITCH的需求,sipp是一個非常好的VoIP壓測工具,python是個很好用的腳本語言,今天記錄下CentOS 7環境下python3如何藉助ESL使用sipp自動壓測FreeSWITCH伺服器。
一、背景描述
sipp的靈活性很好,可根據實際的業務場景定製不同的壓測模型,這裡選取的壓測模型比較簡單,整體結構如下:
說明:
1)python腳本通過ESL模塊和FreeSWITCH通信,用於控制呼叫和接受數據; 2)FreeSWITCH在這裡的角色類似網關,負責將兩台UAS的通話連接起來; 3)兩台UAS都可自動接收呼叫,並自動播放音頻數據,其中有一臺需要具備主動發Bye請求掛斷電話的功能,用於結束通話。二、具體實現
1、準備sipp配置文件
這裡使用的sipp測試模型是UAS模型,該部分我會列舉下關鍵點,sipp軟體的安裝使用,可參考這篇文章: https://www.cnblogs.com/MikeZhang/p/sippPcapTest.html 1.1 實現迴圈播放pcap文件 實現思路如下: 1)通過 assign 進行賦值; 2)通過 add 進行計數器累加; 3)通過 test 進行判斷; 4)通過 next 進行邏輯控制; 參考文檔: https://sipp.readthedocs.io/en/latest/scenarios/actions.html迴圈播放pcap文件,示例如下:
<nop> <action> <assign assign_to="audio" value="0"/> </action> </nop> <label id="speak"/> <nop> <action> <exec play_pcap_audio="pcap/g711a.pcap"/> <add assign_to="audio" value="1"/> <test assign_to="result" variable="audio" compare="less_than" value="6" /> </action> </nop> <pause milliseconds="10000" /> <nop next="speak" test="result"/>1.2 實現UAS主動發Bye請求 sipp內置的場景裡面,UAS是不主動發Bye請求的,如果需要UAS發Bye請求,可通過如下配置實現:
<send retrans="500"> <![CDATA[ BYE sip:[$5] SIP/2.0 Via: SIP/2.0/[transport] [local_ip]:[local_port] From[$4] To[$3] Call-ID: [call_id] Cseq: [cseq] BYE Contact: sip:[local_ip]:[local_port] Max-Forwards: 70 Content-Length: 0 ]]> </send>其中,$3 $4 $5 是變數,通過以下語法獲取:
<ereg regexp="sip:(.*)>" search_in="hdr" header="Contact" assign_to="4,5"/> <assign assign_to="4" variable="5" />1.3 場景配置文件 1)UAS1的配置
2)UAS2的配置
完整代碼可從如下渠道獲取:
關註微信公眾號(聊聊博文,文末可掃碼)後回覆 20230730 獲取。2、準備python測試腳本
實現思路如下: 1)設置壓測參數; 2)使用ESL連接FreeSWITCH,使用hupall清理呼叫,發送外呼命令,同時呼叫UAS1、UAS2; 3)等待UAS2執行掛機操作,避免hupall引起的併發過高; 4)根據設置的迴圈次數進入下一輪壓測;其中,python3.9.12版本的ESL編譯及使用,可參考這篇文章: https://www.cnblogs.com/MikeZhang/p/py39esl-20230424.html
示例代碼如下:
完整代碼可從如下渠道獲取:
關註微信公眾號(聊聊博文,文末可掃碼)後回覆 20230730 獲取。
三、運行效果
1、UAS2迴圈播放音頻及發送BYE的效果
編寫撥號方案:<extension name="pjsua_uas_test"> <condition field="destination_number" expression="^123$"> <action application="set" data="hangup_after_bridge=true"/> <action application="bridge" data="{origination_caller_id_number=123456,origination_caller_id_name=123456}sofia/external/[email protected]:55080"/> </condition> </extension>啟動UAS2,註冊分機,撥打 123 即可看到效果:
2、功能驗證抓包數據
UAS1 : 1個併發 UAS2 : 1個併發
都有數據發送。
3、python腳本壓測效果
為了便於觀察效果,這裡設置的參數如下: 1) UAS1 播放音頻時長 30 秒,等待 BYE 請求; 2) UAS2 播放音頻時長為 35 秒,發送 BYE 請求; 3) python腳本的壓測迴圈次數為3,呼叫併發100,迴圈間隔70秒;運行效果如下:
運行效果視頻可從如下渠道獲取:
關註微信公眾號(聊聊博文,文末可掃碼)後回覆 2023073001 獲取。