Complete guide to TS 38.523 test cases
Structure of 3GPP TS 38.523 for NR: the -1/-2/-3 split, clause numbering, how test case IDs map to procedures, and which subsets matter per device class.
10 min read
TS 38.523 is the 5G NR protocol conformance specification. If you only remember one thing: the part number tells you what kind of document you are reading.
| Document | Content |
|---|---|
| TS 38.523-1 | Protocol test case definitions (prose) — what each case does |
| TS 38.523-2 | Applicability — PICS-driven selection tables |
| TS 38.523-3 | The executable TTCN-3 abstract test suite |
Clause map
4 Idle mode operations (cell selection, reselection, PLMN) 5 Layer 2 (MAC, RLC, PDCP, SDAP) 6 RRC (connection control, reconfiguration, measurement) 7 NAS / 5GMM and 5GSM (registration, sessions, security) 8 IMS / VoNR 9 NSA / EN-DC and multi-RAT 10 Positioning, MBS, and later-release features
Reading a test case ID
The ID is a clause path, not an arbitrary number. This is why a failure report citing TC_6_1_1_1 and clause 24.501:5.5.1.2.4 is immediately actionable: one names the test, the other names the requirement.
TC_6_1_1_1 | | | | +-- variant / sub-case | | | +---- test purpose index | | +------ sub-clause | +-------- clause (6 = RRC) +------------ test case
Typical applicable counts
| Device class | Applicable NR cases (Rel-18) |
|---|---|
| NR SA only, single band, no IMS | ~380 |
| NR SA + VoNR, single band | ~520 |
| NR SA + NSA, multi-band | ~647 |
| Full feature set incl. CA and slicing | 1,100+ |
noteDerive your own number rather than trusting these: aeon cases applicable --pics ./pics.yaml --count
Running the whole applicable set
On a physical tester this is a multi-week booking. On lane fan-out it is an overnight job, which is the practical reason cloud execution changes how often teams run the full set: from once per release to every night.
aeon cases applicable --pics ./pics.yaml --release 18 --json > applicable.json aeon exec run --cases-from applicable.json --build rc3 --lanes 12 --wait aeon coverage show --build rc3 --release 18
Run this against a real SDR lane
The tester is a service, not a box. Push a build, reserve a lane, get a verdict.