> 文章列表 > sipp3.6带媒体测试方案

sipp3.6带媒体测试方案

sipp3.6带媒体测试方案

 

概述

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

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

空空如常

求真得真