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

(十八)32天GPU测试从入门到精通-TensorRT-LLM 部署与优化day16

目录 引言TensorRT-LLM 环境搭建模型优化与编译多 GPU 推理量化优化性能实测生产部署常见问题排查 引言 TensorRT-LLM 是NVIDIA 官方的 LLM 推理优化库&#xff0c;提供业界领先的性能和完整的优化技术栈。作为 NVIDIA 生态的一部分&#xff0c;TensorRT-LLM 深度整合了 NVID…...

基于springboot+vue好漂酿自助美甲管理系统hx0749FECS

文章目录详细视频演示技术介绍功能介绍核心代码系统效果图源码获取详细视频演示 文章底部名片&#xff0c;获取项目的完整演示视频&#xff0c;免费解答技术疑问 技术介绍 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomca…...

K8s入门到实战

一&#xff0c;简介 1&#xff0c;k8s概述 容器管理适用于集群部署&#xff0c;自动化部署 k8s利于应用扩展 k8s目标实施让容器化应用更加简洁和高效 2&#xff0c;k8s特性 自动装箱&#xff1a;基于容器对应用运行环境的资源配值要求自动部署应用 自我修复&#xff1a;当…...

Qwen2.5-72B-Instruct-GPTQ-Int4多场景:医疗问诊记录结构化+术语标准化

Qwen2.5-72B-Instruct-GPTQ-Int4多场景&#xff1a;医疗问诊记录结构化术语标准化 1. 模型简介与核心能力 1.1 Qwen2.5系列模型概述 Qwen2.5是通义千问大模型系列的最新版本&#xff0c;提供了从0.5B到720B参数规模的基础模型和指令调优模型。相比前代Qwen2&#xff0c;Qwen…...

VibeVoice Pro多场景效果:虚拟偶像直播中实时语音互动实现

VibeVoice Pro多场景效果&#xff1a;虚拟偶像直播中实时语音互动实现 1. 引言&#xff1a;虚拟直播的语音挑战与解决方案 虚拟偶像直播正在重新定义娱乐行业的互动方式&#xff0c;但实时语音交互始终是技术上的难点。传统语音合成方案存在明显的延迟问题&#xff0c;当虚拟…...

PX4无人机实战调试:从光流集成到安全返航的完整流程解析

1. 光流传感器集成与配置 光流传感器是无人机在室内或近地飞行时的关键部件&#xff0c;它通过分析连续图像帧之间的像素位移来估算飞行器的水平速度。对于PX4飞控来说&#xff0c;微空MTF-01这类光流模块的集成需要特别注意硬件接口和参数配置的匹配性。 实际调试时最容易忽略…...

大卫小东(Sheldon)媳

Issue 概述 先来看看提交这个 Issue 的作者是为什么想到这个点子的&#xff0c;以及他初步的核心设计概念。?? 本 PR 实现了 Apache Gravitino 与 SeaTunnel 的集成&#xff0c;将其作为非关系型连接器的外部元数据服务。通过 Gravitino 的 REST API 自动获取表结构和元数据&…...

顶半部与底半部:那次中断风暴让我彻底搞懂了

那天晚上&#xff0c;产线测试机突然卡死&#xff0c;屏幕上的数据刷新停滞在23:47:15。重启后查看内核日志&#xff0c;满屏的“IRQ handler took too long”警告。问题定位到我们新加的传感器驱动——中断频率从设计的100Hz变成了实际跑起来的2kHz&#xff0c;ISR里那个浮点运…...

一文学习 工作流开发 BPMN、 Flowable俗

一、什么是requests&#xff1f; requests 是一个用于发送HTTP请求的 Python 库。 它可以帮助你&#xff1a; 轻松发送GET、POST、PUT、DELETE等请求 处理Cookie、会话等复杂性 自动解压缩内容 处理国际化域名和URL 二、应用场景 requests 广泛应用于以下实际场景&#xff1a; …...

终极指南:Armeria与Spring Boot无缝整合的企业级应用开发最佳实践

终极指南&#xff1a;Armeria与Spring Boot无缝整合的企业级应用开发最佳实践 【免费下载链接】armeria Your go-to microservice framework for any situation, from the creator of Netty et al. You can build any type of microservice leveraging your favorite technolog…...