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 的回归测试
目录 一、回归测试说明 二、单独执行测试用例(开发调试) 一、回归测试说明 opengauss/postgresql 的回归测试,通过执行SQL比较输出打印,判断代码修改是否改变了其它功能逻辑。 OG的回归测试大体上和PG类似,主要是通…...
计算机组成原理基础练习题第四章-计算机的运算方法
对真值0表示形式唯一的机器数是()。A、原码 B、补码和移码C、反码 D、以上都不对在整数定点机中,下述说法正确的是()。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. 介绍 根据 第一节 的操作,已经生成了下图中圆圈中的部分,而本…...
camunda流程引擎connector如何使用
在 Camunda 中,Connector 是一种用于与外部系统或服务交互的机制。它允许 BPMN 模型中的 Service Task 节点与外部系统或服务进行通信,从而使流程更加灵活和可扩展。使用 Connector,可以将业务流程与外部系统集成在一起,而无需编写…...
ECO基本概念:pre-mask eco gen patch flow
使用conformal LEC 进行pre-mask eco 时,如何产生patch,参考以下步骤: 官方推荐 Flattened ECO Flow(FEF) Conformal支持Flattened ECO Flow和Hierarchical ECO Flow。Flattened下,工具会将 ECO 分析重点…...
【初学人工智能原理】【4】梯度下降和反向传播:能改(下)
前言 本文教程均来自b站【小白也能听懂的人工智能原理】,感兴趣的可自行到b站观看。 本文【原文】章节来自课程的对白,由于缺少图片可能无法理解,故放到了最后,建议直接看代码(代码放到了前面)。 代码实…...
微信小程序路由传参
微信小程序路由传参 在微信小程序中,可以通过路由传参将数据传递给目标页面。以下是一种常见的方式: 在源页面中,使用 wx.navigateTo 或 wx.redirectTo 方法跳转到目标页面,并通过 URL 参数传递数据。示例: wx.navi…...
深入篇【C++】类与对象:再谈构造函数之初始化列表与explicit关键字
深入篇【C】类与对象:再谈构造函数之初始化列表与explicit关键字 Ⅰ.再谈构造函数①.构造函数体赋值②.初始化列表赋值【<特性分析>】1.至多性2.特殊成员必在性3.必走性:定义位置4.一致性5.不足性 Ⅱ.explicit关键字①.隐式类型转化②.作用 Ⅰ.再谈…...
广东棒球发展建设·棒球1号位
一、概述 棒球是一项源于美国的运动,自20世纪初开始传入中国,近年来在广东省的发展也逐渐受到关注。本文将就广东棒球的发展现状及未来发展方向进行分析。 二、发展现状 目前广东省内棒球赛事主要有以下几种: 1. 业余棒球联赛:…...
浅谈PMO对组织战略的支持︱美团骑行事业部项目管理中心负责人边国华
美团骑行事业部项目管理中心负责人边国华先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾,演讲议题:浅谈PMO对组织战略的支持。大会将于6月17-18日在北京举办,更多内容请浏览会议日程 议题内容简要: 战略是组织运行的…...
互联网医院资质代办|互联网医院牌照的申请流程
随着互联网技术的不断发展,互联网医疗已经逐渐成为人们关注的热点话题。而互联网医院作为互联网医疗的一种重要形式,也越来越受到社会各界的关注。若想开展互联网医院业务,则需要具备互联网医院牌照。那么互联网医院牌照的申请流程和需要的资…...
网络:DPDK复习相关知识点_2
1.RTC运行至完成时模式,单核单模块 2.pipeline模式,多核多模块,每个模块都是一个处理引擎,但会有缓存一致性问题 3.Mbuff数据包内存操作对象,相当于是数据包的一个索引,对网络的处理都集中在这个Buff上 …...
阿里云大学考试Java中级题目及解析-java中级
阿里云大学考试Java中级题目及解析 1.servlet释放资源的方法是? A.int()方法 B.service()方法 C.close() 方法 D.destroy()方法 D servlet释放资源的方法是destroy() 2.order by与 group by的区别? A.order by用于排序,group by用于排序…...
【星戈瑞】Sulfo-CY3-COOH磺化/水溶性Cyanine3羧酸1121756-11-3
Sulfo-CY3 COOH是一种荧光染料,其分子结构中含有COOH官能团,最大吸收波长为550纳米左右,可以通过分光光度计等设备进行检测。Sulfo-CY3 COOH是一种带有羧基的荧光染料,可以与含有氨基的生物分子通过偶联反应形成共价键,…...
Java NIO和IO的主要区别
当学习了Java NIO和IO的API后,一个问题马上涌入脑海: 我应该何时使用IO,何时使用NIO呢?在本文中,我会尽量清晰地解析Java NIO和IO的差异、它们的使用场景,以及它们如何影响您的代码设计。 下表总结了Java N…...
SQL查询语句
DQL语句--排序查询 # 格式: select * from 表名 order by 要排序的列1 [asc/desc], 要排序的列2 [asc/desc]; # 解释: # 1. 无论SQL语句简单或者是复杂, order by语句一般都放最后, 注意: 如果有limit(分页), 则它(limit)在最后. # 2. asc表示升序, desc表示降序, 其中, 默…...
四象限法进程调度
周二收到一篇推送 一次云上网络毫秒级的优化与实践,很有意义的实践和探索,建议阅读,文章不长,没有冗长的源码分析,结论很清晰。 谈谈我的看法。 多少有种感觉,Linux 越来越像个响应系统而不是服务器。 虚…...
蓝桥杯拿到一等奖,并分享经验
昨天和群里的小伙伴在群里聊,有的小伙伴竟然说蓝桥杯一等奖没有含量,我也是醉了! 就像去年看了一个号主写的:研究生遍地都是! 放眼全国14亿人口,别说研究生了,本科生占比有多少? “蓝桥杯是我人生中得到…...
vue3。 Cannot use JSX unless the ‘–jsx’ flag is provided. ts(17004)
react用tsx或者jsx很常见,也有配套的配置 那如果是vue呢? 默认是没问题的,可是我用了jsdoc,并开启了checkjs,然后vscode就爆红了 谷歌,百度,一个晚上 查到的答案: 推荐我新增tsco…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...
springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
前端高频面试题2:浏览器/计算机网络
本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...
