// comparison · UDS testing in Python
If you are testing UDS from Python, you have found the established stack. It is good, and this page does not try to talk you out of it — it explains which of the two problems you actually have, and says plainly where udsoncan is the better answer.
// the actual difference
python-can (the CAN bus layer), can-isotp (ISO 15765-2 transport) and udsoncan (the ISO 14229 client) together form a client. They speak UDS to an ECU that already exists. TestLab Core is a test harness — a campaign runner plus an ECU that answers, so tests can be written and run before any hardware does.
That is the whole distinction. It is not a capability contest, and on raw protocol coverage udsoncan is ahead.
| udsoncan + python-can + can-isotp | TestLab Core | |
|---|---|---|
| What it is | UDS client library stack | Campaign runner + simulated ECU |
| Something that answers | Needs a real ECU. FakeConnection replays a two-entry static dict — enough to smoke-test your own plumbing, not an ECU |
Stateful simulator: sessions, SecurityAccess seed/key (AES-CMAC), DTCs, NRCs |
| Real CAN / DoIP hardware | Yes, free — socketcan, J2534, every python-can interface | Not in core. Core is virtual-transport only; real transports are a paid tier |
| Raw UDS coverage | Broader — 27 services, 91 client methods, including the full ReadDTCInformation sub-function set, 0x29 Authentication and DynamicallyDefineDataIdentifier | Focused on the ~20 actions a validation campaign uses |
| How a test is expressed | Write Python | Declarative YAML campaign |
| Pass/fail + timing report | Build it yourself | Built in — testlab-run, testlab analyze, JSON output |
| Time to first result | A CAN interface and an ECU — or write your own responder | pip install xaloqi-tester && xaloqi-sim --demo |
| License | MIT (udsoncan, can-isotp), LGPL-3.0-only (python-can) | Apache-2.0 |
// which one
ResponseOnEvent, RequestFileTransfer, the deeper ReadDTCInformation sub-functions, LinkControl.They also compose. Nothing stops you developing campaigns against the simulator and driving real hardware with udsoncan — the JSON result schema is documented, and the same campaign YAML runs unmodified on real transports if you later move to TestLab Pro.
// try it
TestLab Core is Apache-2.0 and on PyPI. The simulated ECU answers real UDS requests — sessions, SecurityAccess seed/key, DTC reads — so you can judge the difference yourself rather than take this page's word for it.
pip install xaloqi-tester
xaloqi-sim --demo
FakeConnection's
behaviour, were read from the installed packages. If anything here is out of date or
wrong,
open an issue
and it will be corrected.