拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Kubernetes 如何用 make test-integration 运行 test/integration 集成测试

Kubernetes 如何用 make test-integration 运行 test/integration 集成测试【免费下载链接】kubernetesProduction-Grade Container Scheduling and Management项目地址: https://gitcode.com/GitHub_Trending/kuber/kubernetes在 Kubernetes 仓库中开发组件逻辑后通常需要跑一轮集成测试来验证这些测试位于各模块下的test/integration目录如 test/integration/它们会真实拉起一个本地 etcd 实例在接近运行时的环境中执行 API 写入、控制器逻辑等操作而不是仅跑单元测试。仓库提供了一个统一入口make test-integration它会自动准备 etcd、发现所有待测包、执行go test并在结束后清理环境。本文说明如何从准备 etcd 到完成一次完整的集成测试运行。前提条件etcd 必须在 PATH 中集成测试依赖一个真实的 etcd 进程。hack/make-rules/test-integration.sh 在开始测试前会执行checkEtcdOnPath如果which etcd找不到 etcd脚本会直接报错退出并提示用hack/install-etcd.sh安装一份副本。脚本还要求jq在 PATH 中kube::util::require-jq用于解析 workspace 模块列表。如果你没有 etcd可以在仓库根目录运行hack/install-etcd.sh该脚本会下载 etcd 并解压到仓库的third_party/目录下hack/install-etcd.sh 注释说明其用途是convenience to download and install etcd in third_party。注意它的副作用会从网络下载二进制包并解压写入third_party/目录。脚本结束时如果当前 PATH 中没有third_party/etcd会打印一行export PATH...提示把该目录加入 PATH 后再运行测试。hack/lib/etcd.sh 中定义的检查逻辑还会验证本机 etcd 版本不低于要求的最低版本脚本中默认ETCD_VERSION3.7.1不足时会尝试使用third_party/etcd中的副本仍不足则报错etcd version ... or greater required.默认端口2379必须空闲否则报unable to start etcd as port 2379 is in use需要先停掉占用该端口的进程再重试在 arm 架构机器上会自动导出ETCD_UNSUPPORTED_ARCHarm。所有脚本都要从 Kubernetes 仓库根目录运行见 hack/README.md 中 all scripts must be run from the Kubernetes root directory。完整运行make test-integration在仓库根目录直接运行make test-integration该目标定义在 Makefile即build/root/Makefile的符号链接中实际执行KUBE_TEST_ARGS$(value KUBE_TEST_ARGS) hack/make-rules/test-integration.sh $(WHAT)KUBE_TEST_ARGS以显式取值方式传递目的是保留值中的美元符号例如-run正则中的$$不被 make 提前展开。脚本内部按以下顺序工作见 hack/make-rules/test-integration.sh设置两个环境变量KUBE_CACHE_MUTATION_DETECTORtrue默认开启缓存变更检测器便于发现 cache mutator 问题KUBE_PANIC_WATCH_DECODE_ERRORfalse集成测试会故意插入无法解码的数据避免解码错误触发 panic。通过kube::test::find_integration_test_pkgs枚举当前 Go workspace 中所有模块收集各模块下存在测试文件的test/integration包作为测试目标列表。启动本地 etcdkube::etcd::start默认监听127.0.0.1:2379数据目录使用临时目录启动后等待/health就绪并做一次写操作确认同时开始周期性抓取 etcd metrics。以make -C ${KUBE_ROOT} test运行测试默认参数--shorttrue默认超时KUBE_TIMEOUT-timeout600s。结束后cleanup停止 etcd 进程并删除临时数据目录trap cleanup EXIT保证中途中断时也会执行清理。缩小范围用 WHAT 和 KUBE_TEST_ARGS 只跑部分测试test-integration目标支持两个参数Makefile 中的帮助文本WHAT要测试的目录名这些目录下所有*_test.go都会被运行不指定时运行全部发现的集成测试包。KUBE_TEST_ARGS透传给底层go test的参数。Makefile 中给出的两个官方示例# 只跑 kubelet 的集成测试并收集覆盖率 make test-integration WHAT./test/integration/kubelet GOFLAGS-v -coverpkg./pkg/kubelet/... KUBE_COVERy # 只跑 pods 目录中指定的单个测试函数 make test-integration WHAT./test/integration/pods GOFLAGS-v KUBE_TEST_ARGS-run ^TestPodUpdateActiveDeadlineSeconds$$第二个示例值得注意KUBE_TEST_ARGS的值在 shell 层用单引号包裹其中的$$在 make 展开后变成 go test 正则所需的$锚定符——这正是显式传$(value KUBE_TEST_ARGS)以保留美元符号这条注释的用途。想定位某个失败场景时用这种方式精确过滤到单个测试函数比全量跑完整个test/integration树快得多。另外可用KUBE_INTEGRATION_TEST_MAX_CONCURRENCY控制并行度设为大于 0 的值时脚本会把GOMAXPROCS设为该值并打印Setting parallelism to ...默认为-1不做限制。超时默认 600 秒可通过KUBE_TIMEOUT覆盖。如何判断运行成功正常运行时脚本会依次打印Starting etcd instance、Running integration test cases等状态日志测试本身按go test的常规输出展示各包结果make test的退出码即最终结果——任何一个包失败整个命令以非零码结束。测试全部通过后脚本自动执行Cleaning up etcd并打印Integration test cleanup complete说明 etcd 进程已被停止、临时数据目录已清理不会留下残留进程。如果卡在启动阶段而非测试失败优先检查两个前置问题which etcd是否可用以及 2379 端口是否被占用hack/lib/etcd.sh 中kube::etcd::validate对这两种情况都会给出对应的明确报错。限制说明该入口面向本地开发环境它会自行启动、使用并停止一个本地 etcd只覆盖test/integration目录下的包不包含 e2e 或 node 测试。etcd 版本低于 3.7.1hack/lib/etcd.sh中的ETCD_VERSION默认值时无法运行需按上文安装或自行提供满足版本要求的 etcd。由于脚本会在结束后清理 etcd 临时数据不要把ETCD_DIR指向需要保留数据的目录hack/lib/etcd.sh 中kube::etcd::clean_etcd_dir会删除ETCD_DIR。完成一次全量make test-integration并确认所有包通过后集成测试层面的验证就告一段落改动较大或提交 PR 前仓库惯例是再运行hack/verify-all.sh做整体校验见 hack/README.md。【免费下载链接】kubernetesProduction-Grade Container Scheduling and Management项目地址: https://gitcode.com/GitHub_Trending/kuber/kubernetes创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门