How to track progress with programmatically run Test Manager (sltest.testmanager.run)?
9 次查看(过去 30 天)
显示 更早的评论
Hello,
Simulink Test Manager is very handy and allows to track the progress in its window (sltestmgr).
But I could not find how to track its execution programmatically after running command sltest.testmanager.run.
I tried using timers but they seem to not be able to disrupt the command, as if it was atomic. I assume that this is one of limitations mentioned here: https://www.mathworks.com/help/matlab/ref/timer.html
The only callbacks that affect Command Window (e.x. disp() ) are Setup Callbacks but due to the Test Execution Order they are useless in that case.
Such progress tracking is much needed especially when using long or many test cases.
0 个评论
回答(1 个)
Samay Sagar
2024-5-24
Although the built-in “sltest.testmanager.run” command does not provide a direct way to monitor progress in real-time, a workaround can be employed to achieve progress tracking by leveraging a combination of callbacks, event listeners, and custom logging mechanisms. Here is a structured approach to accomplish this:
1. Set Up Custom Logging in Test Scripts: Modify test cases to include custom logging statements at critical points. This can help to track progress manually through log files or variables.
disp('Starting test case 1');
% Your test code here
disp('Completed test case 1');
2. Use Event Listeners: Create event listeners to capture events during the test execution. These listeners can log the progress to a file or variable that can be monitored.
function setupListeners()
% Create a listener for test case start
tcListenerStart = addlistener(sltest.testmanager.TestCaseEventData, ...
'TestCaseStarted', @(src, event) logProgress(event, 'started'));
% Create a listener for test case completion
tcListenerEnd = addlistener(sltest.testmanager.TestCaseEventData, ...
'TestCaseCompleted', @(src, event) logProgress(event, 'completed'));
end
function logProgress(event, status)
message = sprintf('Test Case %s %s', event.TestCase.Name, status);
disp(message);
logProgressToFile(message);
end
function logProgressToFile(message)
fid = fopen('test_progress.log', 'a');
fprintf(fid, '%s: %s\n', datestr(now, 'HH:MM:SS'), message);
fclose(fid);
end
3. Polling Mechanism: Implement a polling mechanism that periodically checks the status of the test execution. Although this might not provide real-time updates, it can give a near-real-time view of the progress.
function monitorProgress()
while true
pause(10); % Adjust the polling interval as needed
checkProgress();
end
end
function checkProgress()
% Replace this with actual logic to check the test manager's status
% For example, read a log file or check a global variable
fid = fopen('test_progress.log', 'r');
if fid == -1
disp('Log file not found');
return;
end
logContents = fread(fid, '*char')';
fclose(fid);
disp(logContents);
end
For more information about “addlistener”, “fopen” and “fclose”, refer the following documentation:
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Outputs 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!