Skip to main content
This guide walks you through a complete test workflow — from verifying connectivity to running an automated test, in Python or Rust. By the end, you’ll have used the CLI interactively and written your first Lager test script.
This tutorial assumes you have completed the Getting Started guide: the CLI is installed, your box is added, and your instruments are configured with nets.

Part 1: CLI Walkthrough

Let’s step through a typical test flow using individual CLI commands. This is useful for ad-hoc testing, debugging, and getting familiar with your setup.

Step 1: Verify your box is online

Expected output:

Step 2: Check connected instruments

This shows all instruments the box can see. Confirm your power supply, debug probe, and any other instruments appear.

Step 3: View your configured nets

This shows the named nets you’ll use in subsequent commands. Note the net names — you’ll need them below.

Step 4: Set defaults to reduce typing

With defaults set, you can omit --box and net names from subsequent commands.

Step 5: Flash firmware

Expected output:

Step 6: Power on your device

Step 7: Take a measurement

Expected output:

Step 8: Power down

Always disable power supplies when you’re done testing.

Part 2: Your First Test Script

Now let’s convert the manual CLI steps into a repeatable test. The key advantage of a script is that it always cleans up after itself (disabling power) even if an error occurs. You can write it in Python (runs on the box via lager python) or in Rust (an ordinary cargo test in your firmware repo, using the lager-net crate). Both versions below do the same thing: flash, power on, measure, assert, clean up.
Cleanup matters: the Python version uses try/finally to guarantee the power supply is disabled even if an error occurs, and the Rust version disables power before its assertion (any earlier ? error also ends the test with the supply’s state visible in the failure). This is important for protecting your hardware.

Part 3: Running It

Execute the Python script on your Lager Box:
Or run the Rust test from your project (with lager = { package = "lager-net", version = "0.2" } in [dev-dependencies]):
Expected output (Python):
If you need to send additional files along with your script (firmware binaries, config files), use --add-file:

What’s Next

You’ve completed your first test with Lager. Here are some directions to explore:
  • CLI Reference — Full documentation for every CLI command
  • Python API — Complete Python SDK reference
  • Rust API — Write your HIL suite as cargo test integration tests
  • Troubleshooting — Solutions when things go wrong
  • Glossary — Definitions for technical terms used in the docs
For a more comprehensive automation example combining robot arm control, USB hub power cycling, debug probe flashing, and ADC measurement, see the demo script.