[Development] Reducing CI test run verbosity
Volker Hilsheimer
volker.hilsheimer at qt.io
Wed Sep 25 13:55:26 CEST 2024
> On 25 Sep 2024, at 13:09, Dimitrios Apostolou via Development <development at qt-project.org> wrote:
>
> On Wed, 25 Sep 2024, Assam Boudjelthia via Development wrote:
>
>> This would be very nice!
>> Also, consider removing the "Label Time Summary:” section from the logs which outputs the run tests with their execution times, which is just duplicate information to what ctest printed before it.
>> — Assam
>>
>> On Sep 25, 2024, at 12:01 PM, Tor Arne Vestbø via Development <development at qt-project.org> wrote:
>> Hello,
>> As described in https://bugreports.qt.io/browse/QTQAINFRA-6592, we currently execute ctest -V (verbose), which logs all of the output from all tests to the resulting test log, even for passing tests.
>> This practice presents challenges in investigating test failures, as it requires loading and navigating through approximately 25MB (qtbase) of logs within a (mobile) web browser or editor to identify a test failure.
>> To address this issue, we propose implementing https://codereview.qt-project.org/c/qt/qtbase/+/592470, which will enable us to pass —output-on-failure to ctest. This modification will significantly reduce the ctest output and
>> signal-to-noise ratio.
>> In certain cases, it may still be beneficial to examine the full verbose log. Therefore, we will continue to store this information as CTest.log within the testresults.tar.gz for those who require a comprehensive analysis.
>> It is important to note that enabling —output-on-failure will not impact our test reporting to https://testresults.qt.io/grafana. This reporting is based on XML output that we still generate for each test.
>> An example of how this change would manifest is available here: https://testresults.qt.io/coin/integration/qt/qtbase/tasks/1727203984
>> Let us know if you have any concerns not addressed in the corresponding bug reports.
>> Cheers,
>> Tor Arne
>
> The reduction in verbosity is very welcome, especially since we retain the full log in the downloads. Thank you Tor Arne!
Good improvement indeed!
> Regarding the label time summary, it is actually different output than what is before it. For reasons I don't know (feedback welcome), we assign a LABEL to each test that includes its full path. I believe a group of test can even have the same LABEL. That is the summary of these labels.
>
> They are assigned in cmake/QTestHelpers.cmake, function qt_internal_add_test():
>
> 602 # Generate a label in the form tests/auto/foo/bar/tst_baz
> 603 # and use it also for XML output
> 604 set(label_base_directory "${PROJECT_SOURCE_DIR}")
> 605 if (QT_SUPERBUILD)
> 606 # Prepend repository name for qt5 builds, so that tests can be run for
> 607 # individual repositories.
> 608 set(label_base_directory "${label_base_directory}/..")
> 609 endif()
> 610 file(RELATIVE_PATH label "${label_base_directory}" "${CMAKE_CURRENT_SOURCE_DIR}/${name}")
> ...
> 755 set_tests_properties("${testname}" PROPERTIES RUN_SERIAL "${arg_RUN_SERIAL}" LABELS "${label}")
>
>
> Example output from CTest:
>
> agent:2024/09/24 20:04:49 build.go:404: 100% tests passed, 0 tests failed out of 605
> agent:2024/09/24 20:04:49 build.go:404: Label Time Summary:
> agent:2024/09/24 20:04:49 build.go:404: tests/auto/concurrent/qtconcurrentfilter/tst_qtconcurrentfilter = 0.77 sec*proc (1 test)
> agent:2024/09/24 20:04:49 build.go:404: tests/auto/concurrent/qtconcurrentfiltermapgenerated/tst_qtconcurrentfiltermapgenerated = 0.48 sec*proc (1 test)
> agent:2024/09/24 20:04:49 build.go:404: tests/auto/concurrent/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel = 1.80 sec*proc (1 test)
> agent:2024/09/24 20:04:49 build.go:404: tests/auto/concurrent/qtconcurrentmap/tst_qtconcurrentmap = 1.26 sec*proc (1 test)
> agent:2024/09/24 20:04:49 build.go:404: tests/auto/concurrent/qtconcurrentmedian/tst_qtconcurrentmedian = 0.46 sec*proc (1 test)
> ...
>
>
> I support removing this summary, if we don't have any particular use for the labels.
>
>
> Dimitris
The labels we set in the build system allow us to run a group of tests via
% ctest -L ‘foo’
E.g. I can run all qtsvg tests in a toplevel build via
% ctest -L ‘qtsvg’
This is incredibly useful.
Some of this is possible via
% ctest -R ‘pattern’
but it’s not quite the same. E.g.
% ctest -R ‘qtsvg’
runs nothing, because none of the tests has qtsvg in their name, and
% ctest -R ‘qsvg’
would not run the tst_qicon_svg (which the -L equivalent does run).
So please keep the label :) But indeed, if possible to remove, then the summary at the end is not useful for a reader of the log trying to understand what failed, as long as we can capture it for statistics from the XML output.
Volker
More information about the Development
mailing list