当前位置: 首页 > news >正文

opengauss 的回归测试

目录

一、回归测试说明

二、单独执行测试用例(开发调试)


一、回归测试说明

opengauss/postgresql 的回归测试,通过执行SQL比较输出打印,判断代码修改是否改变了其它功能逻辑。

OG的回归测试大体上和PG类似,主要是通过pg_regress执行,这是个C语言编写的可执行程序。它执行的测试流程是:安装、初始化、启动数据库实例,用gsql/psql连接,跑测试脚本,比较测试结果(调用smartmatch.pl),这是工作全部是pg_regress做的。和我以前接触的trafodion相比,pg_regress做了许多应该是脚本做的事情。

测试相关的可执行文件,Makefile、测试用例,都在源码目录 openGauss-server/src/test/regress 下面。可以在这个目录下单独编译和触发测试,例如:

make

make fastcheck_single

典型的运行回归测试的方法是,在regress目录下执行

make fastcheck_single

它会调用GNUMakefile里的 fastcheck_single 目标下的命令,可以先执行

make -n fastcheck_single

 看一下它都做了些什么操作。

这种方式调用pg_regress会做下面的工作:

1、将版本安装到 tmp_check目录下(make install DESTDIR=)。

2、初始化(gs_initdb)。

3、启动opengauss服务器。

4、调用gsql连接服务器跑测试用例。

5、比较expected目录下的out文件和对应的results目录下的out文件,会用到smartmatch.pl脚本,用来处理一些模糊匹配,如系统时间导致expected和results不同,会屏蔽掉。例如下面的差异部分,经过smartmatch.pl处理后pg_regress会认为相同。

 实际上包含 --?.* 的一整行都会被忽略掉,不会比较。

pg_regress 内部调用gsql 跑sql脚本,这些sql脚本就是测试用例,在openGauss-server/src/test/regress/sql目录下。

在openGauss-server/src/test/regress/expected目录下,是以前跑完脚本后,“正确”的结果。

在openGauss-server/src/test/regress/results目录下,是本次跑完脚本的结果,比较expected和results下对应的文本文件,相同则认为测试用例通过。

pg_regress 并不直接输入sql目录下的脚本,而是以regress目录下的parallel_scheduleXX或者serial_schedule作为输入,它们是文本文件,格式如下:

# test: large_sequence

test: create_schema
test: auto_analyze_test
test: display_leading_zero datefunc_compatibility
test: a_outerjoin_conversion
test: triggers_traverse
test: sequence_new
test: synonym

其实这是个批处理文件,告诉pg_regress去调用sql目录下的哪些sql文件,这些sql文件就是测试用例,例如,test: create_schema表示pg_regress会调用sql目录下的create_schema.sql,# 号表示注释,从名称来看,pg_regress可以并行执行脚本。

parallel_scheduleXX文件名通过pg_regress的命令行参数--schedule传入,

如果想增加测试用例,可以在sql目录下已有的脚本里增加,也可以在sql目录下新增一个脚本,如果是新增,例如my_test_case.sql,还需在parallel_scheduleXX增加形如:

 test: my_test_case.sql

sql目录下的sql脚本,格式与普通的sql脚本相同。

make fastcheck_single 会执行parallel_schedule0的里的测试,这也是gitee上合入前的看护测试。

也可以自定义批处理文件通过--schedule传给pg_regress。

回归测试的调用流程:

make fastcheck_single --> pg_regress --> gsql 

                                                              --> diff,smartmatch

regress目录下的GNUmakefile可以看到 fastcheck_xx 的定义,从而可以看到pg_regress命令行的使用,opengauss的对pg_regress做了修改,但是文档说明没有跟上,导致很难用。

二、单独执行测试用例(开发调试)

如果我想连接已有的opengauss实例,执行回归测试怎么办呢?(特别是有时我只想跑一个测试用例,而且要不断反馈不断修改。)

经过多次测试,我摸索出一套方法:

1、设置环境变量,例如

export GAUSSHOME=/mnt/disk01/OpenGauss/debug-opengauss-server
export PATH=$GAUSSHOME/bin:$PATH
export LD_LIBRARY_PATH=$GAUSSHOME/lib:$LD_LIBRARY_PATH

就是运行的opengauss实例的根目录设为GAUSSHOME,bin目录加到PATH,lib目录加到LD_LIBRARY_PATH。

2、使用下面参数直接调用pg_regress(到regress目录下调用)

./pg_regress --inputdir=. --top-builddir=../../..  -d 1 -c 0 -p 5432 -r 1 --single_node --schedule=my_seq_test --regconf=regress.conf

--inputdir 设为当前目录。

--top-builddir 是opengauss源码根目录。

-d 在pg_regress的帮助里没有,是datanode的个数,单节点就设为1。

-c 在pg_regress的帮助里没有,coordnode个数,单节点就设为0。

-p opengauss服务实例的端口号。

-r  2表示只安装数据库不运行,1表示安装运行数据库,并且跑回归测试,0表示安装并运行数据库,但是不跑回归测试,这里设为1

--single_node 表示单节点。

--schedule 指定一个文本文件,里面是test: xxx的格式,指定了测试用例脚本名,对应sql目录下的xxx.sql。

--regconf 是给pg_regress用的配置文件,我对regress目录下的regress.conf做了一点修改:performance_data_printing = off 否则会打印一些错误信息。

3、当出错时可以手动比较results和expected,例如:

vimdiff expected/large_sequence.out results/large_sequence.out

4、pg_regress内部掉用gsql的命令格式为:

gsql -X -p 5432 -a -q -d regression -C < sql/large_sequence.sql > results/large_sequence.out  2>&1

也可以自己直接调用,跑出结果文件和expected比较。

vimdiff expected/large_sequence.out results/large_sequence.out

参考:

pull request关联issue

Pull Request 关联 Issue - Gitee.com

commit 关联 issue

Commit 关联 Issue - Gitee.com

opengauss社区命令 

contributors/command.md · openGauss/community - Gitee.com

相关文章:

opengauss 的回归测试

目录 一、回归测试说明 二、单独执行测试用例&#xff08;开发调试&#xff09; 一、回归测试说明 opengauss/postgresql 的回归测试&#xff0c;通过执行SQL比较输出打印&#xff0c;判断代码修改是否改变了其它功能逻辑。 OG的回归测试大体上和PG类似&#xff0c;主要是通…...

计算机组成原理基础练习题第四章-计算机的运算方法

对真值0表示形式唯一的机器数是&#xff08;&#xff09;。A、原码    B、补码和移码C、反码    D、以上都不对在整数定点机中&#xff0c;下述说法正确的是&#xff08;&#xff09;。A、原码和反码不能表示-1,补码可以表示-1B、三种机器数均可表示-1C、三种机器数均可表示…...

SpringBoot定时任务里的多线程

SpringBoot定时任务里的多线程 提示前言遇到的问题验证与解决验证单线程执行单任务分析代码及结果 单线程执行多任务 解决实现单任务的多线程为每个任务创建一个子线程 解决多任务的多线程设定固定容量线程池动态设定容量线程池固定线程池和动态线程池的选择 简单总结借鉴及引用…...

YOLO V3 SPP ultralytics 第二节:根据yolo的数据集,生成准备文件和yolo的配置文件

目录 1. 介绍 2. 完整代码 3. 代码讲解 3.1 生成 my_train_data.txt和my_val_data.txt 3.2 生成 my_data.data 文件 3.3 生成 my_yolov3.cfg 3.4 关于my_data_label.names文件 1. 介绍 根据 第一节 的操作&#xff0c;已经生成了下图中圆圈中的部分&#xff0c;而本…...

camunda流程引擎connector如何使用

在 Camunda 中&#xff0c;Connector 是一种用于与外部系统或服务交互的机制。它允许 BPMN 模型中的 Service Task 节点与外部系统或服务进行通信&#xff0c;从而使流程更加灵活和可扩展。使用 Connector&#xff0c;可以将业务流程与外部系统集成在一起&#xff0c;而无需编写…...

ECO基本概念:pre-mask eco gen patch flow

使用conformal LEC 进行pre-mask eco 时&#xff0c;如何产生patch&#xff0c;参考以下步骤&#xff1a; 官方推荐 Flattened ECO Flow&#xff08;FEF&#xff09; Conformal支持Flattened ECO Flow和Hierarchical ECO Flow。Flattened下&#xff0c;工具会将 ECO 分析重点…...

【初学人工智能原理】【4】梯度下降和反向传播:能改(下)

前言 本文教程均来自b站【小白也能听懂的人工智能原理】&#xff0c;感兴趣的可自行到b站观看。 本文【原文】章节来自课程的对白&#xff0c;由于缺少图片可能无法理解&#xff0c;故放到了最后&#xff0c;建议直接看代码&#xff08;代码放到了前面&#xff09;。 代码实…...

微信小程序路由传参

微信小程序路由传参 在微信小程序中&#xff0c;可以通过路由传参将数据传递给目标页面。以下是一种常见的方式&#xff1a; 在源页面中&#xff0c;使用 wx.navigateTo 或 wx.redirectTo 方法跳转到目标页面&#xff0c;并通过 URL 参数传递数据。示例&#xff1a; wx.navi…...

深入篇【C++】类与对象:再谈构造函数之初始化列表与explicit关键字

深入篇【C】类与对象&#xff1a;再谈构造函数之初始化列表与explicit关键字 Ⅰ.再谈构造函数①.构造函数体赋值②.初始化列表赋值【<特性分析>】1.至多性2.特殊成员必在性3.必走性&#xff1a;定义位置4.一致性5.不足性 Ⅱ.explicit关键字①.隐式类型转化②.作用 Ⅰ.再谈…...

广东棒球发展建设·棒球1号位

一、概述 棒球是一项源于美国的运动&#xff0c;自20世纪初开始传入中国&#xff0c;近年来在广东省的发展也逐渐受到关注。本文将就广东棒球的发展现状及未来发展方向进行分析。 二、发展现状 目前广东省内棒球赛事主要有以下几种&#xff1a; 1. 业余棒球联赛&#xff1a;…...

浅谈PMO对组织战略的支持︱美团骑行事业部项目管理中心负责人边国华

美团骑行事业部项目管理中心负责人边国华先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾&#xff0c;演讲议题&#xff1a;浅谈PMO对组织战略的支持。大会将于6月17-18日在北京举办&#xff0c;更多内容请浏览会议日程 议题内容简要&#xff1a; 战略是组织运行的…...

互联网医院资质代办|互联网医院牌照的申请流程

随着互联网技术的不断发展&#xff0c;互联网医疗已经逐渐成为人们关注的热点话题。而互联网医院作为互联网医疗的一种重要形式&#xff0c;也越来越受到社会各界的关注。若想开展互联网医院业务&#xff0c;则需要具备互联网医院牌照。那么互联网医院牌照的申请流程和需要的资…...

网络:DPDK复习相关知识点_2

1.RTC运行至完成时模式&#xff0c;单核单模块 2.pipeline模式&#xff0c;多核多模块&#xff0c;每个模块都是一个处理引擎&#xff0c;但会有缓存一致性问题 3.Mbuff数据包内存操作对象&#xff0c;相当于是数据包的一个索引&#xff0c;对网络的处理都集中在这个Buff上 …...

阿里云大学考试Java中级题目及解析-java中级

阿里云大学考试Java中级题目及解析 1.servlet释放资源的方法是&#xff1f; A.int()方法 B.service()方法 C.close() 方法 D.destroy()方法 D servlet释放资源的方法是destroy() 2.order by与 group by的区别&#xff1f; A.order by用于排序&#xff0c;group by用于排序…...

【星戈瑞】Sulfo-CY3-COOH磺化/水溶性Cyanine3羧酸1121756-11-3

Sulfo-CY3 COOH是一种荧光染料&#xff0c;其分子结构中含有COOH官能团&#xff0c;最大吸收波长为550纳米左右&#xff0c;可以通过分光光度计等设备进行检测。Sulfo-CY3 COOH是一种带有羧基的荧光染料&#xff0c;可以与含有氨基的生物分子通过偶联反应形成共价键&#xff0c…...

Java NIO和IO的主要区别

当学习了Java NIO和IO的API后&#xff0c;一个问题马上涌入脑海&#xff1a; 我应该何时使用IO&#xff0c;何时使用NIO呢&#xff1f;在本文中&#xff0c;我会尽量清晰地解析Java NIO和IO的差异、它们的使用场景&#xff0c;以及它们如何影响您的代码设计。 下表总结了Java N…...

SQL查询语句

DQL语句--排序查询 # 格式: select * from 表名 order by 要排序的列1 [asc/desc], 要排序的列2 [asc/desc]; # 解释: # 1. 无论SQL语句简单或者是复杂, order by语句一般都放最后, 注意: 如果有limit(分页), 则它(limit)在最后. # 2. asc表示升序, desc表示降序, 其中, 默…...

四象限法进程调度

周二收到一篇推送 一次云上网络毫秒级的优化与实践&#xff0c;很有意义的实践和探索&#xff0c;建议阅读&#xff0c;文章不长&#xff0c;没有冗长的源码分析&#xff0c;结论很清晰。 谈谈我的看法。 多少有种感觉&#xff0c;Linux 越来越像个响应系统而不是服务器。 虚…...

蓝桥杯拿到一等奖,并分享经验

昨天和群里的小伙伴在群里聊&#xff0c;有的小伙伴竟然说蓝桥杯一等奖没有含量&#xff0c;我也是醉了&#xff01; 就像去年看了一个号主写的&#xff1a;研究生遍地都是! 放眼全国14亿人口&#xff0c;别说研究生了&#xff0c;本科生占比有多少? “蓝桥杯是我人生中得到…...

vue3。 Cannot use JSX unless the ‘–jsx’ flag is provided. ts(17004)

react用tsx或者jsx很常见&#xff0c;也有配套的配置 那如果是vue呢&#xff1f; 默认是没问题的&#xff0c;可是我用了jsdoc&#xff0c;并开启了checkjs&#xff0c;然后vscode就爆红了 谷歌&#xff0c;百度&#xff0c;一个晚上 查到的答案&#xff1a; 推荐我新增tsco…...

STM32单片机学习(28) —— STM32的SPI外设

文章目录概述SPI通信的移位机制&#xff08;以bit为单位&#xff09;SPI外设框图第一部分&#xff1a;数据通路SPI通信的数据帧格式SPI外设移位机制&#xff08;以字节为单位&#xff09;第二部分&#xff1a;主机时钟生成器SPI通信时钟频率与传输速率第三部分&#xff1a;主从…...

Goframe项目实战:从数据库表到API接口的全链路开发指南(含避坑点)

Goframe项目实战&#xff1a;从数据库表到API接口的全链路开发指南&#xff08;含避坑点&#xff09;在当今微服务架构盛行的时代&#xff0c;Go语言因其高性能和并发优势成为后端开发的热门选择。而Goframe作为一款企业级的Go应用开发框架&#xff0c;提供了从数据库操作到API…...

为什么视频代剪辑会影响你的内容传播效果

为什么你精心拍的视频&#xff0c;发出去却没人看&#xff1f; 你有没有过这样的经历&#xff1a;花了一整天拍Vlog&#xff0c;素材画质高清、内容真实&#xff0c;可一剪出来就显得平淡无奇&#xff0c;点赞寥寥&#xff1f;或者婚礼当天感动全场&#xff0c;回看成片却像流水…...

新能源车轻量化为什么开始盯上高强镁合金?

续航&#xff0c;是悬在每一台纯电动汽车头上的达摩克利斯之剑。多充一度电、多堆一些正极材料&#xff0c;是一条路&#xff1b;但还有另一条路——把车造得更轻。 SAE&#xff08;美国汽车工程师学会&#xff09;的测算已经被反复引用&#xff1a;整车每减重100千克&#xff…...

双稳健机器学习:用正交性与交叉拟合解决因果推断中的ML偏差

1. 项目概述&#xff1a;当机器学习遇见因果推断的“干扰”难题在实证研究的日常工作中&#xff0c;我们常常面临一个核心矛盾&#xff1a;我们真正关心的&#xff0c;往往只是一个或几个关键参数——比如一项政策对就业率的平均影响&#xff08;平均处理效应&#xff0c;ATE&a…...

理想二极管控制器:用MOSFET实现毫伏级压降的电源管理方案

1. 理想二极管控制器&#xff1a;告别传统二极管的压降损耗 在电源设计、电池保护、太阳能板并联这些领域里&#xff0c;二极管是个再常见不过的元件。我们用它来防反接、做整流、实现“或”逻辑供电&#xff0c;几乎不假思索。但如果你设计过一个需要处理大电流、低电压的系统…...

AI算法工程师如何进行数据预处理?这5个步骤让你的数据更优质

在AI模型开发与测试的全流程中&#xff0c;数据质量直接决定了最终模型的效果上限——哪怕是最先进的大语言模型&#xff0c;用劣质数据训练出来也只能输出劣质结果。对于软件测试从业者来说&#xff0c;不管是参与AI模型的功能测试、性能测试&#xff0c;还是负责测试数据集的…...

别再只会用--nogpgcheck了!手把手教你安全修复PostgreSQL yum源的GPG密钥问题

企业级PostgreSQL部署&#xff1a;安全解决GPG密钥验证的完整方案 当你在生产环境中部署PostgreSQL时&#xff0c;遇到GPG签名验证错误直接使用--nogpgcheck绕过检查&#xff0c;就像因为门锁打不开就直接把门拆掉一样危险。本文将带你深入理解GPG验证机制&#xff0c;并提供一…...

深入解析NxDumpTool:Switch游戏文件系统提取的终极指南 [特殊字符]

深入解析NxDumpTool&#xff1a;Switch游戏文件系统提取的终极指南 &#x1f3ae; 【免费下载链接】nxdumptool Generates XCI/NSP/HFS0/ExeFS/RomFS/Certificate/Ticket dumps from Nintendo Switch gamecards and installed SD/eMMC titles. 项目地址: https://gitcode.com…...

语音AI落地最后一公里卡点,PlayAI质量波动真相:采样率适配缺陷、韵律断层、情感衰减三大隐性陷阱

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;PlayAI语音质量评测报告总览 PlayAI语音质量评测体系基于客观指标与主观听感双维度构建&#xff0c;覆盖清晰度、自然度、时延、抗噪性及情感一致性五大核心能力。本报告汇总了在标准测试集&#xff08…...