环境: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软件的安装使用,可参考这篇文章:
1.1 实现循环播放pcap文件
实现思路如下:
1)通过 assign 进行赋值;
2)通过 add 进行计数器累加;
3)通过 test 进行判断;
4)通过 next 进行逻辑控制;
 
参考文档:

循环播放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编译及使用,可参考这篇文章:
示例代码如下:

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

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

python3使用ESL和sipp自动多轮压测FreeSWITCH的更多相关文章

  1. Linux 安装python3.7.3 提示已经自动安装了pip和setuptools 可是使用时bash提示没有找到pip

    Linux 安装python3.7.3 提示已经自动安装了pip和setuptools 可是使用时bash提示没有找到pip 今天的任务就是找到解决办法 另外就是用布置好python3的路径

  2. Python3发送post请求,自动记住cookie

    转载自:http://www.cnblogs.com/meitian/p/4607737.html 在做登录的post请求时,需要记住cookie,否则不能访问登录后的页面. 下面是登录的代码: #c ...

  3. Linux --- vim 安装、支持python3的配置、插件自动补全YCM的安装配置及全过程错误总结

    1.git(用来下载vim和相关插件) sudo apt-get install git 2,cmake(用来编译clang-llvm) sudo apt-get install build-esse ...

  4. nose在python2与python3中的包的自动发现用例的区别

    最近在使用python3,同样装了nose,发现自动发现用例总是有问题,如下面的代码结婚 testcase |------ __init__.py |------ test_bb.py test_bb ...

  5. 利用python3.5 +TK 开发股票自动交易伴侣

    # -*- encoding: utf8 -*- # version 1.11 import tkinter.messagebox,os from tkinter import * from tkin ...

  6. Python3实现Win10桌面背景自动切换

    [本文出自天外归云的博客园] 得空写了个自动切换桌面背景图片的小程序.再不写python就要扔键盘了,对vue还有那么一点好感,天天php真是有够烦. 准备工作 准备个文件夹放在桌面上,平时看到什么高 ...

  7. python3 简单服务器监控,自动发送邮件

    import smtplibfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartimpo ...

  8. python3.7 利用pyhive 连接上hive(亲测可用)

    来python爬虫中,经常会遇到数据的存储问题,如果有大量数据,hive存储是个不错的选择. 那么python如何来连接hive呢?网上有各种教程但是都不是很好用,亲自测试pyhive可用 要求:可用 ...

  9. python3 django1.11 安装xadmin 的方法,亲测可用

    首先需要Pip安装如下的包ip install django-crispy-forms pip install django-import-export pip install django-reve ...

  10. centos下mysql自动备份(亲测可用)

    编写sh脚本如下: #!/bin/bash db_user="root" db_passwd="123456" db_name="test_db&qu ...

随机推荐

  1. 机器视觉基本理论(opencv)

    1. 什么是图像采样 采样是按照某种时间间隔或空间间隔,将空间上连续的图像变换成离散点的操作称为图像采样 2. 什么是图像分变率 采样 得到的离散图像的尺寸称为图像分辨率.分辨率是数字图像可辨别的最小 ...

  2. [OpenCV-Python] 10 图像上的算术运算

    文章目录 OpenCV-Python: 核心操作 10 图像上的算术运算 10.1 图像加法 10.2 图像混合 10.3 按位运算 OpenCV-Python: 核心操作 10 图像上的算术运算 目 ...

  3. Mysql列转行, group_concat的使用

    开始业务的查询的时候碰到一个sql的查询语句问题,主要是 group_concat 之前没用过,现在记录一下怎么用 group_concat 用法, 可以将相同的行组合起来 group_concat( ...

  4. Win10系统Anaconda下tensorflow的GPU环境搭建

    我的环境:Win10 + Anaconda + tensorflow-gpu1.14 + CUDA10.0 + cuDNN7.6 + python3.6 注意:tensorflow版本.CUDA版本. ...

  5. 2021-12-13:字符串解码。给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k

    2021-12-13:字符串解码.给定一个经过编码的字符串,返回它解码后的字符串. 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k ...

  6. Django4全栈进阶之路7 makemigrations和migrate迁移

    Django 4 中使用数据迁移(migration)来管理数据库结构的变化.数据迁移可以创建.修改和删除数据库表.字段.索引等对象,以及填充初始数据. 下面是使用数据迁移的基本步骤: 1.在 app ...

  7. 【GPT-4理论篇-1】GPT-4核心技术探秘

    前言 GPT-4已经发布有一段时间了,但是出于安全性等各种原因,OpenAI并没有公布GPT-4的技术细节和代码,而是仅仅给出了一个长达100页的技术报告[1]. 这个技术报告着重介绍了GPT-4的强 ...

  8. Python爬取微信小程序实战(通用)

    背景介绍 最近遇到一个需求,大致就是要获取某个小程序上的数据.心想小程序本质上就是移动端加壳的浏览器,所以想到用Python去获取数据.在网上学习了一下如何实现后,记录一下我的实现过程以及所踩过的小坑 ...

  9. 基于Django的简易博客系统教程

    1. 安装Django 在命令行中输入以下命令安装Django pip install django 2. 创建Django项目 在命令行中输入以下命令创建一个名为myblog的Django项目 dj ...

  10. ol设置最佳可视范围和限制缩放

    目前随着科技发展,智慧城市的不断发展,GIS方面的技术也是层出不穷,如市场流行的 OPENLAYERS, CESIUM, THREE等,但是也会有很多棘手的问题,比如不同分辨率下,图层的显示范围,禁止 ...