package framework import ( . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "k8s.io/client-go/dynamic" "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" ) // 1. 定义一个测试的入口函数Describe,这里接收测试的描述以及contextFunc // 1.1 这里边会调用context创建方法来创建context // 1.2 这个context里面会有执行一些我们期望的行为 // 2. 这个contextFunc的签名符合func(ctx *TestContext, f *Framework) // 3. 这个contextFunc的函数体就是测试函数的内容本身 // 4. 由于这个contextFunc的参数中有ctx入参,那么在执行测试函数体的时候,就可以使用ctx中的内容或方法。 type TestContext struct { Name string Namespace string Config *rest.Config MasterIP string } type ContextFunc func(ctx *TestContext, f *Framework) // 如果不用动态的client,那么我们访问这些资源的时候,就需要: // 1. 自己创建rest api 的请求 // 2. 获取对应资源的 client sdk // CreateDynamicClient 创建动态的 client,用来访问自定定义或者后安装的资源 func (tc *TestContext) CreateDynamicClient() dynamic.Interface { By("Create a Dynamic Client") c, err := dynamic.NewForConfig(tc.Config) if err != nil { Expect(err).Should(BeNil()) } return c } // 创建一个 clientset,用来访问内置资源 func (tc *TestContext) CreateClientSet() *kubernetes.Clientset { By("Create a ClientSet client") c, err := kubernetes.NewForConfig(tc.Config) if err != nil { Expect(err).Should(BeNil()) } return c }