VirtuProbe Studio
Use case
A new user registers, gets a confirmation email, clicks the link, and becomes a real account. That path crosses three protocols — HTTP, IMAP and LDAP — so a test that only covers the HTTP call leaves the rest unchecked.
Email verification is the classic flow that looks like one feature and is actually three systems shaking hands: an HTTP API, a mail server, and a directory. VirtuProbe Studio lets you drive all three from one chain — register, catch the email, follow the link, confirm the account — and turn "it worked when I tried it" into a test you can re-run and keep as evidence.
Walk through what "verify my email works" really means:
POST creates the user and triggers a confirmation email.A test that stops at the HTTP call covers the first hop. Most of the failures that matter are downstream: the email never arrives, the token has expired by the time it's used, or the account registers but is never provisioned into the directory. Catching those means driving all three protocols in sequence and passing state between them.
In VirtuProbe a chain is an ordered sequence of steps. Each step runs a request, an extractor pulls a value out of the response into a named variable, and later steps reference it with {{variable}}. That's the whole trick: the token you extract from the email in step two is the token you replay in step three.
The verification flow lands as four steps:
# Chain: signup-verification
01 HTTP POST /api/register
extract HTTP_JSON_PATH $.id → {{userId}}
assert HTTP_STATUS EQUALS 201
02 IMAP SELECT INBOX; SEARCH UNSEEN; FETCH 1 (BODY[TEXT])
extract REGEX https?://\S+/verify\S+ → {{verifyUrl}}
03 HTTP GET {{verifyUrl}}
assert HTTP_STATUS EQUALS 200
04 LDAP BIND uid={{userId}},ou=people,dc=example,dc=com
assert LDAP_EXCHANGE_RESULT_CODE EQUALS 0
Send the registration request as an HTTP probe. Attach an HTTP_JSON_PATH extractor ($.id) to capture the new user's id into {{userId}}, and assert the status with HTTP_STATUS so a silent 500 fails the run instead of sailing through.
An IMAP step selects the inbox, searches for the unseen message, and fetches its body. VirtuProbe implements IMAP against the RFC directly, so SELECT, SEARCH and FETCH are all first-class command types. To pull the link out of the body, attach a generic REGEX extractor to the same step and capture the URL into {{verifyUrl}}.
A second HTTP step requests {{verifyUrl}} verbatim — the variable is resolved before the request is sent. Assert HTTP_STATUS EQUALS 200 (or a redirect, if that's your design) so an expired or malformed token is a failed step, not a shrug.
Finally, an LDAP step binds (or searches) for the freshly-created account and asserts the result code. Result code 0 is success; 49 is invalid credentials; 32 is "no such object" — the exact signal that registration happened but provisioning didn't. VirtuProbe implements LDAP from scratch (BER, RFC 4511), so you're asserting on the real wire response.
Clicking through the flow by hand proves it worked once. A chain proves it works every time and leaves something behind:
ASSERT steps and per-step expected values (EQUALS, CONTAINS, MATCHES, GT/LT, …) turn each hop into a pass/fail gate. A failed assertion stops the chain where it broke.ITERATE to run it across a list of test users, or gate a branch with CONDITION when the flow forks.test, not test@example.com). That's a quirk of the test server, not of the client — VirtuProbe sends exactly the login you give it.Because the flow spans HTTP, IMAP and LDAP, and you can run all three from one place. Each protocol is a hand-written stack built against its RFC, so requests go on the wire the way you wrote them. Chaining carries state between steps without copy-paste, and everything runs locally — your requests, tokens and mailboxes stay on your machine.
Build the chain yourself. VirtuProbe Studio is free to download — no account, no cloud, no telemetry. Chaining, environments and request history are on the free tier; the full protocol suite unlocks per tier.