python3使用ESL和sipp自动多轮压测FreeSWITCH

这篇具有很好参考价值的文章主要介绍了python3使用ESL和sipp自动多轮压测FreeSWITCH。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

环境: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的灵活性很好,可根据实际的业务场景定制不同的压测模型,这里选取的压测模型比较简单,整体结构如下:

python3使用ESL和sipp自动多轮压测FreeSWITCH

 

 说明:

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

python3使用ESL和sipp自动多轮压测FreeSWITCH

 循环播放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的配置

python3使用ESL和sipp自动多轮压测FreeSWITCH

 2)UAS2的配置

python3使用ESL和sipp自动多轮压测FreeSWITCH

完整代码可从如下渠道获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 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

示例代码如下:

python3使用ESL和sipp自动多轮压测FreeSWITCH

 完整代码可从如下渠道获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 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 即可看到效果:

python3使用ESL和sipp自动多轮压测FreeSWITCHpython3使用ESL和sipp自动多轮压测FreeSWITCH

2、功能验证抓包数据

UAS1 : 1个并发
UAS2 : 1个并发

 

python3使用ESL和sipp自动多轮压测FreeSWITCH

 都有数据发送。

3、python脚本压测效果

为了便于观察效果,这里设置的参数如下:
1) UAS1 播放音频时长 30 秒,等待 BYE 请求;
2) UAS2 播放音频时长为 35 秒,发送 BYE 请求;
3) python脚本的压测循环次数为3,呼叫并发100,循环间隔70秒;

运行效果如下:

python3使用ESL和sipp自动多轮压测FreeSWITCH

运行效果视频可从如下渠道获取:

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

四、资源下载

本文涉及文件和示例代码从如下途径获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 20230730 获取。

python3使用ESL和sipp自动多轮压测FreeSWITCH文章来源地址https://www.toymoban.com/news/detail-618998.html

到了这里,关于python3使用ESL和sipp自动多轮压测FreeSWITCH的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 自定义Python版本ESL库访问FreeSWITCH

    环境:CentOS 7.6_x64 Python版本:3.9.12 FreeSWITCH版本 :1.10.9 ESL库是FreeSWITCH对外提供的接口,使用起来很方便,但该库是基于C语言实现的,Python使用该库的话需要使用源码进行编译。 如果使用系统自带的Python版本进行编译,过程会比较流畅,就不描述了。这里记录下使用自定义

    2023年04月25日
    浏览(25)
  • python3+requests+unittest接口自动化测试

    python3 + pycharm编辑器 (该套代码只是简单入门,有兴趣的可以不断后期完善) (1)run.py主运行文件,运行之后可以生成相应的测试报告,并以邮件形式发送; (2)report文件夹存放测试结果报告; (3)unit_test文件夹是存放测试用例(demo.py和test_unittest.py用例用法介绍,实际

    2024年02月09日
    浏览(42)
  • Python3+Selenium+Chrome实现自动填写WPS表单

      本文通过python3、第三方python库Selenium和谷歌浏览器Chrome,完成WPS表单的自动填写。   python3的安装:略,网上都有教程。   Selenium的安装:在命令行输入 pip3 install selenium 并回车即可完成安装,如果不成功,查找网上教程。   Chrome的安装:略,网上都有教程。   

    2024年02月01日
    浏览(29)
  • 基于Docker构建CI/CD工具链(七)使用Jmeter进行自动化压测

    上一篇文章中,我们详细介绍了构建 Apifox Cli 的 Docker 镜像的步骤,并通过简单的示例演示了如何利用 GitLab 的 CI/CD 功能,将构建好的镜像利用在自动化测试作业中。在今天的文章中,我们将重点讨论如何构建 JMeter 的 Docker 镜像,并演示如何在 GitLab 的 CI/CD 作业中利用该镜像

    2024年04月16日
    浏览(44)
  • python3对接godaddy API,实现自动更改域名解析(DDNS)

    文章开始前,先解释下如下问题: ①什么是域名解析? 域名解析一般是指通过一个域名指向IP地址(A解析),然后我们访问这个域名就可以有直接访问这个IP地址的效果,只需要记住域名即可,无需记住IP。 ②什么是DDNS? DDNS是动态域名解析,一个域名可以根据IP的变化,自动

    2024年02月11日
    浏览(27)
  • python3-API流量回放/锲约测试/自动化测试

    简介 http工具集,通过代理获取到API的请求与响应信息,将这些请求信息进行流量回放/锲约测试或快速生成用例, 亦可通过人工进行修改参数化提取、变量引用、断言等形成API自动化测试用例等! 你以为只是流量回放吗?错~走去瞧瞧v2版本! 看官~请记得给个 star 呗? 项目地址

    2024年02月04日
    浏览(24)
  • Python3,5行代码,生成自动排序动图,这操作不比Excel香?

    小屌丝 :鱼哥,听说你的excel段位又提升了? 小鱼 :你这是疑问的语气? 小屌丝 :没有~ 吧… 小鱼 :是没有,没有没有吧? 小屌丝 :这… 正好我有一个难点,想请教你。 小鱼 :那你说吧。 小屌丝 :你制作一个动态排序图吗? 小鱼 :这有何难,内容是啥,样式是啥?

    2024年02月10日
    浏览(23)
  • 自动化测试之八大元素定位方式(python3.10+selenium4)

    元素的定位是自动化测试核心。要操作一个对象,首先要识别定位或找到这个对象。为了实现网页整体布局,我们先要知道,一个元素,是如何定位到页面上的某个位置的,这就是元素定位。 系统环境 Windows 11 📌 python3.10.5 🔖 selenium 4.8.0 🚩 注意:以下每种定位方式均有一

    2024年02月03日
    浏览(43)
  • 任务拆解,悠然自得,自动版本的ChatGPT,AutoGPT自动人工智能AI任务实践(Python3.10)

    当我们使用ChatGPT完成某些工作的时候,往往需要多轮对话,比如让ChatGPT分析、翻译、总结一篇网上的文章或者文档,再将总结的结果以文本的形式存储在本地。过程中免不了要和ChatGPT“折冲樽俎”一番,事实上,这个“交涉”的过程也可以自动化,AutoGPT可以帮助我们自动拆

    2023年04月18日
    浏览(51)
  • Python3,os模块还可以这样玩,自动删除磁盘文件,非必要切勿操作。

    小屌丝 :鱼哥, 请教你个问题。 小鱼 :你觉得你得问题,是正儿八经的吗? 小屌丝 :那必须的, 人都正经,何况问题呢? 小鱼 :那可不敢说, 你得问题这次是否正经我不敢说,但是人, 肯定不正经。 小屌丝 :别这么说,鱼哥。 小鱼 :还用我说, 你说说你自己的座驾

    2024年02月11日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包