You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PostgreSQL回归测试中测试自定义类型的send与receive函数

验证PostgreSQL自定义类型send/receive函数的测试方案

一、编写回归测试用例

1. 基础功能验证

  • 测试序列化反序列化往返一致性:
    -- 验证值经过序列化再反序列化后与原内容一致
    SELECT (mytype 'my_value')::text::mytype = mytype 'my_value' AS roundtrip_ok;
    -- 查看send函数输出的字节流(转为十六进制文本)
    SELECT encode(mytype_send(mytype 'my_value'), 'hex') AS send_output;
    -- 验证receive函数能正确解析send函数输出的字节流
    SELECT mytype_receive(decode(encode(mytype_send(mytype 'my_value'), 'hex'), 'hex')) AS receive_result;
    
  • 边界值与特殊场景测试:
    -- 验证空值处理逻辑
    SELECT mytype_send(NULL) IS NULL AS null_send_ok;
    SELECT mytype_receive(NULL) IS NULL AS null_receive_ok;
    -- 验证类型极值的往返一致性(根据自定义类型的实际范围调整值)
    SELECT (mytype 'max_valid_value')::text::mytype = mytype 'max_valid_value' AS max_roundtrip_ok;
    SELECT (mytype 'min_valid_value')::text::mytype = mytype 'min_valid_value' AS min_roundtrip_ok;
    

2. 跨传输场景验证

  • 通过跨会话连接(如dblink)验证字节流的跨实例解析能力:
    -- 前提是已安装dblink扩展
    SELECT dblink_connect('test_link', 'dbname=your_target_db');
    -- 远程查询自定义类型值,验证本地能正确接收解析
    SELECT * FROM dblink('test_link', 'SELECT mytype ''cross_session_test''') AS t(val mytype);
    SELECT dblink_disconnect('test_link');
    

3. 集成到官方回归测试流程

  • 将测试用例写入独立的.sql文件,放到PostgreSQL源码的src/test/regress/sql/目录下;
  • 对应编写预期结果文件(同名.out),放到src/test/regress/expected/目录;
  • 执行make check即可自动运行该测试,与官方测试流程同步。

二、确保函数被覆盖率测试覆盖

1. 开启编译期覆盖率统计

  • 编译PostgreSQL(或你的自定义扩展)时,添加覆盖率相关编译参数:
    ./configure --enable-coverage CFLAGS="-O0 -g"
    make clean && make
    

2. 触发函数调用

  • 执行之前编写的回归测试用例,或运行完整的make check,确保mytype_send和mytype_receive被实际调用。

3. 生成并查看覆盖率报告

  • 使用gcov生成函数级覆盖率数据:
    cd path/to/your/mytype/source
    gcov -b mytype.c
    
  • 查看生成的.gcov文件,检查两个函数的代码行、分支是否被完全覆盖。

4. 补全测试覆盖遗漏分支

  • 如果报告显示有未覆盖的分支(比如错误处理逻辑),补充对应测试用例:
    -- 测试receive函数对非法字节流的错误处理
    BEGIN;
    SELECT mytype_receive(decode('invalid_hex_string', 'hex'));
    ROLLBACK; -- 预期会抛出错误,以此触发错误处理分支的执行
    

内容的提问来源于stack exchange,提问作者Bobi.Liu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 21:03:29