当前位置: 首页 > 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…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

FFmpeg avformat_open_input函数分析

函数内部的总体流程如下&#xff1a; avformat_open_input 精简后的代码如下&#xff1a; int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...

《信号与系统》第 6 章 信号与系统的时域和频域特性

目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...

Python的__call__ 方法

在 Python 中&#xff0c;__call__ 是一个特殊的魔术方法&#xff08;magic method&#xff09;&#xff0c;它允许一个类的实例像函数一样被调用。当你在一个对象后面加上 () 并执行时&#xff08;例如 obj()&#xff09;&#xff0c;Python 会自动调用该对象的 __call__ 方法…...

自定义线程池1.2

自定义线程池 1.2 1. 简介 上次我们实现了 1.1 版本&#xff0c;将线程池中的线程数量交给使用者决定&#xff0c;并且将线程的创建延迟到任务提交的时候&#xff0c;在本文中我们将对这个版本进行如下的优化&#xff1a; 在新建线程时交给线程一个任务。让线程在某种情况下…...

LangChain + LangSmith + DeepSeek 入门实战:构建代码生成助手

本文基于 Jupyter Notebook 实践代码&#xff0c;结合 LangChain、LangSmith 和 DeepSeek 大模型&#xff0c;手把手演示如何构建一个代码生成助手&#xff0c;并实现全流程追踪与优化。 一、环境准备与配置 1. 安装依赖 pip install langchain langchain_openai2. 设置环境变…...

【芯片仿真中的X值:隐藏的陷阱与应对之道】

在芯片设计的世界里&#xff0c;X值&#xff08;不定态&#xff09;就像一个潜伏的幽灵。它可能让仿真测试顺利通过&#xff0c;却在芯片流片后引发灾难性后果。本文将揭开X值的本质&#xff0c;探讨其危害&#xff0c;并分享高效调试与预防的实战经验。    一、X值的本质与致…...

React 样式方案与状态方案初探

React 本身只提供了基础 UI 层开发范式&#xff0c;其他特性的支持需要借助相关社区方案实现。本文将介绍 React 应用体系中样式方案与状态方案的主流选择&#xff0c;帮助开发者根据项目需求做出合适的选择。 1. React 样式方案 1.1. 内联样式 (Inline Styles) 通过 style …...