write-sglang-test
Installation
SKILL.md
Writing SGLang CI / UT Tests
This skill covers how to write and register tests. For CI pipeline internals (stage ordering, fast-fail, gating, partitioning, debugging CI failures), see the CI workflow guide.
Core Rules
- Always use
CustomTestCase— never rawunittest.TestCase. It ensurestearDownClassruns even whensetUpClassfails, preventing resource leaks in CI. tearDownClassmust be defensive — usehasattr/null checks before accessing resources (e.g.cls.process) thatsetUpClassmay not have finished allocating.- Place tests in
test/registered/<category>/— including JIT kernel tests and benchmarks, which live intest/registered/jit/andtest/registered/jit/benchmark/(nested subfolders are allowed) - Reuse server fixtures — inherit from
DefaultServerBaseor writesetUpClass/tearDownClasswithpopen_launch_server - Prefer mock over real server — when testing logic that doesn't need a server / engine launch (middleware, request routing, config validation, argument parsing), use
unittest.mock.patch/MagicMockand place tests intest/registered/unit/. Only launch a real server when the test genuinely needs inference results or server lifecycle behavior.
JIT kernel notes:
- If the task is adding or updating code under
python/sglang/kernels/jit/, prefer theadd-jit-kernelskill first. - JIT kernel correctness tests use
test/registered/jit/**/test_*.py. - JIT kernel benchmarks use
test/registered/jit/benchmark/**/bench_*.py. - Those files are executed by
test/run_suite.pythrough dedicated kernel suites (base-b-kernel-*); aregister_*_ci(...)call placed underpython/sglang/is rejected by thecheck-no-registered-tests-in-packagepre-commit hook.