Found by auditing LamNI against the battle-tested flomni: - _tomo_scan_at_angle swallowed TimeoutError alarms: the projection was never retried, its failed scan numbers were logged as a success and it never reached reconstruction. Now the queue is reset and the alarm re-raised so @scan_repeat re-acquires it. The special-angle list is consumed only after success (a retry must still see it) and num_repeats is always defined. - tomo_alignment_scan had the same swallow; it now retries (bounded) and rewrites ptychotomoalign_scannum.txt with the scan numbers actually acquired. - leye_out() opened the fast shutter instead of closing it (regression from4967474'removed fsh commands'). - Progress GUI: an endless golden-ratio scan (golden_max_number_of_projections == 0) divided by zero on the first projection, and any GUI/RPC failure propagated into the scan (retried 10x by @scan_repeat, then aborted). Now guarded and wrapped like flomni'sdea43ed. - raise_window() disabled as in flomni (it can hide the GUI window). - write_to_scilog and the PDF report entry used the removed bec.logbook API; they now use bec.messaging.scilog like flomni, never raise, and include the at-each-angle hook source in the end-of-scan/timing entries. - extra_tomo: num_repeats unbound for non-special angles. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Getting Started with Testing using pytest
BEC is using the pytest framework. It can be installed via
pip install pytest
in your python environment.
We note that pytest is part of the optional-dependencies [dev] of the plugin package.
Introduction
Tests in this package should be stored in the tests directory.
We suggest to sort tests of different submodules, i.e. scans or devices in the respective folder structure, and to folow a naming convention of <test_module_name.py>.
It is mandatory for test files to begin with test_ for pytest to discover them.
To run all tests, navigate to the directory of the plugin from the command line, and run the command
pytest -v --random-order ./tests
Note, the python environment needs to be active.
The additional arg -v allows pytest to run in verbose mode which provides more detailed information about the tests being run.
The argument --random-order instructs pytest to run the tests in random order, which is the default in the CI pipelines.
Test examples
Writing tests can be quite specific for the given function. We recommend writing tests as isolated as possible, i.e. try to test single functions instead of full classes. A very useful class to enable isolated testing is MagicMock. In addition, we also recommend to take a look at the How-to guides from pytest.