33.5. Определение покрытия кода тестами

Исходный код PostgreSQL может быть скомпилирован с инструментарием определения покрытия, чтобы узнать, какие части кода покрываются регрессионными тестами или другим пакетом тестов, выполняемых в дереве кода. В настоящее время эта возможность поддерживается в случае использования компилятора GCC и требует наличия gcov и lcov программ.

Типичный рабочий процесс выглядит так:

./configure --enable-coverage ... OTHER OPTIONS ...
make
make check # или другой пакет тестов
make coverage-html

Затем откройте в своём HTML-браузере страницу coverage/index.html.

Если у вас нет программы lcov или вы предпочитаете HTML-отчёту текстовый формат, вы можете выполнить

make coverage

вместо make coverage-html и получить выходные файлы .gcov для каждого исходного файла, относящегося к тесту. (Команды make coverage и make coverage-html перезаписывают файлы друг друга, поэтому при одновременном их использовании может возникнуть путаница.)

Вы можете запустить несколько разных тестов перед проверкой покрытия — счётчики выполнений будут накапливать значения. Чтобы счётчики выполнений сбрасывались между тестами, запустите:

make coverage-clean

Если вам нужно собрать покрытие только для части дерева исходного кода, вы можете запустить команду make coverage-html или make coverage в подкаталоге.

После завершения тестирования выполните очистку с помощью make distclean.

33.5. Test Coverage Examination

The PostgreSQL source code can be compiled with coverage testing instrumentation, so that it becomes possible to examine which parts of the code are covered by the regression tests or any other test suite that is run with the code. This is currently supported when compiling with GCC, and it requires the gcov and lcov programs.

A typical workflow looks like this:

./configure --enable-coverage ... OTHER OPTIONS ...
make
make check # or other test suite
make coverage-html

Then point your HTML browser to coverage/index.html.

If you don't have lcov or prefer text output over an HTML report, you can run

make coverage

instead of make coverage-html, which will produce .gcov output files for each source file relevant to the test. (make coverage and make coverage-html will overwrite each other's files, so mixing them might be confusing.)

You can run several different tests before making the coverage report; the execution counts will accumulate. If you want to reset the execution counts between test runs, run:

make coverage-clean

You can run the make coverage-html or make coverage command in a subdirectory if you want a coverage report for only a portion of the code tree.

Use make distclean to clean up when done.

FAQ