概述

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.csv

SEQUENTIAL

12345678;13712345678;

常用脚本

在sipp.3.6.2/docs目录下有常用的默认脚本,uas.xml和uac.xml分别是server端和client端。

为了把号码设置到信令中,需要修改uac.xml文件中的from头域和to头域,将对应的值修改为field0和field1。

vi uac-test.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>

<pause milliseconds="10000"/>

<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.xml文件,通过分支功能实现。

在下面的脚本例子中,被叫侧响应有2种编码方式,第1种是PCMA,G729,第2种是PCMA,两种各占50%的比例。

分支功能使用next指定跳转的label ID号,使用chance指定跳转的比例。

vi uas-test729.xml

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

<!DOCTYPE scenario SYSTEM "sipp.dtd">

<scenario name="Basic UAS responder">

<recv request="INVITE" crlf="true" >

</recv>

<label id="1"/>

<send next="3" chance="0.5">

<![CDATA[

SIP/2.0 100 Trying

[last_Via:]

[last_From:]

[last_To:];tag=[pid]SIPpTag08b[call_number]

[last_Call-ID:]

[last_CSeq:]

Contact: <sip:[local_ip]:[local_port];transport=[transport]>

Content-Length: 0

]]>

</send>

<label id="2"/>

<pause milliseconds="1000"/>

<send>

<![CDATA[

SIP/2.0 183 Session Progress

[last_Via:]

[last_From:]

[last_To:];tag=[pid]SIPpTag01[call_number]

[last_Call-ID:]

[last_CSeq:]

Contact: <sip:[local_ip]:[local_port];transport=[transport]>

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>

<pause milliseconds="1000"/>

<send next="5">

<![CDATA[

SIP/2.0 180 Ringing

[last_Via:]

[last_From:]

[last_To:];tag=[pid]SIPpTag01[call_number]

[last_Call-ID:]

[last_CSeq:]

Contact: <sip:[local_ip]:[local_port];transport=[transport]>

Content-Length: 0

]]>

</send>

<label id="3"/>

<pause milliseconds="1000"/>

<send>

<![CDATA[

SIP/2.0 183 Session Progress

[last_Via:]

[last_From:]

[last_To:];tag=[pid]SIPpTag01[call_number]

[last_Call-ID:]

[last_CSeq:]

Contact: <sip:[local_ip]:[local_port];transport=[transport]>

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

a=rtpmap:8 PCMA/8000

a=ptime:20

]]>

</send>

<pause milliseconds="1000"/>

<send next="5">

<![CDATA[

SIP/2.0 180 Ringing

[last_Via:]

[last_From:]

[last_To:];tag=[pid]SIPpTag01[call_number]

[last_Call-ID:]

[last_CSeq:]

Contact: <sip:[local_ip]:[local_port];transport=[transport]>

Content-Length: 0

]]>

</send>

<label id="5"/>

<pause milliseconds="1000"/>

<send retrans="500">

<![CDATA[

SIP/2.0 200 OK

[last_Via:]

[last_From:]

[last_To:];tag=[pid]SIPpTag01[call_number]

[last_Call-ID:]

[last_CSeq:]

Contact: <sip:[local_ip]:[local_port];transport=[transport]>

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:18 G729/8000

a=rtpmap:8 PCMA/8000

a=ptime:20

]]>

</send>

<recv request="ACK"

optional="true"

rtd="true"

crlf="true">

</recv>

<recv request="BYE">

</recv>

<send>

<![CDATA[

SIP/2.0 200 OK

[last_Via:]

[last_From:]

[last_To:]

[last_Call-ID:]

[last_CSeq:]

Contact: <sip:[local_ip]:[local_port];transport=[transport]>

Content-Length: 0

]]>

</send>

<timewait milliseconds="4000"/>

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

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

</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

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

空空如常

求真得真

sipp3.6分支压测方案的更多相关文章

  1. 真刀真枪压测:基于TCPCopy的仿真压测方案

    郑昀 基于刘勤红和石雍志的实践报告 创建于2015/8/13 最后更新于2015/8/19 关键词:压测.TCPCopy.仿真测试.实时拷贝流量 本文档适用人员:技术人员 提纲: 为什么要做仿真测试 ...

  2. 基于TCPCopy的仿真压测方案

    一.tcpcopy工具介绍 tcpcopy 是一个分布式在线压力测试工具,可以将线上流量拷贝到测试机器,实时的模拟线上环境,达到在程序不上线的情况下实时承担线上流量的效果,尽早发现 bug,增加上线信 ...

  3. Netty NIO 框架性能压测-短链接-对比Tomcat

    压测方案 准备多个文件大小分别为 1k 10k 100k 300k 使用ab分别按 [50,2000](按50逐渐叠加)压测服务,每次请求10W次 硬件信息:CPU:Intel(R) Xeon(R) ...

  4. 双十一临近,怎样让买家流畅地秒杀? ——腾讯WeTest独家开放电商产品压测服务

    WeTest 导读 十一月临近,一年一度的电商大戏"双十一"又将隆重出场,目前各大商家已经开始各类优惠券的发放,各类大促的商品表单也已经提前流出,即将流入各个用户的购物车中. 作为 ...

  5. 手把手用Monkey写一个压测脚本

    版权声明: 本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有. 允许有条件转载,转载请附带底部二维码. 一.为什么需要一个测试脚本? 昨天讲解了Android Monkey命 ...

  6. 【转】京东金融App端链路服务端全链路压测策略

    京东金融移动端全链路压测历时三个月,测试和服务端同学经过无数日日夜夜,通宵达旦,终于完成了移动端链路的测试任务.整个测试有部分涉及到公司敏感数据,本文只对策略部分进行论述. 1.系统架构与策略 在聊性 ...

  7. jmeter进行分布式压测过程与 注意事项

    jmeter命令行运行但是是单节点下的, jmeter底层用java开发,耗内存.cpu,如果项目要求大并发去压测服务端的话,jmeter单节点难以完成大并发的请求,这时就需要对jmeter进行分布式 ...

  8. 案例 | 荔枝微课基于 kubernetes 搭建分布式压测系统

    王诚强,荔枝微课基础架构负责人.热衷于基础技术研发推广,致力于提供稳定高效的基础架构,推进了荔枝微课集群化从0到1的发展,云原生架构持续演进的实践者. 本文根据2021年4月10日深圳站举办的[腾讯云 ...

  9. 精准容量、秒级弹性,压测工具 + SAE 方案如何完美突破传统大促难关?

    作者 | 代序 阿里云云原生技术团队 本文整理自<Serverless 技术公开课>,"Serverless"公众号后台回复"入门",即可获取系列文 ...

  10. [SCF+wetest+jmeter]简单云性能压测工具使用方案

    前言 压测太难?局域网压力无法判断服务器网络指标?无法产生非常大的并发量?云性能太贵? 也许我们可以把各种简单的工具拼起来进行压力测试! 准备 https://cloud.tencent.com/pr ...

随机推荐

  1. Spring Cache + Caffeine的整合与使用

    前言 对于一些项目里需要对数据库里的某些数据一直重复请求的,且这些数据基本是固定的,在这种情况下,可以借助简单使用本地缓存来缓存这些数据.这些介绍一下Spring Cache和Caffeine的使用. ...

  2. MySQL运维5-Mycat配置

    一.schema.xml 1.1 简介 schema.xml作为Mycat中最重要的配置文件之一,涵盖了Mycat的逻辑库.逻辑表.分片规则.分片节点即数据源的配置.主要包括一下三组标签 schema ...

  3. k8s安装Dashboard出现了 pod 状态为CrashLoopBackOff

    1.问题现象 2.解决办法 (1) 先看一下pods日志信息 kubectl logs -f -n kubernetes-dashboard kubernetes-dashboard-658485d5 ...

  4. 蓝桥杯-最短路 (SPFA算法学习)

    SPFA算法主要用来解决存在负边权的单源最短路情况(但不能有负环!!!)一个简单的方法判断是否有没有负环可以通过判断是否有一个节点是否频繁进出队列. 以下内容转自https://blog.csdn.n ...

  5. Celery周期性任务定义beat

    通过celery beat可以使用周期性任务的定义. https://docs.celeryq.dev/en/stable/userguide/periodic-tasks.html 周期性任务bea ...

  6. python操作mongodb实现读写分离

    读写分离 默认情况下,MongoClient 实例将查询发送到副本集的主要成员. 要使用副节点作为查询,以实现读写分离,我们必须更改读取首选项: 读取首选项在模块pymongo.ReadPrefere ...

  7. 别再傻傻地用 ifconfig 查地址了!这条命令足以让你摘掉小白工程师的帽子

    大家好,我是民工哥. 众所周知,在 Linux 系统中,ip 和 ifconfig 这个两命令的功能十分相似,ifconfig 是 net-tools 中已被弃用的一个命令,很多年前就已经没有维护了. ...

  8. electron入门之试调工具remote(三)

    electron入门到入土,从渲染线程中创建新窗口.2022-03-21入门版本17.1.2 electron重要概念,只有一个主线程,其他都是渲染进程或者叫子线程,他们不能直接相互操作,可以通过ip ...

  9. nacos系列:spring cloud使用nacos实现配置管理和服务发现

    目录 版本说明 创建项目 版本说明 IDEA:2021.3 Maven:3.6.3 Jdk:17 Spring-Boot:2.6.13 Spring-Cloud:2021.0.5 Spring-Clo ...

  10. Windows10安装WSL2和Ubuntu的过程

      因为在Windows10环境中安装了2个相同的包导致冲突,所以想到了通过WSL2+Docker的方式进行编程开发.因为Docker Desktop直接安装就行了,不做介绍.本文主要介绍WSL2和U ...