运行和调试测试
运行预提交验证测试
make verify
运行单元测试
运行所有单元测试:
make test
运行 Webhook 的单元测试:
go test ./pkg/webhooks
参考文档运行与 TestValidateClusterQueue
正则表达式匹配的测试:
go test ./pkg/webhooks -run TestValidateClusterQueue
使用竞态检测运行单元测试
使用 -race
启用 Go 内置的竞态检测器:
go test ./pkg/scheduler/preemption/ -race
使用压力测试运行单元测试
循环运行单元测试并收集失败情况:
# 安装 go stress
go install golang.org/x/tools/cmd/stress@latest
# 编译测试(可以添加 -race 进行竞态检测)
go test ./pkg/scheduler/preemption/ -c
# 循环运行并报告失败
stress ./preemption.test -test.run TestPreemption
运行集成测试
make test-integration
关于运行测试子集,请参阅运行测试子集。
使用自定义构建运行 e2e 测试
make kind-image-build
make test-e2e
make test-tas-e2e
make test-e2e-customconfigs
make test-e2e-certmanager
make test-e2e-kueueviz
make test-multikueue-e2e
你可以通过设置 E2E_K8S_FULL_VERSION
变量来指定用于运行 e2e 测试的 Kubernetes 版本:
E2E_K8S_FULL_VERSION=1.33.1 make test-e2e
关于运行测试子集,请参阅 运行测试子集。
增加日志详细程度
你可以使用 TEST_LOG_LEVEL
变量更改日志级别(例如,设置 -5 来增加详细程度)。
默认情况下,TEST_LOG_LEVEL=-3
。
在 VSCode 中调试测试
可以在 VSCode 中调试单元测试和集成测试。
你需要安装 Go 扩展。
现在你将在如下行上方看到 run test | debug test
文本按钮:
func TestValidateClusterQueue(t *testing.T) {
你可以点击 debug test
来调试特定测试。
对于集成测试,需要额外的步骤。在 settings.json 中,你需要在 go.testEnvVars
内添加两个变量:
- 运行
ENVTEST_K8S_VERSION=1.33 make envtest && ./bin/setup-envtest use $ENVTEST_K8S_VERSION -p path
并将路径分配给KUBEBUILDER_ASSETS
变量 - 将
KUEUE_BIN
设置为你的 Kueue 仓库克隆目录内的bin
目录
"go.testEnvVars": {
"KUBEBUILDER_ASSETS": "<上面输出的路径>",
"KUEUE_BIN": "<你的-kueue-文件夹路径>/bin",
},
对于 e2e 测试,你也可以使用 Ginkgo Test Explorer。你需要在 settings.json 中添加以下变量:
"ginkgotestexplorer.testEnvVars": {
"KIND_CLUSTER_NAME": "kind",
"WORKER1_KIND_CLUSTER_NAME": "kind-worker1",
"MANAGER_KIND_CLUSTER_NAME": "kind-manager",
"WORKER2_KIND_CLUSTER_NAME": "kind-worker2",
"KIND": "<your_kueue_path>/bin/kind",
},
然后你可以使用 Ginkgo Test Explorer 的 GUI 来运行单个测试,前提是你已经启动了 kind 集群(有关说明,请参阅这里)。
将 e2e 测试附加到现有的 kind 集群
你可以使用以下方法来启动 kind 集群,然后从命令行或 VSCode 运行 e2e 测试, 将它们附加到现有集群。例如,假设你想测试一些 multikueue-e2e 测试。
运行 E2E_RUN_ONLY_ENV=true make kind-image-build test-multikueue-e2e
并等待 Press Enter to cleanup.
出现。
集群已准备就绪,现在你可以从另一个终端运行测试:
<your_kueue_path>/bin/ginkgo --json-report ./ginkgo.report -focus "MultiKueue when Creating a multikueue admission check Should run a jobSet on worker if admitted" -r
或从 VSCode 运行。
运行集成或 e2e 测试子集
使用 Ginkgo –focus 参数
GINKGO_ARGS="--focus=Scheduler" make test-integration
GINKGO_ARGS="--focus=Creating a Pod requesting TAS" make test-e2e
使用 ginkgo.FIt
如果你想专注于特定测试,可以将这些测试的
ginkgo.It
更改为 ginkgo.FIt
。
有关更多详细信息,请参阅这里。
然后其他测试将被跳过。
例如,你可以将
ginkgo.It("Should place pods based on the ranks-ordering", func() {
更改为
ginkgo.FIt("Should place pods based on the ranks-ordering", func() {
然后运行
# 构建并拉取镜像
make test-tas-e2e
来测试特定的 TAS e2e 测试。
使用 INTEGRATION_TARGET
INTEGRATION_TARGET='test/integration/singlecluster/scheduler' make test-integration
不稳定的集成/e2e 测试
你可以使用 –until-it-fails 或 –repeat=N 参数来让 Ginkgo 重复运行测试,例如:
GINKGO_ARGS="--until-it-fails" make test-integration
GINKGO_ARGS="--repeat=10" make test-e2e
更多信息请参阅这里
添加压力
你可以运行 stress 工具来在测试期间增加 CPU 负载。例如,如果你在基于 Debian 的 Linux 上:
# 安装 stress:
sudo apt install stress
# 与测试一起运行 stress
/usr/bin/stress --cpu 80
分析日志
Kueue 作为常规 pod 在 worker 节点上运行,在 e2e 测试中有 2 个副本在运行。Kueue 日志位于 kind-worker/pods/kueue-system_kueue-controller-manager*/manager
和 kind-worker2/pods/kueue-system_kueue-controller-manager*/manager
文件夹中。
对于每条日志消息,你可以看到消息来自哪个文件和行:
2025-02-03T15:51:51.502425029Z stderr F 2025-02-03T15:51:51.502117824Z LEVEL(-2) cluster-queue-reconciler core/clusterqueue_controller.go:341 ClusterQueue update event {"clusterQueue": {"name":"cluster-queue"}}
这里,它是 core/clusterqueue_controller.go:341
。
另请参阅
反馈
这个页面有帮助吗?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.