成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一篇帶你kubebuilder 進(jìn)階: 測(cè)試

開(kāi)發(fā) 項(xiàng)目管理
今天我們大概看一下單元測(cè)試和集成測(cè)試怎么做。單元測(cè)試和 golang 的單元測(cè)試沒(méi)有什么太大的區(qū)別,一般可以通過(guò)單元測(cè)試搞定的首先使用單元測(cè)試,因?yàn)閱卧獪y(cè)試寫(xiě)起來(lái)最容易。

[[399666]]

Operator 的測(cè)試是一個(gè)比較頭疼的問(wèn)題,在 kubernetes 資源是在不斷變化的,并且想要在測(cè)試的時(shí)候跑一整套的 kubernetes 環(huán)境也不是一件容易的事情,今天我們大概看一下單元測(cè)試和集成測(cè)試怎么做。

單元測(cè)試

單元測(cè)試和 golang 的單元測(cè)試沒(méi)有什么太大的區(qū)別,一般可以通過(guò)單元測(cè)試搞定的首先使用單元測(cè)試,因?yàn)閱卧獪y(cè)試寫(xiě)起來(lái)最容易,例如下面這一段對(duì)節(jié)點(diǎn)標(biāo)簽更新邏輯進(jìn)行測(cè)試

  1. func TestNodePoolSpec_ApplyNode(t *testing.T) { 
  2.  type fields struct { 
  3.   Taints  []corev1.Taint 
  4.   Labels  map[string]string 
  5.   Handler string 
  6.  } 
  7.  type args struct { 
  8.   node v1.Node 
  9.  } 
  10.  tests := []struct { 
  11.   name   string 
  12.   fields fields 
  13.   args   args 
  14.   want   *corev1.Node 
  15.  }{ 
  16.   { 
  17.    name"label"
  18.    fields: fields{ 
  19.     Labels: map[string]string{ 
  20.      "node-pool.lailin.xyz/test"""
  21.     }, 
  22.    }, 
  23.    args: args{ 
  24.     node: v1.Node{ 
  25.      ObjectMeta: metav1.ObjectMeta{ 
  26.       Name"worker"
  27.       Labels: map[string]string{ 
  28.        "kubernetes.io/arch""amd64"
  29.        "a":                  "b"
  30.       }, 
  31.      }, 
  32.     }, 
  33.    }, 
  34.    want: &v1.Node{ 
  35.     ObjectMeta: metav1.ObjectMeta{ 
  36.      Name"worker"
  37.      Labels: map[string]string{ 
  38.       "kubernetes.io/arch":        "amd64"
  39.       "node-pool.lailin.xyz/test"""
  40.      }, 
  41.     }, 
  42.    }, 
  43.   }, 
  44.  } 
  45.  for _, tt := range tests { 
  46.   t.Run(tt.name, func(t *testing.T) { 
  47.    s := &NodePoolSpec{ 
  48.     Taints:  tt.fields.Taints, 
  49.     Labels:  tt.fields.Labels, 
  50.     Handler: tt.fields.Handler, 
  51.    } 
  52.    assert.Equal(t, tt.want, s.ApplyNode(tt.args.node)) 
  53.   }) 
  54.  } 

集成測(cè)試

controller-runtime 提供 envtest ,這個(gè)包可以幫助你為你在 etcd 和 Kubernetes API server 中設(shè)置并啟動(dòng)的 controllers 實(shí)例來(lái)寫(xiě)集成測(cè)試,不需要 kubelet,controller-manager 或者其他組件。

envtest

一個(gè) envtest 的簡(jiǎn)單例子如下

  1. import sigs.k8s.io/controller-runtime/pkg/envtest 
  2.  
  3. //指定 testEnv 配置 
  4. testEnv = &envtest.Environment{ 
  5.     CRDDirectoryPaths: []string{filepath.Join("..""config""crd""bases")}, 
  6.  
  7. //啟動(dòng) testEnv 
  8. cfg, err = testEnv.Start() 
  9.  
  10. //編寫(xiě)測(cè)試邏輯 
  11.  
  12. //停止 testEnv 
  13. err = testEnv.Stop() 

envtest 在啟動(dòng)的時(shí)候需要設(shè)置一些環(huán)境變量來(lái)說(shuō)明我們使用什么控制平面來(lái)進(jìn)行測(cè)試

  • USE_EXISTING_CLUSTER表示使用一個(gè)已經(jīng)存在的控制平面
  • KUBEBUILDER_ASSETS 本地控制平面二進(jìn)制文件的文件夾路徑,里面包含了 kubectl apiserver和 etcd
  • KUBEBUILDER_CONTROLPLANE_START_TIMEOUT控制平面啟動(dòng)的超時(shí)時(shí)間
  • KUBEBUILDER_CONTROLPLANE_STOP_TIMEOUT控制平面停止的超時(shí)時(shí)間

編寫(xiě)測(cè)試

kubebuilder 在生成代碼的時(shí)候已經(jīng)幫我們生成好了相關(guān)的腳手架,已經(jīng)環(huán)境配置,我們只需要寫(xiě)具體的測(cè)試邏輯就行了

下面我們就以創(chuàng)建一個(gè) NodePool 為例子看看集成測(cè)試怎么寫(xiě)

  1. controllers/suite_test.go 

  1. var _ = Describe("node labels", func() { 
  2.  pool := &nodesv1.NodePool{ 
  3.   ObjectMeta: metav1.ObjectMeta{ 
  4.    Name"test"
  5.   }, 
  6.   Spec: nodesv1.NodePoolSpec{ 
  7.    Labels: map[string]string{ 
  8.     "node-pool.lailin.xyz/xxx"""
  9.    }, 
  10.    Handler: ""
  11.   }, 
  12.  } 
  13.  
  14.  It("create pool", func() { 
  15.   ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second
  16.   defer cancel() 
  17.   err := k8sClient.Create(ctx, pool) 
  18.   Expect(err).NotTo(HaveOccurred()) 
  19.  }) 
  20. }) 

使用 make test 執(zhí)行測(cè)試

  1. Using cached envtest tools from blog-code/k8s-operator/07-node-pool-operator/testbin 
  2. setting up env vars 
  3. ?       github.com/mohuishou/blog-code/k8s-operator/node-pool-operator  [no test files] 
  4. ok      github.com/mohuishou/blog-code/k8s-operator/node-pool-operator/api/v1   9.403s  coverage: 24.5% of statements 
  5. ok      github.com/mohuishou/blog-code/k8s-operator/node-pool-operator/controllers      10.390s coverage: 0.0% of statements 

總結(jié)

今天這篇文章主要還是希望起一個(gè)拋磚引玉的作用,沒(méi)有過(guò)多的去深入具體改如何寫(xiě)單元測(cè)試和集成測(cè)試,只是給了兩個(gè)例子,關(guān)于集成測(cè)試如果感興趣可以看看 https://onsi.github.io/ginkgo 和 envtest 的相關(guān)文檔。

對(duì)于 Operator 來(lái)說(shuō)建議能寫(xiě)單元測(cè)試的還是寫(xiě)單元測(cè)試,能夠本地寫(xiě)集成測(cè)試的就寫(xiě)集成測(cè)試這樣我們?cè)趯?shí)際上線的時(shí)候就會(huì)減少 bug 的概率,因?yàn)橄鄬?duì)于業(yè)務(wù)代碼來(lái)說(shuō) Operator 的測(cè)試實(shí)在是比較麻煩,對(duì)于測(cè)試同學(xué)的要求也比較高,一不小心就有可能遺漏一些問(wèn)題。

 

責(zé)任編輯:姜華 來(lái)源: mohuishou
相關(guān)推薦

2021-05-18 05:40:27

kubebuilderwebhook進(jìn)階

2021-05-12 06:18:19

KubeBuilderOperatork8s

2021-05-16 10:52:58

kubebuilderstatus event

2021-05-08 09:02:48

KubeBuilderOperatork8s

2021-01-01 09:20:20

操作DjangoORM

2023-04-20 08:00:00

ES搜索引擎MySQL

2021-05-20 06:57:16

RabbitMQ開(kāi)源消息

2021-07-26 09:31:09

自動(dòng)化測(cè)試編程語(yǔ)言手機(jī)編程

2021-06-16 08:28:25

unary 方法函數(shù)技術(shù)

2022-02-24 07:56:42

開(kāi)發(fā)Viteesbuild

2025-01-17 07:00:00

2022-03-10 08:31:51

REST接口規(guī)范設(shè)計(jì)Restful架構(gòu)

2021-10-27 09:59:35

存儲(chǔ)

2022-02-21 09:44:45

Git開(kāi)源分布式

2023-05-12 08:19:12

Netty程序框架

2021-07-28 10:02:54

建造者模式代碼

2021-07-14 08:24:23

TCPIP 通信協(xié)議

2021-06-30 00:20:12

Hangfire.NET平臺(tái)

2022-04-08 08:32:40

mobx狀態(tài)管理庫(kù)redux

2021-08-11 07:02:21

npm包管理器工具
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲精品一二三区 | 不卡一区二区三区四区 | 91精品一区 | 亚洲美女av网站 | 久久久久国产一区二区三区四区 | 91热爆在线观看 | 91动漫在线观看 | 久久精品福利视频 | 69视频在线播放 | 久久久久久亚洲精品 | 日韩高清黄色 | 日韩中文在线视频 | 久久精品视频一区二区三区 | 激情一区二区三区 | 成人国产在线视频 | 亚洲视频免费 | 一级在线毛片 | 国产精品1区2区3区 男女啪啪高潮无遮挡免费动态 | 人碰人操| 一区二区三区国产好 | 91精品国产综合久久婷婷香蕉 | 国产一区二 | 二区av| 精品1区 | 国产精品久久国产精品 | 国产免费一区二区 | 亚洲欧美日韩在线 | 96国产精品久久久久aⅴ四区 | 免费国产黄网站在线观看视频 | 二区亚洲 | 日韩精品在线看 | 久久精品亚洲精品国产欧美 | 亚洲精品久久久久久久不卡四虎 | 在线观看免费福利 | 欧美一区二区三区视频在线观看 | 综合色久| 91资源在线 | 久久四虎 | 午夜影院在线观看 | 91色视频在线观看 | 亚洲一区国产精品 |