概述

SIP压测工具sipp,免费,开源,功能足够强大,配置灵活,优点多。

本文档介绍sipp工具如何带媒体测试,并介绍如何制作可用的媒体文件(G729和PCMA)。

环境

centos7.9

freeswitch1.10.7

sipp v3.6.2_rc1

制作媒体流文件

sipp支持通过exec调用play_pcap_audio来发送媒体流,但是要求媒体流是pcap格式。

sipp中自带的只有G711a的媒体流文件,只有8秒长度,并且媒体包抖动过大,不好用。

<exec play_pcap_audio="pcap/g711a.pcap"/>

我们可以通过freeswitch + sngrep抓包自己制作两个媒体流文件。

修改freeswitch注册号码的拨号计划,找一个好听的音乐传到sounds目录。

<include>

<context name="default">

<extension name="test" continue="false">

<condition field="destination_number" expression="^3066(\d+)$" break="on-true">

<action application="answer"/>

<action application="playback" data="/usr/local/freeswitch/sounds/haoting.wav" />

</condition>

</extension>

</context>

</include>

打开sngrep抓包(信令+媒体)

sudo sngrep -c -r

通话30秒后挂断电话,在sngrep中保存抓包,选择“(*) .pcap (SIP + RTP)”模式。

将pcap文件下载到本地,使用wireshark打开。

在wireshark中选择“电话”->“RTP”->“RTP流”,选中fs发送的媒体流,点击“play streams”。

试听抓包的媒体流复合要求。

点击“RTP流”页面上的“prepare filter”按钮过滤当前媒体流的数据包。

选择“文件”->“导出特定分组”,保存到文件“sipp-PCMA-30s.pcap”。

一个符合sipp要求的G711的媒体流文件就制作好了。

G729的媒体流文件的制作过程基本一致,只需要在sipua上修改codec为G729,再通过sngrep抓包,和wireshark过滤G729媒体包并保存即可。

带媒体脚本

在sipp.3.6.2/docs目录下有常用的默认脚本,参考“sipp\docs\uac_pcap.xml”修改自己的带媒体脚本。

在收到200 OK应答之后,播放“sipp-PCMA-30s.pcap”文件。

vi uac-test-pcap.xml

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE scenario SYSTEM "sipp.dtd">

<scenario name="Basic Sipstone UAC">

<send retrans="500">

<![CDATA[

INVITE sip:[field1]@[remote_ip]:[remote_port] SIP/2.0

Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]

From: [field0] <sip:[field0]@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]

To: [field1] <sip:[field1]@[remote_ip]:[remote_port]>

Call-ID: [call_id]

CSeq: 1 INVITE

Contact: sip:sipp@[local_ip]:[local_port]

Max-Forwards: 70

Subject: Performance Test

Content-Type: application/sdp

Content-Length: [len]

v=0

o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]

s=-

c=IN IP[media_ip_type] [media_ip]

t=0 0

m=audio [media_port] RTP/AVP 8 18

a=rtpmap:8 PCMA/8000

a=rtpmap:18 G729/8000

a=ptime:20

]]>

</send>

<recv response="100" optional="true">

</recv>

<recv response="183" optional="true">

</recv>

<recv response="180" optional="true">

</recv>

<recv response="200" rtd="true">

</recv>

<send>

<![CDATA[

ACK sip:[field1]@[remote_ip]:[remote_port] SIP/2.0

Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]

From: [field0] <sip:[field0]@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]

To: [field1] <sip:[field1]@[remote_ip]:[remote_port]>[peer_tag_param]

Call-ID: [call_id]

CSeq: 1 ACK

Contact: sip:sipp@[local_ip]:[local_port]

Max-Forwards: 70

Subject: Performance Test

Content-Length: 0

]]>

</send>

<nop>

<action>

<exec play_pcap_audio="./sipp-PCMA-30s.pcap"/>

</action>

</nop>

<pause milliseconds="30000"/>

<send retrans="500">

<![CDATA[

BYE sip:[field1]@[remote_ip]:[remote_port] SIP/2.0

Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]

From: [field0] <sip:[field0]@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]

To: [field1] <sip:[field1]@[remote_ip]:[remote_port]>[peer_tag_param]

Call-ID: [call_id]

CSeq: 2 BYE

Contact: sip:sipp@[local_ip]:[local_port]

Max-Forwards: 70

Subject: Performance Test

Content-Length: 0

]]>

</send>

<recv response="200" crlf="true">

</recv>

<ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>

<CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>

</scenario>

UAS脚本不需要修改,略过

测试

服务端uas,带参数“-rtp_echo”使得UAS自动echo媒体流。

sudo sipp -i 10.55.55.138 -p 5555 -sf uas-test.xml -rtp_echo

客户端uac,从uac的显示中可以看到是有正常发包。

sudo sipp -i 10.55.55.138 -p 6666 -inf call-test.csv -sf uac-test-pcap.xml 10.55.55.137:3060 -rp 1000 -r 25 -l 8192 -m 9999

总结

sipp的github地址:https://github.com/SIPp/sipp

后续会有更多的压测方案和脚本慢慢写。

空空如常

求真得真

sipp3.6带媒体测试方案的更多相关文章

  1. 从Google开源RE2库学习到的C++测试方案

    最近因为科研需求,一直在研究Google的开源RE2库(正则表达式识别库),库源码体积庞大,用C++写的,对于我这个以前专供Java的人来说真的是一件很痛苦的事,每天只能啃一点点.今天研究了下里面用到 ...

  2. VS自带WCF测试客户端简单介绍

    在目前的二次开发项目中,一些信息是放在客户那里的,只给你一个服务地址,不知道具体有什么方法,每次想调用一个服务不知道能不能实现目前的需求,只能测试.写个测试程序真的划不来,占用时间不说,而且你忙了一上 ...

  3. Apache自带压力测试工具ab用法简介

    ab命令原理 ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL进行访问.它的测试目标是基于URL的,因此,既可以用来测试Apache的负载压力,也可以测试nginx.lighthttp ...

  4. Android MediaCodec硬编兼容性测试方案

    作者:阿宝 更新:2016-08-15 来源:彩色世界(https://blog.hz601.org/2016/08/15/android-mediacodec-hardcode-compatibil ...

  5. HttpDNS的坑以及一个针对安卓不太完善的测试方案

    背景:单位因为域名劫持(具体表象是某个地区的用户ping不通域名或者因为DNS解析的ip跨网段导致访问速度很慢)需要运维经常去定位,于是提出了httpDNS方案. 想法是美好的,现实是残酷的.没引入这 ...

  6. 从轻测到上线,WeTest与《一起来捉妖》测试方案大公开

    从2016年Pokémon GO引发的AR游戏热潮开始,国内就一直在期待新的一款具备代表性的AR游戏的头部作品. 4月11日的腾讯首款AR探索手游<一起来捉妖>不仅为国内市场注入了新的活力 ...

  7. Memory及其controller芯片整体测试方案(下篇)

    {  第三部分  }  DDR总线的设计.调试和验证  在计算机架构中,DDR作为程序运算的动态存储器,面对如高性能计算.图形计算.移动计算.工业应用等领域的要求,发展出DDR4,以及用于图形计算的G ...

  8. Memory及其controller芯片整体测试方案(上篇)

    如果你最近想买手机,没准儿你一看价格会被吓到手机什么时候偷偷涨价啦! 其实对于手机涨价,手机制造商也是有苦难言,其中一个显著的原因是存储器芯片价格的上涨↗↗↗ >>> 存储器memo ...

  9. 移动弱网测试方案Network Emulator for Windows Toolkit

    移动app在测试时,有时需要考虑弱网的情形下,app的表现,那么怎么营造这样子的环境呢? 一.首先需要控制网络,有两种方式其一使用网络损伤仪进行,其二采用软件方式.硬件采购费用太贵,因此使用win平台 ...

  10. 使用VS自带WCF测试客户端

    打开VS自带WCF测试客户端 打开VS2015 开发人员命令提示 输入:wcftestclient,回车 提取wcftestclient 当然,可以看到VS2015 开发人员命令提示知道,当前路径在C ...

随机推荐

  1. [CF1824D] LuoTianyi and the Function

    题目描述 LuoTianyi gives you an array $ a $ of $ n $ integers and the index begins from $ 1 $ . Define $ ...

  2. 设置ElementUI的el-table组件表格内容居中

    方式一:比较麻烦 // 在每一个el-table-column中添加align='center'属性 <el-table-column prop='createTime' label='创建时间 ...

  3. C和C++练习

    要点: 1.数组 2.冒泡排序BubbleSort 3.带指针的结构体(malloc,free) 4.字符串操作(拷贝.逆序.比较) 5.格式化输出printf,sprintf 6.格式化输入,sca ...

  4. Fiddler使用 抓取手机数据包及中文乱码解决方案

    https://blog.csdn.net/zyb2017/article/details/79260086

  5. ElasticSearch之cat trained model API

    命令样例如下: curl -X GET "https://localhost:9200/_cat/ml/trained_models?v=true&pretty" --ca ...

  6. 2023.3 Idea配置Tomcat环境

    tomcat配置 下载tomcat 先到官网(按住Ctrl再左键点击直接打开官网)下载64位的tomcat,网速慢就用魔法下 创建项目.模块 打开idea(我用的是最新的idea的专业版,ui有点变化 ...

  7. Ubuntu图形界面root登录“sorry, that didn't work please

    https://blog.51cto.com/u_14757092/2484490 ssh登录主机执行下vim /etc/pam.d/gdm-autologin 注释行 "auth requ ...

  8. 从源码分析 MySQL 身份验证插件的实现细节

    最近在分析ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)这个报错的常见原因. 在 ...

  9. 【Python】人工智能-机器学习——不调库手撕贝叶斯分类问题

    1. 作业内容描述 1.1 背景 数据集大小150 该数据有4个属性,分别如下 Sepal.Length:花萼长度(cm) Sepal.Width:花萼宽度单位(cm) Petal.Length:花瓣 ...

  10. 万万没想到,我在夜市地摊解决了MySQL临时表空间难题~~

    都说"大隐隐于市,高手在深宫".突如其来的"摆地摊"风潮,让原本冷清的街道热闹非凡,也让众人发现了那些神龙见首不见尾的大神们. 这不,小毛在下班的途中就遇到了大 ...