Sometimes, it's really hard to test VoIP infrastructure in an automated way. The usual way of testing any telco system is to take a phone, make some calls and that's it. Maybe to look at the logs.
Some of the engineers going further and using famous SIPP, which is quite good in testing low-level SIP, but really could be a pain in some closer-to-world scenarios.
Another approach is to write some scripts and automating Asterisk or FreeSWITCH to do some test calls. And it's a good approach, but sometimes writing something simple could take a lot of time. And attention.
But there is one more way - use standalone SIP libraries like baresip or pjsip and control them via API or CLI.
Exactly this way was taken by Julien Chavanton in his voip_patrol project. After a short time of playing around with it, I can say it's a really good combination of simplicity of things it can test and a way it's configuring.
In my current position, I'm dealing mostly with opus/SRTP media (in DTLS-SRTP flavor) and I was able to add support of this to voip_patrol (in this branch) and it's working well with rtpengine provided SRTP.
And here is just an example of voip_patrol scenario to register TLS endpoint, make a call with SRTP and catch it back. So, a simple register-call test as a good starting point for more complex scenarios.
<config>
<actions>
<action type="codec" disable="all"/>
<action type="codec" enable="pcma" priority="250"/>
<action type="codec" enable="pcmu" priority="249"/>
<action type="register" label="Register 88881"
transport="tls"
account="88881"
username="88881"
password="XXXXX"
registrar="XXXXX"
realm="XXXXX"
expected_cause_code="200"
srtp="dtls,sdes,force"
/>
<action type="wait" complete="true"/>
<action type="accept" label="Receive all calls"
account="default"
hangup="10"
code="200" reason="OK"
transport="tls"
srtp="dtls,sdes,force"
/>
<action type="call" label="Call to 88881"
transport="tls"
expected_cause_code="200"
caller="88882@XXXXX"
callee="88881@XXXXX"
from="sip:88882@XXXXX"
to_uri="88881@XXXXX"
max_duration="20" hangup="16"
username="88882"
password="XXXXX"
realm="XXXXX"
rtp_stats="true"
max_ringing_duration="15"
srtp="dtls,force"
play="/git/voip_patrol/voice_ref_files/reference_8000_12s.wav"
/>
<action type="wait" complete="true"/>
</actions>
</config>
For more advanced, I suggest to look on issues [1, 2] on GitHub, where author expands some concepts.
And as a good quickstart - video from author
UPDATE: Based on this tool, templating and reporting suite VOLTS was created. Stay tuned for more cool features to come!