SIPp场景启动器
项目描述
pysipp
是为那些讨厌 SIPp 的人准备的
但(想要)使用它进行自动化测试,因为它可以完成任务...
这是什么?
使用受 requests 启发的 api,Python 配置和启动臭名昭著的 SIPp
它肯定可以让您
- 理智地启动多 UA 场景(即 SIPp 子进程)
- 避免从多个终端的噩梦般的 shell 命令混合
- 允许进行复杂的功能或端到端 SIP 测试
- 重用现有的 SIPp XML 脚本
- 与 pytest 优雅地集成
它不尝试
- 自动生成 SIPp XML 脚本,如 sippy_cup
pysipp
绝对不会试图解决 SIPp 糟糕的 XML 控制语言问题;您的当前场景脚本兼容!
基本用法
启动默认 UAC 场景是一行简短命令
import pysipp
pysipp.client(destaddr=('10.10.8.88', 5060))()
手动运行默认 uac
--calls--> uas
场景也很简单
uas = pysipp.server(srcaddr=('10.10.8.88', 5060))
uac = pysipp.client(destaddr=uas.srcaddr)
# run server async
uas(block=False) # returns a `pysipp.launch.PopenRunner` instance by default
uac() # run client synchronously
身份验证
当在场景中使用 [authentication]
sipp 关键字 时,可以使用 auth_username
和 auth_password
参数提供凭据,例如
pysipp.client(auth_username='sipp', auth_password='sipp-pass')
多个代理
对于多 UA 协奏,我们可以使用 pysipp.scenario
。上面的场景是默认代理配置
scen = pysipp.scenario()
scen() # run uac and uas synchronously to completion
假设您有几个SIPp xml脚本以及一个您想要用这些脚本测试的设备(例如B2BUA或SIP代理)。假设您已将脚本整理得很好,放在如下的目录中
test_scenario/
uac.xml
referer_uas.xml
referee_uas.xml
如果您已将待测设备(DUT)配置为监听SIP请求在10.10.8.1:5060
,并将流量路由到SIP请求头中指定的目的地,并且您的本地IP地址是10.10.8.8
scen = pysipp.scenario(dirpath='path/to/test_scenario/',
proxyaddr=('10.10.8.1', 5060))
# run all agents in sequence starting with servers
scen()
pysipp默认使用-screen_file
SIPp参数来重定向输出,但此参数仅在SIPp版本>= 3.5.0中可用,对于较低版本,为了正常运行,必须将enable_screen_file
设置禁用为False
scen = pysipp.scenario(enable_screen_file=False)
如果您有多个此类场景目录,您可以通过迭代它们
for path, scen in pysipp.walk('path/to/scendirs/root/'):
print("Running scenario collected from {}".format(path))
scen()
异步场景启动
您还可以使用非阻塞模式同时启动多个多UA场景
scens = []
for path, scen in pysipp.walk('path/to/scendirs/root/', proxyaddr=('10.10.8.1', 5060)):
print("Running scenario collected from {}".format(path))
scen(block=False)
scens.append(scen)
# All scenarios should now be running concurrently so we can continue
# program execution...
print("Continuing program execution...")
# Wait to collect all the results
print("Finalizing all scenarios and collecting results")
for scen in scens:
scen.finalize()
scen.finalize()
实际上调用在pysipp_run_protocol
钩子中定义的特殊清理函数,该钩子调用内部报告函数,并返回一个dict
,包含cmd -> process项。
API
要查看SIPp命令行参数与pysipp.agent.UserAgent
属性的映射,请查看pysipp.command.sipp_spec
。这应该能为您提供有关每个代理可以设置什么的想法。
特性
- (a)异步多场景调用
- 由于pluggy,完全可插拔
- 详细的控制台报告
...更多即将到来!
依赖关系
SIPp...当然...在github上获取最新版本
安装
从git
pip install git+git://github.com/SIPp/pysipp.git
希望与梦想
我希望看到pysipp
成为SIPp本身的标准化端到端单元测试工具(特别是如果与pytest
结合使用的话)。
其他想法是,有一天可能会有人为SIPp的内部编写实际的Python绑定,这样就可以使用纯Python DSL而不是愚蠢的默认xml SIP-flow mini-language。如果/当这种情况发生时,pysipp可以作为前端界面。
高级用法
pysipp
包含一些用于自定义SIPp默认命令配置和启动以及详细控制台报告的实用功能。甚至支持通过网络使用rpyc远程执行SIPp
启用详细控制台报告
pysipp.utils.log_to_stderr("DEBUG")
应用默认设置
目前请参阅#4
更多即将到来?
- 文档属性/标志
- 编写插件
- 使用
pysipp_conf.py
- 远程执行
- 异步多场景负载测试
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。