py尝试将其与现有的 sipp conf 文件一起使用



Background

我有一个现有的 sipp conf 文件,我像这样启动:

sipp mysipdomain.net -sf ./testcall.conf -m 1 -s 12345 -i 10.1.1.1:5060 

这运行良好。它模拟我们测试实验室中的呼叫。 但是现在我需要扩展这个测试,使其成为一个更大的测试脚本的一部分,我不仅要启动 sipp 测试,还要证明(通过 sip 跟踪)它击中了正确的框。

我决定用python包装这个sipp调用。 我刚刚找到了 https://github.com/SIPp/pysipp,并试图看看我是否可以用 python 编写整个测试。 首先,我尝试使用 pysipp 运行相同的 sipp 测试。

问题/疑问

我目前收到一个错误,说:

lab2:/tmp/jj/sipp_tests# python mvv_numeric.py
No handlers could be found for logger "pysipp"
Traceback (most recent call last):
File "mvv_numeric.py", line 6, in <module>
uac()
File "/usr/lib/python2.7/site-packages/pysipp-0.1.alpha-py2.7.egg/pysipp/agent.py", line 71, in __call__
raise_exc=raise_exc, **kwargs
File "/usr/lib/python2.7/site-packages/pluggy-0.3.1-py2.7.egg/pluggy.py", line 724, in __call__
return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)
File "/usr/lib/python2.7/site-packages/pluggy-0.3.1-py2.7.egg/pluggy.py", line 338, in _hookexec
return self._inner_hookexec(hook, methods, kwargs)
File "/usr/lib/python2.7/site-packages/pluggy-0.3.1-py2.7.egg/pluggy.py", line 333, in <lambda>
_MultiCall(methods, kwargs, hook.spec_opts).execute()
File "/usr/lib/python2.7/site-packages/pluggy-0.3.1-py2.7.egg/pluggy.py", line 596, in execute
res = hook_impl.function(*args)
File "/usr/lib/python2.7/site-packages/pysipp-0.1.alpha-py2.7.egg/pysipp/__init__.py", line 250, in pysipp_run_protocol
finalize(cmds2procs, raise_exc=raise_exc)
File "/usr/lib/python2.7/site-packages/pysipp-0.1.alpha-py2.7.egg/pysipp/__init__.py", line 228, in finalize
raise SIPpFailure(msg)
pysipp.SIPpFailure: Some agents failed
'uac' with exit code 255 -> Command or syntax error: check stderr output

法典

下面是 py 脚本的样子:

1 import pysipp
2 uac = pysipp.client(destaddr=('mysipdomain.net', 5060))
3 uac.uri_username = '12345'
4 uac.auth_password = ''
5 uac.scen_file = './numeric.xml'
6 uac()

原来的sipp"testcall.conf"已经重命名为"numeric.xml",看起来像这样:(我只包括第一部分,因为它很长。 如果您需要查看特定内容,请告诉我,我会添加到这篇文章中)

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE scenario SYSTEM "sipp.dtd">
<scenario name="UAC with Media">
<send retrans="10000">
<![CDATA[
INVITE sip:[service]@[remote_ip]:[remote_port] SIP/2.0
Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
To: [service] <sip:[service]@[remote_ip]:[remote_port]>
Call-id: [call_id]
CSeq: 1 INVITE
Contact: <sip:sipp@[local_ip]:[local_port]>
Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, INFO, MESSAGE, SUBSCRIBE, NOTIFY, PRACK, UPDATE, REFER
User-Agent: PolycomVVX-VVX_300-UA/5.5.2.8571
Accept-Language: en
Supported: replaces,100rel
Allow-Events: conference,talk,hold
Max-Forwards: 70
Content-Type: application/sdp
Content-Length: [len]

我敢肯定这是我忽略的简单事情。 任何指示将不胜感激。

编辑:

我添加了调试级别日志记录并重新运行了 python 脚本。 在日志中,我现在可以看到 pysipp 实际尝试的内容:

2018-01-31 14:40:32,715 MainThread [DEBUG] pysipp launch.py:63 : launching cmd:
"'/usr/bin/sipp' 'mysipdomain.net':'5060' -s '12345' -sn 'uac' -sf 'numeric.xml' -recv_timeout '5000' -r '1' -l '1' -m '1' -log_file '/tmp/uac_log_file' -screen_file '/tmp/uac_screen_file' -trace_logs -trace_screen "

因此,将其与我用于运行sipp的原始命令行进行比较,我看到了额外的"-sn 'uac'"。

去看看让我的 SIPP 脚本使用该标签或......谷歌看看我是否能找到其他类似的帖子。 与此同时,如果你看到我的错误,我全都听着。

这里的问题(如您所注意到的)可能是pysipp.client()设置了-sn uac标志,并且sipp同时-sn-sf都失败了。

要查看实际错误,您可以在运行client之前启用日志记录:

import pysipp
pysipp.utils.log_to_stderr("DEBUG")
uac = pysipp.client(destaddr=('mysipdomain.net', 5060))
uac.uri_username = '12345'
uac.auth_password = ''
uac.scen_file = './numeric.xml'
uac()

黑客是简单地做uac.scen_name = None但正确的方法是使用pysipp.scenario()(此处为文档)并重命名numeric.xml以在文件名中包含uac(即uac_numeric.xml) 或改用pysipp.ua(scen_file=<path/to/numeric.xml>)

为了理解这个问题,client当前正在应用默认方案名称参数,而实际上用户应该能够覆盖它(尽管在这种情况下,无法保证用户实际上正在发送客户端流量,这使得名称客户端毫无意义)。

最新更新