美文网首页
Postgres源码测试

Postgres源码测试

作者: hemny | 来源:发表于2018-10-09 18:41 被阅读83次

    一、 简介

    本文主要介绍postgres的测试相关功能,利用自带的测试工程和测试用例实现

    二、 regress(回归测试)

    首先,编译源码:

    [appusr@postgre postgresql-10.5]$ export PGHOME=/home/appusr/PostgreSQL/pgsql-10
    [appusr@postgre postgresql-10.5]$ ./configure --enable-rpath --prefix=$PGHOME --includedir=$PGHOME/include --mandir=$PGHOME/share/man --datadir=$PGHOME/share --with-icu --with-perl --with-python --with-tcl --with-tclconfig=/usr/lib64 --with-openssl --with-pam --with-gssapi --with-includes=/usr/include --with-libraries=/usr/lib64 --enable-nls --enable-dtrace --with-uuid=e2fs --with-libxml --with-libxslt --with-ldap --with-selinux --with-systemd --docdir=$PGHOME/doc --htmldir=$PGHOME/doc/html   --enable-debug
    
    [appusr@postgre postgresql-10.5]$ make -j4 all
    
    

    执行 regress测试工程代码

    [appusr@postgre postgresql-10.5]$ make -C src/test/regress check
    make: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
    make -C ../../../src/port all
    make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/port'
    make -C ../backend submake-errcodes
    make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[2]: Nothing to be done for `submake-errcodes'.
    make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/port'
    make -C ../../../src/common all
    make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/common'
    make -C ../backend submake-errcodes
    make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[2]: Nothing to be done for `submake-errcodes'.
    make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/common'
    make -C ../../../src/backend generated-headers
    make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make -C catalog schemapg.h
    make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend/catalog'
    make[2]: `schemapg.h' is up to date.
    make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend/catalog'
    make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make -C ../../../contrib/spi
    make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/contrib/spi'
    make[1]: Nothing to be done for `all'.
    make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/contrib/spi'
    rm -rf ./testtablespace
    mkdir ./testtablespace
    rm -rf '/home/appusr/pg/postgresql-10.5'/tmp_install
    /usr/bin/mkdir -p '/home/appusr/pg/postgresql-10.5'/tmp_install/log
    make -C '../../..' DESTDIR='/home/appusr/pg/postgresql-10.5'/tmp_install install >'/home/appusr/pg/postgresql-10.5'/tmp_install/log/install.log 2>&1
    PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/bin:$PATH" LD_LIBRARY_PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/lib:$LD_LIBRARY_PATH" ../../../src/test/regress/pg_regress --temp-instance=./tmp_check --inputdir=. --bindir=     --dlpath=.  --schedule=./parallel_schedule  
    ============== creating temporary instance            ==============
    ============== initializing database system           ==============
    ============== starting postmaster                    ==============
    running on port 50853 with PID 80659
    ============== creating database "regression"         ==============
    CREATE DATABASE
    ALTER DATABASE
    ============== running regression test queries        ==============
    test tablespace               ... ok
    parallel group (20 tests):  text float4 name char int2 boolean varchar oid pg_lsn txid int4 uuid regproc int8 money bit float8 enum numeric rangetypes
         boolean                  ... ok
         char                     ... ok
         name                     ... ok
         varchar                  ... ok
         text                     ... ok
         int2                     ... ok
         int4                     ... ok
         int8                     ... ok
         oid                      ... ok
         float4                   ... ok
         float8                   ... ok
         bit                      ... ok
         numeric                  ... ok
         txid                     ... ok
         uuid                     ... ok
         enum                     ... ok
         money                    ... ok
         rangetypes               ... ok
         pg_lsn                   ... ok
         regproc                  ... ok
    test strings                  ... ok
    test numerology               ... ok
    parallel group (20 tests):  time lseg macaddr abstime polygon circle reltime line macaddr8 path timetz interval tinterval tstypes point inet date box timestamp timestamptz
         point                    ... ok
         lseg                     ... ok
         line                     ... ok
         box                      ... ok
         path                     ... ok
         polygon                  ... ok
         circle                   ... ok
         date                     ... ok
         time                     ... ok
         timetz                   ... ok
         timestamp                ... ok
         timestamptz              ... ok
         interval                 ... ok
         abstime                  ... ok
         reltime                  ... ok
         tinterval                ... ok
         inet                     ... ok
         macaddr                  ... ok
         macaddr8                 ... ok
         tstypes                  ... ok
    parallel group (9 tests):  expressions comments geometry horology type_sanity misc_sanity oidjoins opr_sanity regex
         geometry                 ... ok
         horology                 ... ok
         regex                    ... ok
         oidjoins                 ... ok
         type_sanity              ... ok
         opr_sanity               ... ok
         misc_sanity              ... ok
         comments                 ... ok
         expressions              ... ok
    test insert                   ... ok
    test insert_conflict          ... ok
    test create_function_1        ... ok
    test create_type              ... ok
    test create_table             ... ok
    test create_function_2        ... ok
    parallel group (3 tests):  copyselect copydml copy
         copy                     ... ok
         copyselect               ... ok
         copydml                  ... ok
    parallel group (2 tests):  create_operator create_misc
         create_misc              ... ok
         create_operator          ... ok
    parallel group (2 tests):  create_view create_index
         create_index             ... ok
         create_view              ... ok
    parallel group (14 tests):  create_cast create_aggregate create_function_3 roleattributes drop_if_exists create_am typed_table vacuum constraints create_table_like rolenames triggers inherit updatable_views
         create_aggregate         ... ok
         create_function_3        ... ok
         create_cast              ... ok
         constraints              ... ok
         triggers                 ... ok
         inherit                  ... ok
         create_table_like        ... ok
         typed_table              ... ok
         vacuum                   ... ok
         drop_if_exists           ... ok
         updatable_views          ... ok
         rolenames                ... ok
         roleattributes           ... ok
         create_am                ... ok
    test sanity_check             ... ok
    test errors                   ... ok
    test select                   ... ok
    parallel group (20 tests):  select_distinct_on select_distinct select_having case delete random select_implicit namespace update select_into btree_index prepared_xacts transactions portals hash_index subselect union arrays aggregates join
         select_into              ... ok
         select_distinct          ... ok
         select_distinct_on       ... ok
         select_implicit          ... ok
         select_having            ... ok
         subselect                ... ok
         union                    ... ok
         case                     ... ok
         join                     ... ok
         aggregates               ... ok
         transactions             ... ok
         random                   ... ok
         portals                  ... ok
         arrays                   ... ok
         btree_index              ... ok
         hash_index               ... ok
         update                   ... ok
         namespace                ... ok
         prepared_xacts           ... ok
         delete                   ... ok
    parallel group (17 tests):  init_privs drop_operator lock security_label password tablesample replica_identity object_address collate groupingsets spgist gin brin matview rowsecurity privileges gist
         brin                     ... ok
         gin                      ... ok
         gist                     ... ok
         spgist                   ... ok
         privileges               ... ok
         init_privs               ... ok
         security_label           ... ok
         collate                  ... ok
         matview                  ... ok
         lock                     ... ok
         replica_identity         ... ok
         rowsecurity              ... ok
         object_address           ... ok
         tablesample              ... ok
         groupingsets             ... ok
         drop_operator            ... ok
         password                 ... ok
    parallel group (11 tests):  dbsize alter_operator tidscan async misc_functions psql tsrf sysviews misc alter_generic stats_ext
         alter_generic            ... ok
         alter_operator           ... ok
         misc                     ... ok
         psql                     ... ok
         async                    ... ok
         dbsize                   ... ok
         misc_functions           ... ok
         sysviews                 ... ok
         tsrf                     ... ok
         tidscan                  ... ok
         stats_ext                ... ok
    parallel group (3 tests):  amutils psql_crosstab rules
         rules                    ... ok
         psql_crosstab            ... ok
         amutils                  ... ok
    test select_parallel          ... ok
    parallel group (2 tests):  subscription publication
         publication              ... ok
         subscription             ... ok
    parallel group (20 tests):  portals_p2 json_encoding combocid advisory_lock guc xmlmap tsdicts functional_deps equivclass json dependency select_views window tsearch jsonb bitmapops cluster indirect_toast foreign_key foreign_data
         select_views             ... ok
         portals_p2               ... ok
         foreign_key              ... ok
         cluster                  ... ok
         dependency               ... ok
         guc                      ... ok
         bitmapops                ... ok
         combocid                 ... ok
         tsearch                  ... ok
         tsdicts                  ... ok
         foreign_data             ... ok
         window                   ... ok
         xmlmap                   ... ok
         functional_deps          ... ok
         advisory_lock            ... ok
         json                     ... ok
         jsonb                    ... ok
         json_encoding            ... ok
         indirect_toast           ... ok
         equivclass               ... ok
    parallel group (19 tests):  conversion limit prepare plancache returning temp without_oid copy2 sequence polymorphism truncate with largeobject domain rangefuncs rowtypes xml alter_table plpgsql
         plancache                ... ok
         limit                    ... ok
         plpgsql                  ... ok
         copy2                    ... ok
         temp                     ... ok
         domain                   ... ok
         rangefuncs               ... ok
         prepare                  ... ok
         without_oid              ... ok
         conversion               ... ok
         truncate                 ... ok
         alter_table              ... ok
         sequence                 ... ok
         polymorphism             ... ok
         rowtypes                 ... ok
         returning                ... ok
         largeobject              ... ok
         with                     ... ok
         xml                      ... ok
    test identity                 ... ok
    test event_trigger            ... ok
    test stats                    ... ok
    ============== shutting down postmaster               ==============
    ============== removing temporary instance            ==============
    
    =======================
     All 178 tests passed.   /*这里是测试结果报告汇总,一共178个测试用例,全部通过*/
    =======================
    
    make: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
    

    解析:
    sql:里面存放测试用例的SQL文件
    expected:里面存放测试用例期望输出的结果

    pg_regress采用psql命令执行sql文件,将本次执行结果输出到result文件夹中
    然后对比result和expected的文件,结果与期望一致,则测试通过,否则测试失败。

    三、 isolation (隔离测试)

    首先,编译源码:
    与 regress(回归测试)的测试一样

    执行 isolation 测试工程代码

    [appusr@postgre postgresql-10.5]$ make -C src/test/isolation check
    make: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/isolation'
    make -C ../../../src/interfaces/libpq all
    make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/interfaces/libpq'
    make[1]: Nothing to be done for `all'.
    make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/interfaces/libpq'
    make -C ../../../src/port all
    make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/port'
    make -C ../backend submake-errcodes
    make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[2]: Nothing to be done for `submake-errcodes'.
    make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/port'
    make -C ../../../src/common all
    make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/common'
    make -C ../backend submake-errcodes
    make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[2]: Nothing to be done for `submake-errcodes'.
    make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/common'
    rm -rf '/home/appusr/pg/postgresql-10.5'/tmp_install
    /usr/bin/mkdir -p '/home/appusr/pg/postgresql-10.5'/tmp_install/log
    make -C '../../..' DESTDIR='/home/appusr/pg/postgresql-10.5'/tmp_install install >'/home/appusr/pg/postgresql-10.5'/tmp_install/log/install.log 2>&1
    PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/bin:$PATH" LD_LIBRARY_PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/lib:$LD_LIBRARY_PATH" ../../../src/test/isolation/pg_isolation_regress --temp-instance=./tmp_check_iso --inputdir=. --outputdir=output_iso --bindir=     --schedule=./isolation_schedule
    ============== creating temporary instance            ==============
    ============== initializing database system           ==============
    ============== starting postmaster                    ==============
    running on port 50853 with PID 83142
    ============== creating database "isolation_regression" ==============
    CREATE DATABASE
    ALTER DATABASE
    ============== running regression test queries        ==============
    test read-only-anomaly        ... ok
    test read-only-anomaly-2      ... ok
    test read-only-anomaly-3      ... ok
    test read-write-unique        ... ok
    test read-write-unique-2      ... ok
    test read-write-unique-3      ... ok
    test read-write-unique-4      ... ok
    test simple-write-skew        ... ok
    test receipt-report           ... ok
    test temporal-range-integrity ... ok
    test project-manager          ... ok
    test classroom-scheduling     ... ok
    test total-cash               ... ok
    test referential-integrity    ... ok
    test ri-trigger               ... ok
    test partial-index            ... ok
    test two-ids                  ... ok
    test multiple-row-versions    ... ok
    test index-only-scan          ... ok
    test deadlock-simple          ... ok
    test deadlock-hard            ... ok
    test deadlock-soft            ... ok
    test deadlock-soft-2          ... ok
    test fk-contention            ... ok
    test fk-deadlock              ... ok
    test fk-deadlock2             ... ok
    test eval-plan-qual           ... ok
    test lock-update-delete       ... ok
    test lock-update-traversal    ... ok
    test insert-conflict-do-nothing ... ok
    test insert-conflict-do-nothing-2 ... ok
    test insert-conflict-do-update ... ok
    test insert-conflict-do-update-2 ... ok
    test insert-conflict-do-update-3 ... ok
    test insert-conflict-toast    ... ok
    test delete-abort-savept      ... ok
    test delete-abort-savept-2    ... ok
    test aborted-keyrevoke        ... ok
    test multixact-no-deadlock    ... ok
    test multixact-no-forget      ... ok
    test lock-committed-update    ... ok
    test lock-committed-keyupdate ... ok
    test update-locked-tuple      ... ok
    test propagate-lock-delete    ... ok
    test tuplelock-conflict       ... ok
    test tuplelock-update         ... ok
    test freeze-the-dead          ... ok
    test nowait                   ... ok
    test nowait-2                 ... ok
    test nowait-3                 ... ok
    test nowait-4                 ... ok
    test nowait-5                 ... ok
    test skip-locked              ... ok
    test skip-locked-2            ... ok
    test skip-locked-3            ... ok
    test skip-locked-4            ... ok
    test drop-index-concurrently-1 ... ok
    test multiple-cic             ... ok
    test alter-table-1            ... ok
    test alter-table-2            ... ok
    test alter-table-3            ... ok
    test alter-table-4            ... ok
    test create-trigger           ... ok
    test sequence-ddl             ... ok
    test async-notify             ... ok
    test vacuum-reltuples         ... ok
    test timeouts                 ... ok
    ============== shutting down postmaster               ==============
    ============== removing temporary instance            ==============
    
    ======================
     All 67 tests passed.   /*这里是测试结果报告汇总,一共67个测试用例,全部通过*/
    ======================
    
    make: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/isolation'
    

    解析:
    sql:里面存放测试用例的SQL文件
    expected:里面存放测试用例期望输出的结果

    pg_regress采用psql命令执行sql文件,将本次执行结果输出到result文件夹中
    然后对比result和expected的文件,结果与期望一致,则测试通过,否则测试失败。

    四、 modules(模块测试)

    首先,编译源码:
    与 regress(回归测试)的测试一样

    测试的模块有:

    brin ——
    commit_ts —— 事务提交
    dummy_seclabel ——
    snapshot_too_old —— 快照太旧
    test_ddl_deparse ——
    test_extensions —— extension扩展模块
    test_parser —— parser语法分析模块
    test_pg_dump —— pg_dump
    test_rls_hooks ——
    test_shm_mq ——
    worker_spi SPI模块 ——

    执行 modules 测试工程代码

    [appusr@postgre postgresql-10.5]$ make -C src/test/modules check
    make: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/modules'
    rm -rf '/home/appusr/pg/postgresql-10.5'/tmp_install
    /usr/bin/mkdir -p '/home/appusr/pg/postgresql-10.5'/tmp_install/log
    make -C '../../..' DESTDIR='/home/appusr/pg/postgresql-10.5'/tmp_install install >'/home/appusr/pg/postgresql-10.5'/tmp_install/log/install.log 2>&1
    make -C brin check
    make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/modules/brin'
    for extra in contrib/pageinspect; do make -C '../../../..'/$extra DESTDIR='/home/appusr/pg/postgresql-10.5'/tmp_install install >>'/home/appusr/pg/postgresql-10.5'/tmp_install/log/install.log || exit; done
    make -C ../../../../src/test/isolation all
    make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/isolation'
    make -C ../../../src/interfaces/libpq all
    make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/interfaces/libpq'
    make[3]: Nothing to be done for `all'.
    make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/interfaces/libpq'
    make -C ../../../src/port all
    make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/port'
    make -C ../backend submake-errcodes
    make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[4]: Nothing to be done for `submake-errcodes'.
    make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/port'
    make -C ../../../src/common all
    make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/common'
    make -C ../backend submake-errcodes
    make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[4]: Nothing to be done for `submake-errcodes'.
    make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/common'
    make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/isolation'
    /usr/bin/mkdir -p isolation_output
    PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/bin:$PATH" LD_LIBRARY_PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/lib:$LD_LIBRARY_PATH" ../../../../src/test/isolation/pg_isolation_regress --temp-instance=./tmp_check_iso --inputdir=. --outputdir=output_iso --bindir=     \
        --outputdir=./isolation_output \
        summarization-and-inprogress-insertion
    ============== creating temporary instance            ==============
    ============== initializing database system           ==============
    ============== starting postmaster                    ==============
    running on port 50853 with PID 84960
    ============== creating database "isolation_regression" ==============
    CREATE DATABASE
    ALTER DATABASE
    ============== running regression test queries        ==============
    test summarization-and-inprogress-insertion ... ok
    ============== shutting down postmaster               ==============
    ============== removing temporary instance            ==============
    
    =====================
     All 1 tests passed. 
    =====================
    
    TAP tests not enabled
    make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/modules/brin'
    make -C commit_ts check
    make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/modules/commit_ts'
    make -C ../../../../src/test/regress pg_regress
    make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
    make -C ../../../src/port all
    make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/port'
    make -C ../backend submake-errcodes
    make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[4]: Nothing to be done for `submake-errcodes'.
    make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/port'
    make -C ../../../src/common all
    make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/common'
    make -C ../backend submake-errcodes
    make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[4]: Nothing to be done for `submake-errcodes'.
    make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/common'
    make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
    for extra in src/test/modules/commit_ts; do make -C '../../../..'/$extra DESTDIR='/home/appusr/pg/postgresql-10.5'/tmp_install install >>'/home/appusr/pg/postgresql-10.5'/tmp_install/log/install.log || exit; done
    TAP tests not enabled
    PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/bin:$PATH" LD_LIBRARY_PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/lib:$LD_LIBRARY_PATH" ../../../../src/test/regress/pg_regress --temp-instance=./tmp_check --inputdir=. --bindir=     --temp-config=../../../../src/test/modules/commit_ts/commit_ts.conf --dbname=contrib_regression commit_timestamp
    ============== creating temporary instance            ==============
    ============== initializing database system           ==============
    ============== starting postmaster                    ==============
    running on port 50853 with PID 85011
    ============== creating database "contrib_regression" ==============
    CREATE DATABASE
    ALTER DATABASE
    ============== running regression test queries        ==============
    test commit_timestamp         ... ok
    ============== shutting down postmaster               ==============
    ============== removing temporary instance            ==============
    
    =====================
     All 1 tests passed. 
    =====================
    
    make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/modules/commit_ts'
    make -C dummy_seclabel check
    make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/modules/dummy_seclabel'
    make -C ../../../../src/test/regress pg_regress
    make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
    make -C ../../../src/port all
    make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/port'
    make -C ../backend submake-errcodes
    make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[4]: Nothing to be done for `submake-errcodes'.
    make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/port'
    make -C ../../../src/common all
    make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/common'
    make -C ../backend submake-errcodes
    make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[4]: Nothing to be done for `submake-errcodes'.
    make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/common'
    make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
    for extra in src/test/modules/dummy_seclabel; do make -C '../../../..'/$extra DESTDIR='/home/appusr/pg/postgresql-10.5'/tmp_install install >>'/home/appusr/pg/postgresql-10.5'/tmp_install/log/install.log || exit; done
    PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/bin:$PATH" LD_LIBRARY_PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/lib:$LD_LIBRARY_PATH" ../../../../src/test/regress/pg_regress --temp-instance=./tmp_check --inputdir=. --bindir=     --dbname=contrib_regression dummy_seclabel
    ============== creating temporary instance            ==============
    ============== initializing database system           ==============
    ============== starting postmaster                    ==============
    running on port 50853 with PID 85069
    ============== creating database "contrib_regression" ==============
    CREATE DATABASE
    ALTER DATABASE
    ============== running regression test queries        ==============
    test dummy_seclabel           ... ok
    ============== shutting down postmaster               ==============
    ============== removing temporary instance            ==============
    
    =====================
     All 1 tests passed. 
    =====================
    
    make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/modules/dummy_seclabel'
    make -C snapshot_too_old check
    make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/modules/snapshot_too_old'
    for extra in src/test/modules/snapshot_too_old; do make -C '../../../..'/$extra DESTDIR='/home/appusr/pg/postgresql-10.5'/tmp_install install >>'/home/appusr/pg/postgresql-10.5'/tmp_install/log/install.log || exit; done
    make -C ../../../../src/test/modules/snapshot_too_old
    make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/modules/snapshot_too_old'
    make[2]: Nothing to be done for `all'.
    make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/modules/snapshot_too_old'
    make -C ../../../../src/test/isolation all
    make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/isolation'
    make -C ../../../src/interfaces/libpq all
    make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/interfaces/libpq'
    make[3]: Nothing to be done for `all'.
    make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/interfaces/libpq'
    make -C ../../../src/port all
    make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/port'
    make -C ../backend submake-errcodes
    make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[4]: Nothing to be done for `submake-errcodes'.
    make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/port'
    make -C ../../../src/common all
    make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/common'
    make -C ../backend submake-errcodes
    make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[4]: Nothing to be done for `submake-errcodes'.
    make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/common'
    make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/isolation'
    PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/bin:$PATH" LD_LIBRARY_PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/lib:$LD_LIBRARY_PATH" ../../../../src/test/isolation/pg_isolation_regress --temp-instance=./tmp_check_iso --inputdir=. --outputdir=output_iso --bindir=     \
        --temp-config ../../../../src/test/modules/snapshot_too_old/sto.conf \
        sto_using_cursor sto_using_select sto_using_hash_index
    ============== creating temporary instance            ==============
    ============== initializing database system           ==============
    ============== starting postmaster                    ==============
    running on port 50853 with PID 85117
    ============== creating database "isolation_regression" ==============
    CREATE DATABASE
    ALTER DATABASE
    ============== running regression test queries        ==============
    test sto_using_cursor         ... ok
    test sto_using_select         ... ok
    test sto_using_hash_index     ... ok
    ============== shutting down postmaster               ==============
    ============== removing temporary instance            ==============
    
    =====================
     All 3 tests passed. 
    =====================
    
    make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/modules/snapshot_too_old'
    make -C test_ddl_deparse check
    make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/modules/test_ddl_deparse'
    make -C ../../../../src/test/regress pg_regress
    make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
    make -C ../../../src/port all
    make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/port'
    make -C ../backend submake-errcodes
    make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[4]: Nothing to be done for `submake-errcodes'.
    make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/port'
    make -C ../../../src/common all
    make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/common'
    make -C ../backend submake-errcodes
    make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[4]: Nothing to be done for `submake-errcodes'.
    make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/common'
    make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
    for extra in contrib/pg_stat_statements src/test/modules/test_ddl_deparse; do make -C '../../../..'/$extra DESTDIR='/home/appusr/pg/postgresql-10.5'/tmp_install install >>'/home/appusr/pg/postgresql-10.5'/tmp_install/log/install.log || exit; done
    PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/bin:$PATH" LD_LIBRARY_PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/lib:$LD_LIBRARY_PATH" ../../../../src/test/regress/pg_regress --temp-instance=./tmp_check --inputdir=. --bindir=     --dbname=contrib_regression test_ddl_deparse create_extension create_schema create_type create_conversion create_domain create_sequence_1 create_table create_transform alter_table create_view create_trigger create_rule comment_on alter_function alter_sequence alter_ts_config alter_type_enum opfamily defprivs matviews
    ============== creating temporary instance            ==============
    ============== initializing database system           ==============
    ============== starting postmaster                    ==============
    running on port 50853 with PID 85305
    ============== creating database "contrib_regression" ==============
    CREATE DATABASE
    ALTER DATABASE
    ============== running regression test queries        ==============
    test test_ddl_deparse         ... ok
    test create_extension         ... ok
    test create_schema            ... ok
    test create_type              ... ok
    test create_conversion        ... ok
    test create_domain            ... ok
    test create_sequence_1        ... ok
    test create_table             ... ok
    test create_transform         ... ok
    test alter_table              ... ok
    test create_view              ... ok
    test create_trigger           ... ok
    test create_rule              ... ok
    test comment_on               ... ok
    test alter_function           ... ok
    test alter_sequence           ... ok
    test alter_ts_config          ... ok
    test alter_type_enum          ... ok
    test opfamily                 ... ok
    test defprivs                 ... ok
    test matviews                 ... ok
    ============== shutting down postmaster               ==============
    ============== removing temporary instance            ==============
    
    ======================
     All 21 tests passed. 
    ======================
    
    make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/modules/test_ddl_deparse'
    make -C test_extensions check
    make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/modules/test_extensions'
    make -C ../../../../src/test/regress pg_regress
    make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
    make -C ../../../src/port all
    make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/port'
    make -C ../backend submake-errcodes
    make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[4]: Nothing to be done for `submake-errcodes'.
    make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/port'
    make -C ../../../src/common all
    make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/common'
    make -C ../backend submake-errcodes
    make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[4]: Nothing to be done for `submake-errcodes'.
    make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/common'
    make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
    for extra in src/test/modules/test_extensions; do make -C '../../../..'/$extra DESTDIR='/home/appusr/pg/postgresql-10.5'/tmp_install install >>'/home/appusr/pg/postgresql-10.5'/tmp_install/log/install.log || exit; done
    PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/bin:$PATH" LD_LIBRARY_PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/lib:$LD_LIBRARY_PATH" ../../../../src/test/regress/pg_regress --temp-instance=./tmp_check --inputdir=. --bindir=     --dbname=contrib_regression test_extensions test_extdepend
    ============== creating temporary instance            ==============
    ============== initializing database system           ==============
    ============== starting postmaster                    ==============
    running on port 50853 with PID 85437
    ============== creating database "contrib_regression" ==============
    CREATE DATABASE
    ALTER DATABASE
    ============== running regression test queries        ==============
    test test_extensions          ... ok
    test test_extdepend           ... ok
    ============== shutting down postmaster               ==============
    ============== removing temporary instance            ==============
    
    =====================
     All 2 tests passed. 
    =====================
    
    make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/modules/test_extensions'
    make -C test_parser check
    make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/modules/test_parser'
    make -C ../../../../src/test/regress pg_regress
    make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
    make -C ../../../src/port all
    make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/port'
    make -C ../backend submake-errcodes
    make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[4]: Nothing to be done for `submake-errcodes'.
    make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/port'
    make -C ../../../src/common all
    make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/common'
    make -C ../backend submake-errcodes
    make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[4]: Nothing to be done for `submake-errcodes'.
    make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/common'
    make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
    for extra in src/test/modules/test_parser; do make -C '../../../..'/$extra DESTDIR='/home/appusr/pg/postgresql-10.5'/tmp_install install >>'/home/appusr/pg/postgresql-10.5'/tmp_install/log/install.log || exit; done
    PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/bin:$PATH" LD_LIBRARY_PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/lib:$LD_LIBRARY_PATH" ../../../../src/test/regress/pg_regress --temp-instance=./tmp_check --inputdir=. --bindir=     --dbname=contrib_regression test_parser
    ============== creating temporary instance            ==============
    ============== initializing database system           ==============
    ============== starting postmaster                    ==============
    running on port 50853 with PID 85500
    ============== creating database "contrib_regression" ==============
    CREATE DATABASE
    ALTER DATABASE
    ============== running regression test queries        ==============
    test test_parser              ... ok
    ============== shutting down postmaster               ==============
    ============== removing temporary instance            ==============
    
    =====================
     All 1 tests passed. 
    =====================
    
    make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/modules/test_parser'
    make -C test_pg_dump check
    make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/modules/test_pg_dump'
    make -C ../../../../src/test/regress pg_regress
    make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
    make -C ../../../src/port all
    make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/port'
    make -C ../backend submake-errcodes
    make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[4]: Nothing to be done for `submake-errcodes'.
    make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/port'
    make -C ../../../src/common all
    make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/common'
    make -C ../backend submake-errcodes
    make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[4]: Nothing to be done for `submake-errcodes'.
    make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/common'
    make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
    for extra in src/test/modules/test_pg_dump; do make -C '../../../..'/$extra DESTDIR='/home/appusr/pg/postgresql-10.5'/tmp_install install >>'/home/appusr/pg/postgresql-10.5'/tmp_install/log/install.log || exit; done
    TAP tests not enabled
    PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/bin:$PATH" LD_LIBRARY_PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/lib:$LD_LIBRARY_PATH" ../../../../src/test/regress/pg_regress --temp-instance=./tmp_check --inputdir=. --bindir=     --dbname=contrib_regression test_pg_dump
    ============== creating temporary instance            ==============
    ============== initializing database system           ==============
    ============== starting postmaster                    ==============
    running on port 50853 with PID 85550
    ============== creating database "contrib_regression" ==============
    CREATE DATABASE
    ALTER DATABASE
    ============== running regression test queries        ==============
    test test_pg_dump             ... ok
    ============== shutting down postmaster               ==============
    ============== removing temporary instance            ==============
    
    =====================
     All 1 tests passed. 
    =====================
    
    make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/modules/test_pg_dump'
    make -C test_rls_hooks check
    make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/modules/test_rls_hooks'
    make -C ../../../../src/test/regress pg_regress
    make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
    make -C ../../../src/port all
    make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/port'
    make -C ../backend submake-errcodes
    make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[4]: Nothing to be done for `submake-errcodes'.
    make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/port'
    make -C ../../../src/common all
    make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/common'
    make -C ../backend submake-errcodes
    make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[4]: Nothing to be done for `submake-errcodes'.
    make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/common'
    make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
    for extra in src/test/modules/test_rls_hooks; do make -C '../../../..'/$extra DESTDIR='/home/appusr/pg/postgresql-10.5'/tmp_install install >>'/home/appusr/pg/postgresql-10.5'/tmp_install/log/install.log || exit; done
    PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/bin:$PATH" LD_LIBRARY_PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/lib:$LD_LIBRARY_PATH" ../../../../src/test/regress/pg_regress --temp-instance=./tmp_check --inputdir=. --bindir=     --temp-config=../../../../src/test/modules/test_rls_hooks/rls_hooks.conf --dbname=contrib_regression test_rls_hooks
    ============== creating temporary instance            ==============
    ============== initializing database system           ==============
    ============== starting postmaster                    ==============
    running on port 50853 with PID 85606
    ============== creating database "contrib_regression" ==============
    CREATE DATABASE
    ALTER DATABASE
    ============== running regression test queries        ==============
    test test_rls_hooks           ... ok
    ============== shutting down postmaster               ==============
    ============== removing temporary instance            ==============
    
    =====================
     All 1 tests passed. 
    =====================
    
    make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/modules/test_rls_hooks'
    make -C test_shm_mq check
    make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/modules/test_shm_mq'
    make -C ../../../../src/test/regress pg_regress
    make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
    make -C ../../../src/port all
    make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/port'
    make -C ../backend submake-errcodes
    make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[4]: Nothing to be done for `submake-errcodes'.
    make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/port'
    make -C ../../../src/common all
    make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/common'
    make -C ../backend submake-errcodes
    make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[4]: Nothing to be done for `submake-errcodes'.
    make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
    make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/common'
    make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
    for extra in src/test/modules/test_shm_mq; do make -C '../../../..'/$extra DESTDIR='/home/appusr/pg/postgresql-10.5'/tmp_install install >>'/home/appusr/pg/postgresql-10.5'/tmp_install/log/install.log || exit; done
    PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/bin:$PATH" LD_LIBRARY_PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/lib:$LD_LIBRARY_PATH" ../../../../src/test/regress/pg_regress --temp-instance=./tmp_check --inputdir=. --bindir=     --dbname=contrib_regression test_shm_mq
    ============== creating temporary instance            ==============
    ============== initializing database system           ==============
    ============== starting postmaster                    ==============
    running on port 50853 with PID 85670
    ============== creating database "contrib_regression" ==============
    CREATE DATABASE
    ALTER DATABASE
    ============== running regression test queries        ==============
    test test_shm_mq              ... ok
    ============== shutting down postmaster               ==============
    ============== removing temporary instance            ==============
    
    =====================
     All 1 tests passed. 
    =====================
    
    make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/modules/test_shm_mq'
    make -C worker_spi check
    make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/modules/worker_spi'
    make[1]: Nothing to be done for `check'.
    make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/modules/worker_spi'
    make: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/modules'
    

    每个模块下面均有:
    sql:里面存放测试用例的SQL文件
    expected:里面存放测试用例期望输出的结果

    pg_regress采用psql命令执行sql文件,将本次执行结果输出到result文件夹中
    然后对比result和expected的文件,结果与期望一致,则测试通过,否则测试失败。

    五、 coverage(测试代码覆盖率)

    在postgres的编译选项中,有一个特别的选项:

    --enable-coverage build with coverage testing instrumentation

    如果使用GCC,所有的程序和库连同代码覆盖测试设置一起被编译。 在运行时,它们与代码覆盖率度量在编译目录下生成文件。

    使用的工具有gcov、lcov:
    gcov:一个可用于C/C++的代码覆盖工具,是gcc的内建工具。
    lcov:用来解析程序gcov的输出结果,最终输出成html格式的报告。

    缺少lcov组件:源码安装

    [root@postgre appusr]# wget https://jaist.dl.sourceforge.net/project/ltp/Coverage%20Analysis/LCOV-1.13/lcov-1.13.tar.gz
    
    [root@postgre appusr]# tar -zxvf lcov-1.13.tar.gz 
    
    [root@postgre appusr]# cd lcov-1.13/
    [root@postgre lcov-1.13]# make install
    

    配置postgres编译选项

    [appusr@postgre postgresql-10.5]$ export PGHOME=/home/appusr/PostgreSQL/pgsql-10
    [appusr@postgre postgresql-10.5]$ ./configure --enable-rpath --prefix=$PGHOME --includedir=$PGHOME/include --mandir=$PGHOME/share/man --datadir=$PGHOME/share --with-icu --with-perl --with-python --with-tcl --with-tclconfig=/usr/lib64 --with-openssl --with-pam --with-gssapi --with-includes=/usr/include --with-libraries=/usr/lib64 --enable-nls --enable-dtrace --with-uuid=e2fs --with-libxml --with-libxslt --with-ldap --with-selinux --with-systemd --docdir=$PGHOME/doc --htmldir=$PGHOME/doc/html   --enable-debug  --enable-coverage
    
    [appusr@postgre postgresql-10.5]$ make
    

    测试代码覆盖率,并输出报告

    [appusr@postgre postgresql-10.5]$ make check
    [appusr@postgre postgresql-10.5]$ make coverage-html
    make -C doc coverage
    make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/doc'
    rm -f *.gcov .*.gcov
    make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/doc'
    make -C src coverage
    make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src'
    make -C common coverage
    make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/common'
    rm -f *.gcov .*.gcov
    /usr/local/bin/lcov -d . -c -o lcov.info  --gcov-tool /usr/bin/gcov
    Capturing coverage data from .
    Found gcov version: 4.8.5
    Scanning . for .gcda files ...
    Found 30 data files in .
    Processing pgfnames_srv.gcda
    Processing sha2_openssl_srv.gcda
    Processing wait_error_srv.gcda
    Processing username_srv.gcda
    Processing unicode_norm_srv.gcda
    Processing string_srv.gcda
    Processing scram-common_srv.gcda
    Processing saslprep_srv.gcda
    Processing rmtree_srv.gcda
    Processing relpath_srv.gcda
    Processing psprintf_srv.gcda
    Processing pg_lzcompress_srv.gcda
    Processing md5_srv.gcda
    Processing keywords_srv.gcda
    Processing ip_srv.gcda
    Processing exec_srv.gcda
    Processing controldata_utils_srv.gcda
    Processing config_info_srv.gcda
    Processing base64_srv.gcda
    Processing restricted_token.gcda
    Processing file_utils.gcda
    Processing fe_memutils.gcda
    Processing wait_error.gcda
    Processing username.gcda
    Processing rmtree.gcda
    Processing psprintf.gcda
    Processing pgfnames.gcda
    Processing keywords.gcda
    Processing exec.gcda
    Processing controldata_utils.gcda
    Finished .info-file creation
    ……
    
    Processing file src/bin/psql/help.c
    Processing file src/bin/psql/copy.c
    Processing file src/bin/psql/startup.c
    Processing file src/bin/psql/tab-complete.c
    Processing file src/bin/psql/sql_help.c
    Processing file src/bin/psql/variables.c
    Processing file src/bin/psql/large_obj.c
    Processing file src/bin/psql/mainloop.c
    Processing file src/bin/psql/command.c
    Processing file src/common/rmtree.c
    Processing file src/common/pg_lzcompress.c
    Processing file src/common/controldata_utils.c
    Processing file src/common/unicode_norm.c
    Processing file src/common/ip.c
    Processing file src/common/string.c
    Processing file src/common/username.c
    Processing file src/common/relpath.c
    Processing file src/common/config_info.c
    Processing file src/common/file_utils.c
    Processing file src/common/md5.c
    Processing file src/common/keywords.c
    Processing file src/common/restricted_token.c
    Processing file src/common/fe_memutils.c
    Processing file src/common/psprintf.c
    Processing file src/common/base64.c
    Processing file src/common/sha2_openssl.c
    Processing file src/common/saslprep.c
    Processing file src/common/pgfnames.c
    Processing file src/common/exec.c
    Processing file src/common/wait_error.c
    Processing file src/common/scram-common.c
    Processing file src/fe_utils/mbprint.c
    Processing file src/fe_utils/string_utils.c
    Processing file src/fe_utils/psqlscan.l
    Processing file src/fe_utils/print.c
    Processing file src/fe_utils/psqlscan.c
    Processing file src/include/postgres.h
    Processing file src/include/pgstat.h
    Processing file src/include/access/gin_private.h
    Processing file src/include/common/int128.h
    Processing file src/include/executor/executor.h
    Processing file src/include/lib/simplehash.h
    Processing file src/include/lib/ilist.h
    Processing file src/include/nodes/pg_list.h
    Processing file src/include/port/atomics.h
    Processing file src/include/port/atomics/generic-gcc.h
    Processing file src/include/port/atomics/arch-x86.h
    Processing file src/include/port/atomics/generic.h
    Processing file src/include/replication/worker_internal.h
    Processing file src/include/replication/walreceiver.h
    Processing file src/include/storage/bufmgr.h
    Processing file src/include/storage/s_lock.h
    Processing file src/include/storage/checksum_impl.h
    Processing file src/include/storage/proclist.h
    Processing file src/include/utils/palloc.h
    Processing file src/include/utils/memutils.h
    Processing file src/include/utils/sortsupport.h
    Processing file src/include/utils/arrayaccess.h
    Processing file src/include/utils/rel.h
    Processing file src/include/utils/hashutils.h
    Processing file src/interfaces/libpq/chklocale.c
    Processing file src/interfaces/libpq/ip.c
    Processing file src/interfaces/libpq/thread.c
    Processing file src/interfaces/libpq/base64.c
    Processing file src/interfaces/libpq/fe-exec.c
    Processing file src/interfaces/libpq/fe-secure-openssl.c
    Processing file src/interfaces/libpq/fe-protocol2.c
    Processing file src/interfaces/libpq/md5.c
    Processing file src/interfaces/libpq/fe-auth-scram.c
    Processing file src/interfaces/libpq/encnames.c
    Processing file src/interfaces/libpq/fe-print.c
    Processing file src/interfaces/libpq/unicode_norm.c
    Processing file src/interfaces/libpq/scram-common.c
    Processing file src/interfaces/libpq/wchar.c
    Processing file src/interfaces/libpq/fe-connect.c
    Processing file src/interfaces/libpq/pgstrcasecmp.c
    Processing file src/interfaces/libpq/sha2_openssl.c
    Processing file src/interfaces/libpq/fe-auth.c
    Processing file src/interfaces/libpq/fe-lobj.c
    Processing file src/interfaces/libpq/fe-secure.c
    Processing file src/interfaces/libpq/pqsignal.c
    Processing file src/interfaces/libpq/fe-protocol3.c
    Processing file src/interfaces/libpq/inet_net_ntop.c
    Processing file src/interfaces/libpq/strlcpy.c
    Processing file src/interfaces/libpq/noblock.c
    Processing file src/interfaces/libpq/getpeereid.c
    Processing file src/interfaces/libpq/libpq-events.c
    Processing file src/interfaces/libpq/pqexpbuffer.c
    Processing file src/interfaces/libpq/pg_strong_random.c
    Processing file src/interfaces/libpq/saslprep.c
    Processing file src/interfaces/libpq/fe-misc.c
    Processing file src/pl/plpgsql/src/pl_exec.c
    Processing file src/pl/plpgsql/src/pl_gram.c
    Processing file src/pl/plpgsql/src/pl_comp.c
    Processing file src/pl/plpgsql/src/pl_handler.c
    Processing file src/pl/plpgsql/src/pl_scanner.c
    Processing file src/pl/plpgsql/src/pl_funcs.c
    Processing file src/pl/plpgsql/src/pl_gram.y
    Processing file src/port/pg_crc32c_choose.c
    Processing file src/port/strlcat.c
    Processing file src/port/pgstrcasecmp.c
    Processing file src/port/fls.c
    Processing file src/port/qsort.c
    Processing file src/port/getpeereid.c
    Processing file src/port/chklocale.c
    Processing file src/port/pgmkdirp.c
    Processing file src/port/sprompt.c
    Processing file src/port/pg_strong_random.c
    Processing file src/port/noblock.c
    Processing file src/port/erand48.c
    Processing file src/port/pgcheckdir.c
    Processing file src/port/path.c
    Processing file src/port/pg_crc32c_sb8.c
    Processing file src/port/inet_net_ntop.c
    Processing file src/port/tar.c
    Processing file src/port/strlcpy.c
    Processing file src/port/pqsignal.c
    Processing file src/port/qsort_arg.c
    Processing file src/port/thread.c
    Processing file src/port/quotes.c
    Processing file src/port/pgsleep.c
    Processing file src/port/pg_crc32c_sse42.c
    Processing file src/test/regress/regress.c
    Processing file src/test/regress/pg_regress.c
    Processing file src/test/regress/pg_regress_main.c
    Processing file src/timezone/strftime.c
    Processing file src/timezone/pgtz.c
    Processing file src/timezone/localtime.c
    Processing file src/timezone/zic.c
    Processing file /usr/include/arpa/inet.h
    Processing file /usr/lib/gcc/x86_64-redhat-linux/4.8.5/include/cpuid.h
    Processing file /usr/lib/gcc/x86_64-redhat-linux/4.8.5/include/smmintrin.h
    Writing directory view page.
    Overall coverage rate:
      lines......: 64.8% (198834 of 306722 lines)
      functions..: 71.7% (11840 of 16503 functions)
    

    测试报告:


    LCOV - PostgreSQL.png

    错误处理

    [appusr@postgre postgresql-10.5]$ make coverage-html
    make -C doc coverage
    make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/doc'
    rm -f *.gcov .*.gcov
    make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/doc'
    make -C src coverage
    make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src'
    make -C common coverage
    make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/common'
    rm -f *.gcov .*.gcov
    /usr/local/bin/lcov -d . -c -o lcov.info  --gcov-tool /usr/bin/gcov
    Capturing coverage data from .
    Can't locate Digest/MD5.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/local/bin/geninfo line 57.
    BEGIN failed--compilation aborted at /usr/local/bin/geninfo line 57.
    make[2]: *** [lcov.info] Error 2
    make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/common'
    make[1]: *** [coverage-common-recurse] Error 2
    make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src'
    make: *** [coverage-src-recurse] Error 2
    

    原因是:缺少perl-Digest-MD5包, 安装perl-Digest-MD5即可解决。

    # yum -y install perl-Digest-MD5
    

    六、内存检测(未完成,后续补上)

    利用 valgrind 来进行内存检测
    gprof 和 oprofile 进行性能分析

    相关文章

      网友评论

          本文标题:Postgres源码测试

          本文链接:https://www.haomeiwen.com/subject/frcwoftx.html