sipp3.6多方案压测脚本

news2024/12/25 23:44:51

概述

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

有时候我们需要模拟现网的生产环境来压测,就需要同时有多个sipp脚本运行,并且需要不断的调整呼叫并发。

通过python脚本的子进程功能,我们可以很方便的实现sipp的多方案压测功能。

环境

centos7.9

freeswitch1.10.7

sipp v3.6.2_rc1

python 2.7.5

压测方案

Freeswitch部署在137服务器,作为呼叫的信令代理,开放端口5080。

Sipp和python脚本部署在138服务器,sipp的测试方案需要启动4个进程。

Sipp1,uas端,开启5555端口,接收fs137转发的呼叫,并响应接通信令。

Sipp2,uac端,开启6666端口,向fs137发送呼叫,并在接通30秒后挂断电话。

Sipp3,uac端,开启7777端口,向fs137发送呼叫,并接收fs137返回的404信令但不处理。

Sipp4,uac端,开启6668端口,向fs137发送呼叫,并在收到180振铃消息后主动cancel呼叫。

其中,sipp2,sipp3,sipp4三个uac端的进程,每间隔3分钟发起新一轮呼叫,每一轮呼叫运行2分钟。

Sipp1配置脚本

Sipp1,uas端,开启5555端口,接收fs137转发的呼叫,并响应接通信令。

监听10.55.55.138的5555端口,命令和脚本如下。

sudo sipp -i 10.55.55.138 -p 5555 -sf uas-test180cps.xml

uas-test180cps.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>

  <send>

    <![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>

  <pause milliseconds="500"/>

  <send>

    <![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-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="500"/>

  <send>

    <![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>

  <pause milliseconds="500"/>

  <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

      a=rtpmap:8 PCMA/8000

    ]]>

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

  <!-- Keep the call open for a while in case the 200 is lost to be     -->

  <!-- able to retransmit it if we receive the BYE again.               -->

  <timewait milliseconds="4000"/>

  <!-- definition of the response time repartition table (unit is ms)   -->

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

  <!-- definition of the call length repartition table (unit is ms)     -->

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

</scenario>

Sipp2配置脚本

Sipp2,uac端,开启6666端口,向fs137发送呼叫,并在接通30秒后挂断电话。

使用10.55.55.138的6666端口向10.55.55.137的5080端口发起呼叫,每秒发起160通呼叫,总共发起19200通呼叫后停止运行,后台运行。

sudo sipp -i 10.55.55.138 -p 6666 -inf call-test.csv -sf uac-test180cps.xml 10.55.55.137:5080 -rp 1000 -r 160 -l 8192 -m 19200 -bg

uac-test180cps.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]>;tgrp=TG-19073;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="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>

Sipp3配置脚本

Sipp3,uac端,开启7777端口,向fs137发送呼叫,并接收fs137返回的404信令但不处理。

使用10.55.55.138的7777端口向10.55.55.137的5080端口发起呼叫,每秒发起30通呼叫,总共发起3600通呼叫后停止运行,后台运行。

sudo sipp -i 10.55.55.138 -p 7777 -inf call-test.csv -sf uac-test404-noack.xml 10.55.55.137:5080 -rp 1000 -r 30 -l 8192 -m 3600 -bg

uac-test404-noack.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="404" rtd="true">

  </recv>

  <timewait milliseconds="1000"/>

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

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

</scenario>

Sipp4配置脚本

Sipp4,uac端,开启6668端口,向fs137发送呼叫,并在收到180振铃消息后主动cancel呼叫。

使用10.55.55.138的6668端口向10.55.55.137的5080端口发起呼叫,每秒发起10通呼叫,总共发起1200通呼叫后停止运行,后台运行。

sudo sipp -i 10.55.55.138 -p 6668 -inf call-test.csv -sf uac-test-cancel1.xml 10.55.55.137:5080 -rp 1000 -r 10 -l 8192 -m 1200 -bg

uac-test-cancel1.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" rtd="true">

  </recv>

  <recv response="180" >

  </recv>

  <recv response="180" >

  </recv>

  <pause milliseconds="200"/>

  <send retrans="500">

    <![CDATA[

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

      [last_Via:]

      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 CANCEL

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

      Max-Forwards: 70

      Content-Length: 0

    ]]>

  </send>

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

  </recv>

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

  </recv>

  <send>

    <![CDATA[

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

      [last_Via:]

      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>

  <timewait milliseconds="1000"/>

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

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

</scenario>

Python脚本

该Python脚本可以在python2和python3的环境下运行,测试环境只跑了python2。

脚本如下,通过subprocess子进程实现压测方案的自动启停。

sipp-auto.py

# coding=utf-8

# python3 required

import subprocess

import time

import signal

import sys

def signal_handler(sig, frame):

    continueflag = 0

    for p in processes:

        p.terminate()

    sys.exit(0)

signal.signal(signal.SIGINT, signal_handler)

commands = [

    # "sudo sipp -i 10.55.55.138 -p 5555 -sf uas-test180cps.xml",

    "sudo sipp -i 10.55.55.138 -p 6666 -inf call-test.csv -sf uac-test180cps.xml 10.55.55.137:5080 -rp 1000 -r 160 -l 8192 -m 19200 -bg",

    "sudo sipp -i 10.55.55.138 -p 7777 -inf call-test.csv -sf uac-test404-noack.xml 10.55.55.137:5080 -rp 1000 -r 30 -l 8192 -m 3600 -bg",

    "sudo sipp -i 10.55.55.138 -p 6668 -inf call-test.csv -sf uac-test-cancel1.xml 10.55.55.137:5080 -rp 1000 -r 10 -l 8192 -m 1200 -bg"

]

continueflag = 1

processes = []

commandUas = "sudo sipp -i 10.55.55.138 -p 5555 -sf uas-test180cps.xml"

p = subprocess.Popen(commandUas, shell=True)

processes.append(p)

while 1==continueflag:

    for command in commands:

        p = subprocess.Popen(command, shell=True)

        processes.append(p)

   

    time.sleep(180) # 等待3分钟

for p in processes:

    p.wait()

测试

Sipp的配置脚本和python脚本放置到相同目录下。

启动python脚本。

sudo python sipp-auto.py

观察fs资源情况和sipp运行情况。

总结

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

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

空空如常

求真得真

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1138431.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文讲透 “中间层” 思想

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《EffectiveJava》独家解析》专栏作者。 热门文章推荐&…

【打靶】vulhub打靶复现系列3---Chronos

【打靶】vulhub打靶复现系列3---Chronos 一、主机探测 结合之前的方法&#xff08;arp探测、ping检测&#xff09;&#xff0c;因为我们的靶机和攻击机都在第二层&#xff0c;所以打靶时候我们更依赖arp协议 tips&#xff1a;我在运行期间发现&#xff0c;netdiscover窗口没关…

vue中如何给后端过来的数组中每一个对象加一个新的属性和新的对象(不影响后端的原始数据)

方法&#xff1a; 先看后端的原数据 1、给数组中每一个对象加一个新的属性&#xff1a; 输出查看数组list的值&#xff1a; 2、给数组list加入新的对象&#xff1a; 输出结果&#xff1a; 3、总结&#xff1a; 如果是数组中每个对象新增属性就用map遍历每个对象加入新增的属性…

Baichuan2:Open large-scale language models

1.introduction baichuan2基于2.6万亿个token进行训练。 2.pre-training 2.1 pre-training data 数据处理&#xff1a;关注数据频率和质量。数据频率依赖于聚类和去重&#xff0c;构建了一个支持LSH型特征和稠密embedding特征的大规模去重和聚类系统&#xff0c;单个文档、段…

Java基于ssm+vue开发的失物招领小程序

演示视频&#xff1a; 小程序 https://www.bilibili.com/video/BV1sg4y1d75T/?share_sourcecopy_web&vd_source11344bb73ef9b33550b8202d07ae139b 管理员 https://www.bilibili.com/video/BV1UH4y167xe/?share_sourcecopy_web&vd_source11344bb73ef9b33550b8202d07a…

论文阅读 - Hidden messages: mapping nations’ media campaigns

论文链接&#xff1a; https://link.springer.com/content/pdf/10.1007/s10588-023-09382-7.pdf 目录 1 Introduction 2 The influence model 2.1 The influence‑model library 3 Data 4 Methodology 4.1 Constructing observations 4.2 Learning the state‑transiti…

编写虚拟UART驱动程序-框架

一、框架回顾 二、编写UART驱动要做的事 1.注册一个uart_driver 2. 对于每一个port&#xff0c;都会在设备树里面有一个节点 3. 设备树里的节点和platform_driver节点匹配 4. 当platform_dirver的probe函数被调用时&#xff0c;可以获得设备树里的信息&#xff0c;从而把每个串…

AutoConfigurationPackages.Registrar.class源码阅读

类作用 &#xff5b;link ImportBeanDefinitionRegistrar&#xff5d;存储来自导入的基本包配置。 registerBeanDefinitions 作用&#xff1a; 根据导入的有Configuration注解的类给定的注释元数据注册bean定义。由于与&#xff5b;codeConfiguration&#xff5d;相关的生命周…

HarmonyOS开发:NodeJs脚本实现组件化动态切换

前言 上篇文章&#xff0c;我们使用NodeJs脚本完成了HarmonyOS项目的组件化运行&#xff0c;但是由于脚本是基于4.0.0.400版本的DevEco Studio开发的&#xff0c;可能在配置文件的修改上有些许差距&#xff0c;那么遇到这种情况怎么办&#xff0c;一种是再写一套针对性的脚本文…

谁能想到,字节2023校招起薪40w+

大家好&#xff0c;我是老原。 转眼2023也来到了年底&#xff0c;每年的校招季&#xff0c;都是大厂上演抢人大战的时机&#xff0c;公布薪资和“开奖”一样刺激。 就拿互联网新贵—字节跳动来说&#xff0c;按照字节15薪计算白菜第一年的总包都超过40W了&#xff0c;对比去年…

【Linux】VM及WindowsServer安装

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《微信小程序开发实战》。&#x1f3af;&#x1f3a…

电脑怎么共享屏幕?电脑屏幕共享软件分享!

如何控制某人的电脑屏幕&#xff1f; 有时我们可能需要远程控制某人的计算机屏幕&#xff0c;例如&#xff0c;为我们的客户提供远程支持&#xff0c;远程帮助朋友或家人解决计算机问题&#xff0c;或在家中与同事完成团队合作。那么&#xff0c;电脑怎么共享屏幕&#xff…

皮卡丘RCE靶场通关攻略

皮卡丘RCE靶场通关攻略 文章目录 皮卡丘RCE靶场通关攻略RCE(remote command/code execute)概述远程系统命令执行启动环境漏洞练习第一关exec "ping"第二关 exec "eval" RCE(remote command/code execute)概述 RCE漏洞&#xff0c;可以让攻击者直接向后台服…

java--do-while循环

1.do-while循环 2.do-while循环的特点 先执行后判断 3.三种循环的区别小结 1.for循环和while循环(先判断后执行)&#xff1b;do...while(先执行后判断) 2.for循环和while循环的执行流程是一模一样的&#xff0c;功能上无区别&#xff0c;for能做到的while也能做&#xff0c…

0基础学习PyFlink——用户自定义函数之UDAF

大纲 UDAF入参并非表中一行&#xff08;Row&#xff09;的集合计算每个人考了几门课计算每门课有几个人考试计算每个人的平均分计算每课的平均分计算每个人的最高分和最低分 入参是表中一行&#xff08;Row&#xff09;的集合计算每个人的最高分、最低分以及所属的课程计算每课…

rust学习

rust学习 String类型clone和copy结构体的内存分布for循环&#xff08;<font color red>important&#xff01;&#xff09;堆和栈数据结构vector panic模式匹配忽略模式的值绑定 方法和关联函数线程学习1.多线程的风险2.使用spawn创建线程等待子线程结束move 关键字强制…

主流大语言模型的技术细节

主流大语言模型的技术原理细节从预训练到微调https://mp.weixin.qq.com/s/P1enjLqH-UWNy7uaIviWRA 比较 LLaMA、ChatGLM、Falcon 等大语言模型的细节&#xff1a;tokenizer、位置编码、Layer Normalization、激活函数等。2. 大语言模型的分布式训练技术&#xff1a;数据并行、…

[论文阅读]MVF——基于 LiDAR 点云的 3D 目标检测的端到端多视图融合

MVF End-to-End Multi-View Fusion for 3D Object Detection in LiDAR Point Clouds 论文网址&#xff1a;MVF 论文代码&#xff1a; 简读论文 这篇论文提出了一个端到端的多视角融合(Multi-View Fusion, MVF)算法,用于在激光雷达点云中进行3D目标检测。论文的主要贡献有两个…

Flutter报错RenderBox was not laid out: RenderRepaintBoundary的解决方法

文章目录 报错问题分析问题原因 解决办法RenderBox was not laid out错误的常见原因常见原因解决方法 RenderRepaintBoundaryRenderRepaintBoundary用途 报错 RenderBox was not laid out: RenderRepaintBoundary#d4abf relayoutBoundaryup1 NEEDS-PAINT NEEDS-COMPOSITING-BI…

华为终端智能家居应用方案

PLC-IoT概述 华为智能PLC-IoT工业物联网系列通信模块是基于电力线宽带载波技术的产品&#xff0c;实现数据在电力线上双向、高速、稳定的传输&#xff0c;广泛适用于电力、交通、工业制造、智能家居等领域&#xff0c;PLC-IoT通信模块包含头端和尾端两种类型&#xff0c;头端配…