跳转到主要内容

SIPp场景启动器

项目描述

Build Status

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_usernameauth_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
  • 远程执行
  • 异步多场景负载测试

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

pysipp-0.1.0.tar.gz (23.8 kB 查看哈希)

上传时间:

构建分发

pysipp-0.1.0-py3-none-any.whl (31.7 kB 查看哈希)

上传于 Python 3

由以下支持