python3使用ESL和sipp自动多轮压测FreeSWITCH
阅读原文时间:2023年08月01日阅读:9

环境: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文件,示例如下:


1.2 实现UAS主动发Bye请求

sipp内置的场景里面,UAS是不主动发Bye请求的,如果需要UAS发Bye请求,可通过如下配置实现:


<![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

 \]\]>  

其中,$3 $4 $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/123@192.168.137.33: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 获取。

本文涉及文件和示例代码从如下途径获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 20230730 获取。

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章