Results of Subsequences Called in New Threads Not Included In Report

Updated Apr 19, 2023

Reported In

Software

  • TestStand 2017

Issue Details

I have a TestStand sequence that called a subsequence in a new thread. The execution completes normally, however, the results of steps in the subsequence are not included in my report. How can I include these results in my report?

Solution

The easiest way to do this is to include a Wait step at the end of the calling sequence and configure the Wait step to wait on a thread specified by a Sequence Call:

  1. Insert a Wait step (Insertion Palette»Synchronization»Wait) at the end of the calling sequence
  2. In the Step Settings pane, switch to the Wait Settings tab
  3. Switch the Wait For radiobutton selection to Thread
  4. Select the Specify by Sequence Call radiobutton
  5. Pick the subsequence from the Specify by Sequence Call dropdown, as shown in the image below

Additional Information

Report Generation in TestStand is handled by the Process Model and is part of the Process Model's Execution Entry Point (Single Pass, Test UUTs, etc). The default report generation will include any result that is included in the MainSequence's ResultList container.

The ResultList container is a container present in every sequence and is populated during execution with the result of each step of the sequence, including Sequence Call steps. With Sequence Call steps, the subsequence will pass its ResultList container back to the calling seqence which will store the subsequence's ResultList container as a container within its own ResultList container.

When you execute a subsequence in a separate thread, the calling sequence does not wait for the subsequence to finish execution and so the ResultList container of the subsequence is not passed back to the calling sequence, and is not stored in the calling sequence's ResultList container. Therefore, during report generation, the results of steps executed by the subsequence are lost.

In order to circumvent this, you can force the calling sequence to wait for a subsequence to finish execution before completing its own execution. By doing this, the subsequence can safely pass its ResultList container back to the calling sequence and its step's results will be included in the Report.