catchorg / Catch2

A modern, C++-native, test framework for unit-tests, TDD and BDD - using C++14, C++17 and later (C++11 support is in v2.x branch, and C++03 on the Catch1.x branch)
https://discord.gg/4CWS9zD
Boost Software License 1.0
18.41k stars 3.02k forks source link

How to output benchmark custom meta data correctly #2886

Open SimeonEhrig opened 1 month ago

SimeonEhrig commented 1 month ago

We want to use Catch2 benchmark for performance regression tests. Therefore we output the data as xml and store it in a database that we can compare the performance over different commits. For comparison reason, we need to store meta data, such like which compiler and which CPU was used and so one.

If we use std::cout, we get a single xml region, which contains all the output and we need to parse the content by our self to split up the different information.

<StdOut>
First output

Second output
second line of the second output
third output
</StdOut>

INFO, WARN and so one is similar. It has the advantage, that each output become it's own xml region, but there is still no difference between the xml region. Each INFO creates the same <Info> xml region and we need to search for an identifier in the content of the xml region to get the right information such like which compiler version.

In the best case, Catch2 provides a mechanism, which produces the following kind of xml output:

<CustomData>
  <CompilerVersion>GCC 11.4</CompilerVersion>
  <CPUName>AMD EPYC 7452 32-Core Processor</CPUName>
</CustomData>

Is there a feature in Catch2 to achieve it and if not, what is the best practice to get something similar?

SimeonEhrig commented 1 month ago

cc @mehmetyusufoglu

horenmar commented 4 weeks ago

There is currently no feature for this, and I am not aware of commonly used benchmarking framework with labels like these -> more often there is a support for user defined numeric counters. However, if someone adds the numeric counters, adding free form text labels should be just some extra boilerplate.

User defined counters are a thing I would like to add at some point, but my own work on Catch2 is on hold at least until October.