云原生开发工具微服务网络【免费下载链接】telepresenceLocal development against a remote Kubernetes or OpenShift cluster项目地址https://gitcode.com/gh_mirrors/te/telepresence点击查看免费下载本文是 Telepresence 仓库中regression_test/集成级测试套件的操作手册围绕.claude/skills/regression-tests/SKILL.md的完整工作流展开如何用go test -run精准圈定某个区域Area、套件Suite或单个用例如何在真实 Kubernetes 集群上重建镜像、运行并解读结果以及如何排查失败与清理残留状态。读完本文你将掌握一套可复制、可在开发机上秒级热循环的回归测试流程并能定位 版本被悄悄污染、镜像拉取失败 这类典型坑。回归测试套件是什么regression_test/是整个代码库的回归保护层它驱动真实的telepresenceCLI对抗真实的 Kubernetes 集群而不是用 mock 或 fake。套件建立在声明式、带记忆memoized的 fixture 之上——测试声明它需要的资源框架在首次使用时逐项创建provision后续所有声明相同规格spec的测试复用同一资源开发模式下还会收养adopt上一次运行留下的资源。一个 warm cluster 上的单个 scope 测试几秒内即可完成见 regression_test/README.md。从代码组织看入口在 regression_test/main_test.goTestMain调用rt.Main(m)完成运行时装配每个区域通过 blank import 注册自己的套件如_ github.com/telepresenceio/telepresence/v2/regression_test/suites/intercept再由形如TestIntercept的顶层测试函数调用rt.RunArea(t, intercept)触发整片区域。这就是区域是普通 Go 测试、套件和方法是子测试这一结构的事实依据。当前仓库注册的区域包括smoke、connect、attach、intercept、install、injector、namespaces、dns、routing、mounts、docker、session、nodeagent、auth、state、quic。区域顺序有意义例如 smoke 排在第一位因为它假定之前没有套件留下连接state 与 quic 排在最后因为它们对共享 release 的规格变动spec churn最剧烈见 main_test.go 的注释。环境前提真实集群 可达镜像运行前必须满足两个前提一个可用的 k8s 集群kind、minikube 或 Docker Desktop 均可。测试可达的镜像本地集群建议RTEST_REGISTRYlocal并把镜像 load 进集群而不是 push 到远端仓库。kind 的典型姿势是TELEPRESENCE_VERSIONv2.x.x-test.0 TELEPRESENCE_REGISTRYlocal \ make build tel2-image client-image kind load docker-image local/tel2:2.x.x-test.0 --name clusterminikube 对应使用minikube image load。一个贯穿始终的原则shell 环境变量永远优先没有配置文件。也就是说你 shell 里一个过期的export会无声地改变整次运行。这条约束在框架侧由 regression_test/framework/rt/env.go 的loadEnv兑现——它只从进程环境读取RTEST_*不存在 rtest.yml 之类的配置文件。精准范围直接用go test -run区域是普通 Go 测试套件和方法是子测试因此一条-run正则表达式可以在任意深度选择go test ./regression_test -run ^TestIntercept$ go test ./regression_test -run ^TestIntercept$/^HeaderFilter$ go test ./regression_test -run ^TestIntercept$/^HeaderFilter$/^Test_PathPrefix$没有TEST_SUITE/TEST_NAME的间接层也没有 make 参数舞蹈在这个 harness 里行内VARvalue前缀可以直接使用所以直接跑go test即可把make check-regression留给全量、无 scope 的套件它在 build-aux/main.mk 中实现SHARD1|2|3各跑约三分之一。两条硬性纪律永远传-count1——结果绝不能来自测试缓存传一个与 scope 匹配的-timeout单个套件用分钟级全量运行用-timeout100m。标准运行命令TELEPRESENCE_REGISTRYlocal TELEPRESENCE_VERSIONversion \ RTEST_CONTEXTcontext RTEST_TEARDOWN1 \ go test -count1 -timeout30m -run ^TestArea$/^Suite$ ./regression_test \ /tmp/rtest-suite.log 21各变量的作用与默认值完整表格见 regression_test/README.md解析逻辑见 env.go变量作用默认值RTEST_KUBECONFIG本次运行的 kubeconfig标准解析RTEST_CONTEXTkube 上下文kubeconfig 的 current contextRTEST_REGISTRYmanager/agent 镜像仓库local⇒pullPolicyNever$TELEPRESENCE_REGISTRY否则ghcr.io/telepresenceioRTEST_EXECUTABLE被测客户端二进制build-output/bin/telepresenceRTEST_CLIENT_VERSION兼容性测试发布版客户端下载并缓存被测版本RTEST_MANAGER_VERSION兼容性测试公共仓库中的发布版 chart/manager被测版本RTEST_MANAGER_REGISTRY固定 manager 版本对应的镜像仓库ghcr.io/telepresenceioRTEST_LABELS/RTEST_SKIP_LABELS逗号列表ANY 匹配的选/除未设置RTEST_FRESH1忽略可收养资源关RTEST_TEARDOWN1运行结束时销毁资源开发模式下也销毁关RTEST_COVER1覆盖率模式关其中几个行为细节值得展开RTEST_CONTEXT显式钉住 kube 上下文。当机器上有多个集群时必须显式指定——默认值是 kubeconfig 的 current context离跑错集群只差一次kubectx。框架在 runtime.go 的clusterKey中会把 server URL context 拼成集群指纹用来定位跨运行的收养状态文件进一步印证了钉住上下文的必要性。RTEST_TEARDOWN1在运行结束时销毁资源。不带它时开发模式会保留命名空间、release 和连接供下一次运行收养——这正是scope 重跑只需几秒的原因。CIGITHUB_ACTIONStrue隐含 fresh teardown框架在loadEnv中直接以ci || env 1计算这两个开关。RTEST_FRESH1忽略可收养资源——当上一次运行留下了可疑状态时使用。RTEST_LABELS/RTEST_SKIP_LABELS在compat-core、slow、stress、flaky-retry这些标签上做选择语法是逗号分隔、ANY 匹配见parseLabelSet。CRITICAL过期的 TELEPRESENCE_VERSION 会悄悄毒化构建这是全篇最重要的警告被测版本是从二进制自身读取的而make build用TELEPRESENCE_VERSION把它烙进二进制。如果你的 shell export 了一个旧值二进制就会带上那个旧版本manager 镜像 tag 不再匹配运行会在镜像拉取阶段失败——而这个版本号在你的命令行里根本看不到。框架侧的行为印证了这一点detectVersionenv.go优先使用$TELEPRESENCE_VERSION否则解析telepresence version输出中的Client行runtime.go 再把它与 built binary 报告的builtVersion比对不一致时甚至会自动下载对应版本的发布二进制。因此必须显式地、以相同的值同时传给make build和go test调用。运行前重建Rebuild策略套件跑的是预构建的二进制加上集群侧的镜像所以改动过的部分必须先重建客户端 Go 代码pkg/、cmd/telepresence以及任何charts/改动执行make build。注意 chart 是 go:embedded 嵌在客户端二进制里的——只改 chart 而不重建会静默安装旧的 chart。manager / agentcmd/traffic、charts/执行make load-images或make load-tel2-image让集群拿到新镜像。--docker测试执行make client-image——daemon 容器跑在工作站上只需要本地存在即可。RTEST_REGISTRYlocal会让 manager 使用pullPolicyNevermake push-images与真实镜像仓库是为远程集群保留的。pullPolicy 的推导规则在 env.go 的pullPolicyFor中local⇒Neverlocalhost:*前缀 ⇒Always其他 ⇒ 不覆盖用 chart 默认。把重型输出挡在上下文之外套件跑在主线程上不要 Read 或tail整个日志。正确姿势分三步后台启动重定向到全新路径run_in_background: true输出到如/tmp/rtest-suite.log完成后只读摘要grep -E passed,|^ok|^--- FAIL|^FAIL /tmp/rtest-suite.log | tail -5runner 自己的最后一行形如[rtest] run stamp: N passed, N failed, N skipped (N fixture actions)这一行由 report.go 的printSummary输出统计值直接来自每测试的 manifest 记录 3.失败时每个测试的产物在build-output/rtest/logs/stamp/TestPath/cli.log、daemon 日志manifest.json记录每个测试的 outcome 与标签由writeManifest序列化见 report.go。残留状态与清理make rtest-clean移除框架创建的一切——集群内和本地。实现是go run ./regression_test/framework/rtclean见 build-aux/main.mk。被 kill 的运行留下的 daemontelepresence quit -s。每个集群同一时间只跑一个 rtest run——资源名按设计是稳定的这正是收养机制能成立的前提。无关工作留下的 manager 会阻塞安装报错形如 traffic-manager in namespace X already manages namespace Y。用kubectl get secret -A -l ownerhelm找到它。同时记住 chart 还会留下 cluster-scoped 资源webhook config、ClusterRole/Binding这些是删除命名空间不会带走的——框架侧对 secondary teardown 会额外清理 cluster-scoped webhook 配置见 regression_test/README.md。标准工作流识别area/suitearea 是regression_test/suites/下的目录每个 suite 是注册在自身init()里的rt.Suite类型。决定重建见上文并带上显式TELEPRESENCE_VERSION执行。后台、带 scope 运行输出到全新日志路径。汇总给出命令、pass/fail/skip 计数、失败测试名、每个失败的最小解释片段以及下一步具体动作。Dont四个必须避免的操作不要未经用户明确指示就无 scope 跑全量套件——它大约串行一小时make check-regression SHARD1|2|3只跑三分之一shard/area 映射在 build-aux/main.mkSHARD_1 为 quic/nodeagent/auth/session/stateSHARD_2 为 smoke/intercept/install/dns/routing/mounts/dockerSHARD_3 为 connect/attach/injector/namespaces。不要用go test -list或故意不匹配的-run去看看有什么harness 在 selection 之前就会 provision 真实集群资源代价是一整轮 setup。直接 grep 套件文件即可。不要未经询问就make clobber或销毁本地镜像。不要编辑生成文件docs/reference/cli/**、DEPENDENCIES.md、DEPENDENCY_LICENSES.md、docs/release-notes*。纵深fixture 引擎与运行机制理解运行机制有助于诊断玄学失败fixture 记忆与失效fixture.gort.Get(t, f)返回记忆化值或首次使用时在调用测试的t下 provisionprovision 失败会失败该测试并让后续所有对同一 fixture 的Get变成 skip。rt.Mutate(t, f)是Get 测试结束时的失效invalidation下一次Get重新 provision。Provision 必须能从任何先验状态收敛install-or-upgrade、apply rollout、quit connect。几条维持全局的规则详见 regression_test/README.md套件绝不在SetupSuite里 provision——rt.Suite的访问器s.Manager()、s.Connect()、s.Workload(tpl)、s.LocalEcho()都是惰性的-run过滤后的套件零成本。声明 manager 规格用rt.NeedsManager(spec)runner 按规格给套件分组最小化对唯一共享 release的 in-placehelm upgrade --reset-values切换。变更必须显式任何改变共享 release、默认连接或共享 workload 的操作都要走Mutate否则后续测试会继承你的残留。Manager 规格互斥provision 任意规格会使其他所有规格的记忆句柄以及所有连接失效。Workload 在运行结束总是被销毁即使 dev 模式它们重建便宜而堆积几十个会把节点推近 kubelet 的 pod 上限。框架还通过evictIdleWorkloads在套件边界把超过maxLiveWorkloads4 个的空闲 workload 提前回收避免大量 agent 在每次 helm 切换时造成重连雪崩。覆盖率的进阶用法TELEPRESENCE_COVER1 make build tel2-image给两个二进制插桩RTEST_COVER1将GOCOVERDIR指向build-output/rtest/coverage/clientmanager 的 injector 会把同样的布线传播进每个生成的 traffic-agent 与 init 容器运行结束时 quit daemon计数器在退出时 flush再通过一次性 pod 抓取集群的 covdata最后make rtest-coverage合并为一份报告见 regression_test/README.md。兼容性测试RTEST_LABELScompat-core配合RTEST_MANAGER_VERSION或RTEST_CLIENT_VERSION双向运行子集compat.MinManager(t, 2.30.0)式的门槛让特性测试在对方缺失时自我跳过。CompatSim测试用compatibility.version2.21.0安装内置 manager在不使用真实旧镜像的情况下证明每一条Unimplemented回退链。调试遗留会话调试产物落在build-output/rtest/logs/runid/run.log、manifest.json每个测试的 outcome/duration/labels、manager values 文件、应用过的 manifests以及失败时每个测试的异常事件与 daemon 日志尾部。Daemon 状态在build-output/rtest/home/下手动探查保留会话的方式export DEV_TELEPRESENCE_CONFIG_DIR$PWD/build-output/rtest/home/config \ DEV_TELEPRESENCE_LOG_DIR$PWD/build-output/rtest/home/logs build-output/bin/telepresence status这些环境变量正是框架在 runtime.go 的childEnv中传给每个被测子进程的——DEV_TELEPRESENCE_CONFIG_DIR/DEV_TELEPRESENCE_LOG_DIR把每个 daemon 的配置与日志钉在build-output/rtest/home/下而缓存目录UserCacheDir则按设计留在宿主机的正常 telepresence 缓存位置。最后再提醒一遍那句贯穿全文的纪律shell 环境永远赢。跑之前检查你的 export跑的时候显式传版本跑完之后用make rtest-clean收尾。赞分享云原生开发工具微服务网络【免费下载链接】telepresenceLocal development against a remote Kubernetes or OpenShift cluster项目地址https://gitcode.com/gh_mirrors/te/telepresence点击查看免费下载相关推荐TiDB IntegrationTest 集成测试套件实战指南运行、录制与调试执行计划回归测试TiDB IntegrationTest 集成测试套件实战指南运行、录制与调试执行计划回归测试 导读 tests/integrationtest 是 TiDB数据库分布式数据库后端OLAP使用 Archery 运行 Apache Arrow 基准测试套件执行、结果对比与回归检测实战指南使用 Archery 运行 Apache Arrow 基准测试套件执行、结果对比与回归检测实战指南 本文面向 Apache Arrow 的贡献者与性能敏感型使大数据数据分析数据工程序列化Emscripten 测试套件实战指南从运行模式、随机抽样到基准测试与失败调试Emscripten 测试套件实战指南从运行模式、随机抽样到基准测试与失败调试 Emscripten 是一个把 C/C 编译为 WebAssembly 的编译器WebAssembly开发工具构建工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考