Difference between revisions of "Performance Testing with Sipp"
(18 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
<br><br> | |||
[[Performance tests]] | |||
<br><br> | |||
---- | |||
<br><br> | |||
With this test environment, we can simulate a single user or multiple users calling through MOR/Asterisk. | |||
In the scenario uac_auth.xml, sipp start sending a SIP INVITE to MOR and if AUTH is requested, sipp resend SIP INVITE with PROXY AUTHENTICATION. | |||
Playing with sipp parameters, you can increase the call data rate and other variables, such as call duration. | |||
Download and compile the last sipp: | |||
wget http://surfnet.dl.sourceforge.net/sourceforge/sipp/sipp.3.1.src.tar.gz | |||
tar xvfz sipp.3.1.src.tar.gz | |||
cd sipp.svn | |||
apt-get install libssl-dev / yum -y install openssl-devel | |||
make ossl | |||
Edit a new file "users.csv": | |||
SEQUENTIAL | |||
user001;[authentication username=user001 password=password001] | |||
user002;[authentication username=user001 password=password001] | |||
user003;[authentication username=user001 password=password001] | |||
Edit a new file "uac_auth.xml": | |||
<?xml version="1.0" encoding="ISO-8859-1" ?> | <?xml version="1.0" encoding="ISO-8859-1" ?> | ||
<!DOCTYPE scenario SYSTEM "sipp.dtd"> | <!DOCTYPE scenario SYSTEM "sipp.dtd"> | ||
<!-- This program is free software; you can redistribute it and/or --> | <!-- This program is free software; you can redistribute it and/or --> | ||
<!-- modify it under the terms of the GNU General Public License as --> | <!-- modify it under the terms of the GNU General Public License as --> | ||
Line 21: | Line 53: | ||
<!-- Sipp 'uac_auth' scenario by Alessandro Marzini info@digilabit.com --> | <!-- Sipp 'uac_auth' scenario by Alessandro Marzini info@digilabit.com --> | ||
<!-- --> | <!-- --> | ||
<scenario name="UAC with AUTH scenario"> | <scenario name="UAC with AUTH scenario"> | ||
<!-- In client mode (sipp placing calls), the Call-ID MUST be --> | <!-- In client mode (sipp placing calls), the Call-ID MUST be --> | ||
<!-- generated by sipp. To do so, use [call_id] keyword. --> | <!-- generated by sipp. To do so, use [call_id] keyword. --> | ||
<send retrans="500"> | <send retrans="500"> | ||
<![CDATA[ | <![CDATA[ | ||
INVITE sip:[service]@[remote_ip]:[remote_port] SIP/2.0 | INVITE sip:[service]@[remote_ip]:[remote_port] SIP/2.0 | ||
Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch] | Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch] | ||
Line 47: | Line 76: | ||
m=audio [media_port] RTP/AVP 0 | m=audio [media_port] RTP/AVP 0 | ||
a=rtpmap:0 PCMU/8000 | a=rtpmap:0 PCMU/8000 | ||
]]> | ]]> | ||
</send> | </send> | ||
<recv response="407" auth="true"> | <recv response="407" auth="true"> | ||
</recv> | </recv> | ||
<send> | <send> | ||
<![CDATA[ | <![CDATA[ | ||
ACK sip:[service]@[remote_ip]:[remote_port] SIP/2.0 | ACK sip:[service]@[remote_ip]:[remote_port] SIP/2.0 | ||
Via: SIP/2.0/[transport] [local_ip]:[local_port] | Via: SIP/2.0/[transport] [local_ip]:[local_port] | ||
Line 67: | Line 92: | ||
Subject: Performance Test | Subject: Performance Test | ||
Content-Length: 0 | Content-Length: 0 | ||
]]> | ]]> | ||
</send> | </send> | ||
<send retrans="500"> | <send retrans="500"> | ||
<![CDATA[ | <![CDATA[ | ||
Line 85: | Line 108: | ||
Content-Type: application/sdp | Content-Type: application/sdp | ||
Content-Length: [len] | Content-Length: [len] | ||
v=0 | v=0 | ||
o=user1 53655765 2353687637 IN IP4 127.0.0.1 | o=user1 53655765 2353687637 IN IP4 127.0.0.1 | ||
Line 93: | Line 115: | ||
m=audio [media_port] RTP/AVP 0 | m=audio [media_port] RTP/AVP 0 | ||
a=rtpmap:0 PCMU/8000 | a=rtpmap:0 PCMU/8000 | ||
]]> | ]]> | ||
</send> | </send> | ||
<recv response="100" optional="true"> | <recv response="100" optional="true"> | ||
</recv> | </recv> | ||
<recv response="180" optional="true"> | <recv response="180" optional="true"> | ||
</recv> | </recv> | ||
<recv response="183" optional="true"> | <recv response="183" optional="true"> | ||
</recv> | </recv> | ||
<!-- By adding rrs="true" (Record Route Sets), the route sets --> | <!-- By adding rrs="true" (Record Route Sets), the route sets --> | ||
<!-- are saved and used for following messages sent. Useful to test --> | <!-- are saved and used for following messages sent. Useful to test --> | ||
<!-- against stateful SIP proxies/B2BUAs. --> | <!-- against stateful SIP proxies/B2BUAs. --> | ||
<recv response="200" rtd="true"> | <recv response="200" rtd="true"> | ||
</recv> | </recv> | ||
<!-- Packet lost can be simulated in any send/recv message by --> | <!-- Packet lost can be simulated in any send/recv message by --> | ||
<!-- by adding the 'lost = "10"'. Value can be [1-100] percent. --> | <!-- by adding the 'lost = "10"'. Value can be [1-100] percent. --> | ||
<send> | <send> | ||
<![CDATA[ | <![CDATA[ | ||
ACK sip:[service]@[remote_ip]:[remote_port] SIP/2.0 | ACK sip:[service]@[remote_ip]:[remote_port] SIP/2.0 | ||
Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch] | Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch] | ||
Line 129: | Line 142: | ||
Subject: Performance Test | Subject: Performance Test | ||
Content-Length: 0 | Content-Length: 0 | ||
]]> | ]]> | ||
</send> | </send> | ||
<!-- This delay can be customized by the -d command-line option --> | <!-- This delay can be customized by the -d command-line option --> | ||
<!-- or by adding a 'milliseconds = "value"' option here. --> | <!-- or by adding a 'milliseconds = "value"' option here. --> | ||
<pause/> | <pause/> | ||
<!-- The 'crlf' option inserts a blank line in the statistics report. --> | <!-- The 'crlf' option inserts a blank line in the statistics report. --> | ||
<send retrans="500"> | <send retrans="500"> | ||
<![CDATA[ | <![CDATA[ | ||
BYE sip:[service]@[remote_ip]:[remote_port] SIP/2.0 | BYE sip:[service]@[remote_ip]:[remote_port] SIP/2.0 | ||
Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch] | Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch] | ||
Line 153: | Line 160: | ||
Subject: Performance Test | Subject: Performance Test | ||
Content-Length: 0 | Content-Length: 0 | ||
]]> | ]]> | ||
</send> | </send> | ||
<recv response="200" crlf="true"> | <recv response="200" crlf="true"> | ||
</recv> | </recv> | ||
<!-- definition of the response time repartition table (unit is ms) --> | <!-- definition of the response time repartition table (unit is ms) --> | ||
<ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/> | <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/> | ||
<!-- definition of the call length repartition table (unit is ms) --> | <!-- definition of the call length repartition table (unit is ms) --> | ||
<CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/> | <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/> | ||
</scenario> | |||
</ | Then run this: | ||
./sipp -inf users.csv -sf uac_auth.xml -s <extension_to_call> <mor_sip_server_sip> | |||
For a more complete sipp syntax, look here: | |||
http://sipp.sourceforge.net/doc1.1/reference.html#xmlsyntax | |||
---- | |||
=== Configuration pointers for testing === | |||
==== sip.conf ==== | |||
[general] | |||
context=playback_test | |||
;rtptimeout=60 | |||
;rtpholdtimeout=300 | |||
[1000] | |||
type = friend | |||
host = dynamic | |||
username = 1000 | |||
secret = 1000 | |||
nat = no | |||
context = playback_test | |||
disallow = all | |||
allow = alaw | |||
[1001] | |||
type = friend | |||
host = dynamic | |||
username = 1001 | |||
secret = 1001 | |||
nat = no | |||
context = playback_test | |||
disallow = all | |||
allow = alaw | |||
==== extensions.conf ==== | |||
[playback_test] | |||
exten => _X.,1,Answer | |||
exten => _X.,2,Background(tt-monkeys) | |||
exten => _X.,3,Goto(2) | |||
;exten => _X.,3,Hangup |
Latest revision as of 11:59, 28 April 2010
With this test environment, we can simulate a single user or multiple users calling through MOR/Asterisk.
In the scenario uac_auth.xml, sipp start sending a SIP INVITE to MOR and if AUTH is requested, sipp resend SIP INVITE with PROXY AUTHENTICATION.
Playing with sipp parameters, you can increase the call data rate and other variables, such as call duration.
Download and compile the last sipp:
wget http://surfnet.dl.sourceforge.net/sourceforge/sipp/sipp.3.1.src.tar.gz tar xvfz sipp.3.1.src.tar.gz cd sipp.svn apt-get install libssl-dev / yum -y install openssl-devel make ossl
Edit a new file "users.csv":
SEQUENTIAL
user001;[authentication username=user001 password=password001]
user002;[authentication username=user001 password=password001]
user003;[authentication username=user001 password=password001]
Edit a new file "uac_auth.xml":
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE scenario SYSTEM "sipp.dtd"> <scenario name="UAC with AUTH scenario">
<send retrans="500"> <![CDATA[ INVITE sip:[service]@[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: sut <sip:[service]@[remote_ip]:[remote_port]> Call-ID: [call_id] CSeq: 1 INVITE Contact: sip:[field0]@[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 0 a=rtpmap:0 PCMU/8000 ]]> </send> <recv response="407" auth="true"> </recv> <send> <![CDATA[ ACK sip:[service]@[remote_ip]:[remote_port] SIP/2.0 Via: SIP/2.0/[transport] [local_ip]:[local_port] From: [field0] <sip:[field0]@[local_ip]:[local_port]>;tag=[call_number] To: sut <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param] Call-ID: [call_id] CSeq: 1 ACK Contact: sip:[field0]@[local_ip]:[local_port] Max-Forwards: 70 Subject: Performance Test Content-Length: 0 ]]> </send> <send retrans="500"> <![CDATA[ INVITE sip:[service]@[remote_ip]:[remote_port] SIP/2.0 Via: SIP/2.0/[transport] [local_ip]:[local_port] From: [field0] <sip:[field0]@[local_ip]:[local_port]>;tag=[call_number] To: sut <sip:[service]@[remote_ip]:[remote_port]> Call-ID: [call_id] CSeq: 2 INVITE Contact: sip:[field0]@[local_ip]:[local_port] [field1] Max-Forwards: 70 Subject: Performance Test Content-Type: application/sdp Content-Length: [len] v=0 o=user1 53655765 2353687637 IN IP4 127.0.0.1 s=- t=0 0 c=IN IP4 [media_ip] m=audio [media_port] RTP/AVP 0 a=rtpmap:0 PCMU/8000 ]]> </send> <recv response="100" optional="true"> </recv> <recv response="180" optional="true"> </recv> <recv response="183" optional="true"> </recv> <recv response="200" rtd="true"> </recv> <send> <![CDATA[ ACK sip:[service]@[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: sut <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param] Call-ID: [call_id] CSeq: 1 ACK Contact: sip:[field0]@[local_ip]:[local_port] Max-Forwards: 70 Subject: Performance Test Content-Length: 0 ]]> </send> <pause/> <send retrans="500"> <![CDATA[ BYE sip:[service]@[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: sut <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param] Call-ID: [call_id] CSeq: 2 BYE Contact: sip:[field0]@[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>
Then run this:
./sipp -inf users.csv -sf uac_auth.xml -s <extension_to_call> <mor_sip_server_sip>
For a more complete sipp syntax, look here:
http://sipp.sourceforge.net/doc1.1/reference.html#xmlsyntax
Configuration pointers for testing
sip.conf
[general] context=playback_test ;rtptimeout=60 ;rtpholdtimeout=300
[1000] type = friend host = dynamic username = 1000 secret = 1000 nat = no context = playback_test disallow = all allow = alaw
[1001] type = friend host = dynamic username = 1001 secret = 1001 nat = no context = playback_test disallow = all allow = alaw
extensions.conf
[playback_test] exten => _X.,1,Answer exten => _X.,2,Background(tt-monkeys) exten => _X.,3,Goto(2) ;exten => _X.,3,Hangup