sipp3.6分支壓測方案
概述SIP壓測工具sipp,免費,開源,功能足夠強大,配置靈活,優點多。本文檔介紹sipp工具的常用參數和測試腳本。環境centos7.9sipp v3.6.2_
概述
SIP壓測工具sipp,免費,開源,功能足夠強大,配置靈活,優點多。
本文檔介紹sipp工具的常用參數和測試腳本。
環境
centos7.9
sipp v3.6.2_rc1
常用參數
-sf 加載自定義的腳本XML格式
-i 設置本地ip 地址,用于指定 'Contact:','Via:', and ' 的地址
-p 指定本地端口
-bg 在后臺運行sipp
-aa 使能SIPp 對 INFO, UPDAT E and NOTIFY 自動回 200ok
-inf 在呼叫過程中,從一個外部CSV 文件引入值到腳本中去。文件的第一行表明數據的讀取順序。
-rtp_echo 啟用rtp 回送功能。將由 mp 參數指定的端口收到的 rtp 流回送給原發送者,默認6000。
-r 設置呼叫速率(設置多少個呼叫每秒)
-rp 設置呼叫速率的周期,默認是1000 毫秒。例如 r 7 rp 2000表示 2 秒中 7 個呼叫
-l 設置最大的并發呼叫量
-m 設置最本最大的呼叫個數,當sipp 達到該指定值會自動退出
號碼csv
新增號碼csv文件,在呼叫中自動設置到腳本變量中。
vi call-test.csvnSEQUENTIALn12345678;13712345678;
常用腳本
在sipp.3.6.2/docs目錄下有常用的默認腳本,uas.xml和uac.xml分別是server端和client端。
為了把號碼設置到信令中,需要修改uac.xml文件中的from頭域和to頭域,將對應的值修改為field0和field1。
vi uac-test.xmln<?xml version="1.0" encoding="ISO-8859-1" ?>n<!DOCTYPE scenario SYSTEM "sipp.dtd">nn<scenario name="Basic Sipstone UAC">n <send retrans="500">n <![CDATA[nn INVITE sip:[field1]@[remote_ip]:[remote_port] SIP/2.0n Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]n From: [field0] <sip:[field0]@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]n To: [field1] <sip:[field1]@[remote_ip]:[remote_port]>n Call-ID: [call_id]n CSeq: 1 INVITEn Contact: sip:sipp@[local_ip]:[local_port]n Max-Forwards: 70n Subject: Performance Testn Content-Type: application/sdpn Content-Length: [len]nn v=0n o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]n s=-n c=IN IP[media_ip_type] [media_ip]n t=0 0n m=audio [media_port] RTP/AVP 8 18n a=rtpmap:8 PCMA/8000n a=rtpmap:18 G729/8000n a=ptime:20nn ]]>n </send>nn <recv response="100" optional="true">n </recv>nn <recv response="183" optional="true">n </recv>nn <recv response="180" optional="true">n </recv>nn <recv response="200" rtd="true">n </recv>nn <send>n <![CDATA[nn ACK sip:[field1]@[remote_ip]:[remote_port] SIP/2.0n Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]n From: [field0] <sip:[field0]@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]n To: [field1] <sip:[field1]@[remote_ip]:[remote_port]>[peer_tag_param]n Call-ID: [call_id]n CSeq: 1 ACKn Contact: sip:sipp@[local_ip]:[local_port]n Max-Forwards: 70n Subject: Performance Testn Content-Length: 0nn ]]>n </send>nn <pause milliseconds="10000"/>nn <send retrans="500">n <![CDATA[nn BYE sip:[field1]@[remote_ip]:[remote_port] SIP/2.0n Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]n From: [field0] <sip:[field0]@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]n To: [field1] <sip:[field1]@[remote_ip]:[remote_port]>[peer_tag_param]n Call-ID: [call_id]n CSeq: 2 BYEn Contact: sip:sipp@[local_ip]:[local_port]n Max-Forwards: 70n Subject: Performance Testn Content-Length: 0nn ]]>n </send>nn <recv response="200" crlf="true">n </recv>nn <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>nn <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>nn</scenario>
為了測試被叫側的不同場景,需要修改uas.xml文件,通過分支功能實現。
在下面的腳本例子中,被叫側響應有2種編碼方式,第1種是PCMA,G729,第2種是PCMA,兩種各占50%的比例。
分支功能使用next指定跳轉的label ID號,使用chance指定跳轉的比例。
vi uas-test729.xmln<?xml version="1.0" encoding="ISO-8859-1" ?>n<!DOCTYPE scenario SYSTEM "sipp.dtd">nn<scenario name="Basic UAS responder">n <recv request="INVITE" crlf="true" >n </recv>nn <label id="1"/>nn <send next="3" chance="0.5">n <![CDATA[nn SIP/2.0 100 Tryingn [last_Via:]n [last_From:]n [last_To:];tag=[pid]SIPpTag08b[call_number]n [last_Call-ID:]n [last_CSeq:]n Contact: <sip:[local_ip]:[local_port];transport=[transport]>n Content-Length: 0nn ]]>n </send>nn <label id="2"/>nn <pause milliseconds="1000"/>nn <send>n <![CDATA[nn SIP/2.0 183 Session Progressn [last_Via:]n [last_From:]n [last_To:];tag=[pid]SIPpTag01[call_number]n [last_Call-ID:]n [last_CSeq:]n Contact: <sip:[local_ip]:[local_port];transport=[transport]>n Content-Type: application/sdpn Content-Length: [len]nn v=0n o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]n s=-n c=IN IP[media_ip_type] [media_ip]n t=0 0n m=audio [media_port] RTP/AVP 8 18 n a=rtpmap:8 PCMA/8000n a=rtpmap:18 G729/8000n a=ptime:20nn ]]>n </send>nn <pause milliseconds="1000"/>nn <send next="5"> n <![CDATA[nn SIP/2.0 180 Ringingn [last_Via:]n [last_From:]n [last_To:];tag=[pid]SIPpTag01[call_number]n [last_Call-ID:]n [last_CSeq:]n Contact: <sip:[local_ip]:[local_port];transport=[transport]>n Content-Length: 0nn ]]>n </send>nn <label id="3"/>nn <pause milliseconds="1000"/>nn <send>n <![CDATA[nn SIP/2.0 183 Session Progressn [last_Via:]n [last_From:]n [last_To:];tag=[pid]SIPpTag01[call_number]n [last_Call-ID:]n [last_CSeq:]n Contact: <sip:[local_ip]:[local_port];transport=[transport]>n Content-Type: application/sdpn Content-Length: [len]nn v=0n o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]n s=-n c=IN IP[media_ip_type] [media_ip]n t=0 0n m=audio [media_port] RTP/AVP 8 n a=rtpmap:8 PCMA/8000n a=ptime:20nn ]]>n </send>nn <pause milliseconds="1000"/>nn <send next="5"> n <![CDATA[nn SIP/2.0 180 Ringingn [last_Via:]n [last_From:]n [last_To:];tag=[pid]SIPpTag01[call_number]n [last_Call-ID:]n [last_CSeq:]n Contact: <sip:[local_ip]:[local_port];transport=[transport]>n Content-Length: 0nn ]]>n </send>nn <label id="5"/>nn <pause milliseconds="1000"/>nn <send retrans="500">n <![CDATA[nn SIP/2.0 200 OKn [last_Via:]n [last_From:]n [last_To:];tag=[pid]SIPpTag01[call_number]n [last_Call-ID:]n [last_CSeq:]n Contact: <sip:[local_ip]:[local_port];transport=[transport]>n Content-Type: application/sdpn Content-Length: [len]nn v=0n o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]n s=-n c=IN IP[media_ip_type] [media_ip]n t=0 0n m=audio [media_port] RTP/AVP 8 18 n a=rtpmap:18 G729/8000n a=rtpmap:8 PCMA/8000n a=ptime:20nn ]]>n </send>nn <recv request="ACK"n optional="true"n rtd="true"n crlf="true">n </recv>nn <recv request="BYE">n </recv>nn <send>n <![CDATA[nn SIP/2.0 200 OKn [last_Via:]n [last_From:]n [last_To:]n [last_Call-ID:]n [last_CSeq:]n Contact: <sip:[local_ip]:[local_port];transport=[transport]>n Content-Length: 0nn ]]>n </send>nn <timewait milliseconds="4000"/>nn <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>nn <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>nn</scenario>
測試
服務端uas。
sudo sipp -i 10.55.55.138 -p 5555 -sf uas-test729.xml -rtp_echo
客戶端uac。
sudo sipp -i 10.55.55.138 -p 6666 -inf call-test.csv -sf uac-test.xml 10.55.55.137:3060 -t un -rp 1000 -r 20 -l 8192 -m 99999
總結
sipp的github地址:https://github.com/SIPp/sipp
后續會有更多的壓測方案和腳本慢慢寫。
空空如常
求真得真
上一篇:臥式電加熱熱水鍋爐
下一篇:HSP-15是一種高速工具鋼








