社区的代码规范及e2e测试

2023-11-15

golangci-lint

静态代码检查工具,是对golint、gofmt的集成,速度更快。

1、安装

go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.38.0

golangci-lint run [目录]/[文件]

最新的版本是1.42.0,社区使用的是1.38.0,总体来说是规则越来越严,我们和社区保持一致即可;

2、Linters

  1. deadcode,未使用函数和方法的检查;
  2. errcheck,未处理错误,例子+1;
  3. gosimple,简化代码;
  4. govet,锁拷贝检查、循环变量捕获问题、printf 参数不匹配;
  5. ineffassign,无效的资源申请,分配了内存但是没有使用,例子+1;
  6. staticcheck,ge vet的加强版,例子+1;
  7. structcheck,检查结构体中未使用的字段;
  8. typecheck,检查类型是否合理;

3、例子

golangci-lint run .\pkg\addon\ 
golangci-lint run .\pkg\apiserver\rest\webservice\

e2e测试

e2e,端到端测试,即k8s的集成测试。

e2e测试需要一个真实的k8s集群,主要借助controller-runtime/pkg/envtest,在运行时,它会启动一个真正的 API Server 和 etcd,随后把 CRD 注册到 Scheme 中,但是并不会启动Controller Manager、kubelet等,这也意味着来自 API Server 的关于 Kubernetes 资源的事件不会真正被处理。

测试框架是ginkgo+gomega

1、安装

go install github.com/onsi/ginkgo/ginkgo

go install github.com/onsi/gomega/...

2、基础知识

ginkgo 提供了多个类型的 block,包括Describe、Context、It等,

Describe, Context, When组织成Tree结构: Describe是root, Context和When是普通TreeNode.

BeforeSuite()          :在Describe 容器运行之前执行;
BeforeEach()           :每个测试用例运行前执行的操作,位于 Describe 中,可以有多个
JustBeforeEach()       :和BeforeEach()类似,在所有的 BeforeEach()之后和It()之前执行
AfterEach()            :每个测试用例运行后执行的操作
JustAfterEach()        :紧跟在It()之后执行;
AfterSuite()           :在Describe容器之后执行

Describe()             :最顶层的测试用例包裹容器,同一目标的测试用例,可以嵌套
Context()              :比 Describe 低一级的测试用例包裹容器,同一个条件下的测试用例
It()                   :单一的测试用例,位于 Describe 或者 Context 中
Specify()              :It()的别名,用途和 It() 完全相同
Eventually()           :测试异步逻辑: 如发送请求到队列, 需持续polling. 在Gomega实现:

断言方式

type Assertion interface {
    Should(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool
    ShouldNot(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool

    To(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool
    ToNot(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool
    NotTo(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool
}

3、购物车的例子

4、addon的例子

PR前的准备

win10-1903、wsl2、ubuntu18.04、kind、docker desktop;

readme-generator生成测试覆盖率报告。

sign-off-by

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

社区的代码规范及e2e测试 的相关文章

  • k8s之ReplicaSet

    我们在定义pod资源时 可以直接创建一个kind Pod类型的自主式pod 但是这存在一个问题 假如pod被删除了 那这个pod就不能自我恢复 就会彻底被删除 线上这种情况非常危险 所以今天就给大家讲解下pod的控制器 所谓控制器就是能够管
  • 十六、K8s安全管理与资源限制

    实验环境 按照图示部署好了K8s集群 一个Master 两个worker nodes 访问控制概述 apiserver作为k8s集群系统的网关 是访问及管理资源对象的唯一入口 余下所有需要访问集群资源的组件 包括kube controlle
  • 删除Pods

    通过删除job删除Pods 否者pods会重启 def cmd kubectl command try r os system kubectl command if r 0 print f Fail kubectl command retu
  • K8s基础10——数据卷、PV和PVC、StorageClass动态补给、StatefulSet控制器

    文章目录 一 数据卷类型 1 1 临时数据卷 节点挂载 1 2 节点数据卷 节点挂载 1 3 网络数据卷NFS 1 3 1 效果测试 1 4 持久数据卷 PVC PV 1 4 1 效果测试 1 4 2 测试结论 二 PV PVC生命周期 2
  • Liveness、Readiness 和 Startup Probes

    liveness apiVersion v1 kind Pod metadata labels test liveness name liveness exec spec containers name liveness image k8s
  • k8s安装遇到过的一些问题

    无法获取recomended yaml文件 root k8master1 wget https raw githubusercontent com kubernetes dashboard v2 7 0 aio deploy recomme
  • k8s删除Terminating 的命名空间等资源

    背景 在k8s中执行删除命名空间后 命名空间没有被删除而是处于Terminating状态 此时再执行删除仍然删除不掉 解决 将要删除的命名空间信息导出为json数据 下面traefik v2 替换成你需要删除的命名空间名称 kubectl
  • docker下mysql镜像初始化

    目录 1 介绍 2 部署及验证 2 1 场景复现 2 2 创建dockerfile 2 3 初始化脚本 2 4 构建镜像并查看 2 5 创建容器并验证 2 6 完成 1 介绍 原理 当Mysql容器首次启动时 会在 docker entry
  • k8s基础概念、ETCD

    原理 和k8s结合点 etcd与k8s的交集 维护 基础概念 物理组件 逻辑组件 网络组件 工作负载 1 物理组件 Master Control plane kube apiserver 提供唯一api接口 提供集群管理接口 用户认证授权
  • Rancher 全球化部署最佳实践

    作者 万绍远 CNCF 基金会官方认证 Kubernetes CKA CKS 工程师 云原生解决方案架构师 对 ceph Openstack Kubernetes prometheus 技术和其他云原生相关技术有较深入的研究 参与设计并实施
  • k8s基本命令

    k8s命令 https kubernetes io zh docs tutorials kubernetes basics 官网地址 基本命令 查看节点服务器 kubectl get nodes 查看命名空间 kubectl get ns
  • kubernetes最佳实践(三) - kubedns部署

    1 服务发现 kubernetes 提供了 service 的概念可以通过 VIP 访问 pod 提供的服务 但是在使用的时候还有一个问题 怎么知道某个应用的 VIP 比如我们有两个应用 一个 app 一个 是 db 每个应用使用 rc 进
  • 从Docker到Kubernetes——K8s网络核心原理

    文章目录 Dokcer的网络模型 kubernetes网络核心原理 IP per Pod模型 Kubernetes网络插件flannel Dokcer的网络模型 Dokcer默认使用单主机的网络方案 它默认创建一个名为docker0的网桥
  • Kubernetes + Dashboard 集群搭建

    1 环境说明 基于kubeadm工具部署k8s 集群 还有基于二进制的部署方式但是需要单独部署k8s的每个组件比较繁琐 kubeadm是 Kubernetes官 提供的 于快速部署Kubernetes集群的 具 基于Kubernetes v
  • k8s问题 CrashLoopBackOff

    我们创建资源发现资源出现CrashLoopBackOff解决 CrashLoopBackOff 告诉我们 Kubernetes 正在尽力启动这个 Pod 但是一个或多个容器已经挂了 或者正被删除 root localhost kubectl
  • namespace命令空间

    目录 1 解决什么问题 2 基本介绍 2 1 定义 2 2 应用场景 3 使用案例 4 资源配额 5 标签 5 1 定义 5 2 pod资源打标签 5 3 查看标签 1 解决什么问题 命令空间类似于C 中的命名空间 当用户数量较多的集群 才
  • Kubernets原理分解

    主节点 master 快速介绍 master也要装kubelet和kubeproxy 前端访问 UI CLI kube apiserver scheduler controller manager etcd kubelet kubeprox
  • 决战k8s,Kubernetes、Master节点部署组件,部署kube-proxy、测试、部署Dashboard(Web UI)、超细详解 ,安装篇③完结篇

    文章目录 下面这些操作在master节点完成 创建kubeconfig文件 创建kube proxy kubeconfig文件 下面这些操作在node节点完成 俩个节点上面拉取镜像 systemd管理kubelet组件 部署kube pro
  • k8s部署Prometheus抓取pods的metrics

    1 暴露pods给Prometheus抓取 spec replicas app replicas template metadata annotations prometheus io scrape true prometheus io p
  • K8S学习--Kubeadm-7--Ansible二进制部署

    K8S学习 Kubeadm 安装 kubernetes 1 组件简介 K8S学习 Kubeadm 安装 kubernetes 2 安装部署 K8S学习 Kubeadm 3 dashboard部署和升级 K8S学习 Kubeadm 4 测试运

随机推荐

  • 如何用Python将普通视频变成动漫视频

    文章目录 容我废话一下 一 思路流程 二 图像转动漫 三 视频帧读取与视频帧写入 容我废话一下 最近几个月 毒教材被曝光引发争议 那些编写度教材的人着实可恶 咱程序员也没有手绘插画能力 但咱可以借助强大的深度学习模型将视频转动漫 所以今天的
  • CentOS入门

    1 CentOS 是RHEL的克隆版本 但其更新 如升级 漏洞修复等 要比RHEL慢一点 因其稳定 长期的升级支持 保守性以及大规模使用性能稳定等因素被企业普遍使用 RHEL发行方式有两种 一是发行二进制 二是发行源码 而CentOS就是将
  • Android Studio一课一得

    一 概述 Android Studio是由Google开发的官方集成开发环境 IDE 主要用于Android平台上应用程序 App 及游戏的开发 Android Studio提供了丰富的工具和功能 包括代码编辑器 可视化布局编辑器 调试器和
  • 无限重置IDEA试用期的小脚本

    1 Reset the trial period of IDEA vbs Set wsshell CreateObject WScript Shell Set filesys CreateObject Scripting FileSyste
  • 层次分析法小结

    层次分析法的步骤 建立层次结构模型 构造成对比较矩阵 层次单排序及其一次性检验 层次多排序及其一次性检验 1 建立层次结构模型 层次结构模型一般分为三个部分 目标层 也就是我们最终需要寻找出来的最佳结果 通常为一个 准测层 结果优劣的判断因
  • Spark读取外部数据的几种方式

    一 spark读取csv文件 四种方式 方式一 直接使用csv方法 val sales4 DataFrame spark read option header true option header false csv file D Soft
  • lu分解法解线性方程组 python_一篇文章入门大规模线性方程组求解

    前面介绍过主要的线性方程组求解库 参考附录 求解大规模线性方程组是仿真软件求解器的底层技术 求解器时间基本都消耗在方程组求解上 线性方程组的解法比较成熟 方法也有很多 而且不同的方法对应不同类型方程组 所以在方法选择上实际很讲究 商业软件通
  • linux内核的 等待队列 使用方法,wait_queue_head_t,进程休眠

    当你在用户空间需要读写一大片数据的时候 这个就用上了 以下来自 http www yuanma org data 2006 1207 article 1916 htm 假设我们在 kernel 里产生一个 buffer user 可以经由
  • Linux常用操作指令

    Linux操作系统 linux基础指令 命令 解释 命令 解释 ps ef aux 查看进程 history 查看历史命令 whatis 一句解释 2 把编号为2的历史命令再来一次 man 查看解释 uname hostnam clear
  • H2数据库使用

    H2最完整的资料下载地址 http download csdn net detail yixiaoping 5956595 H2数据库使用 H2数据库介绍 常用的开源数据库 H2 Derby HSQLDB MySQL PostgreSQL
  • MySQL 通用查询日志与慢查询日志

    MySQL中的日志包括 错误日志 二进制日志 通用查询日志 慢查询日志等等 这里主要介绍下比较常用的两个功能 通用查询日志和慢查询日志 1 通用查询日志 记录建立的客户端连接和执行的语句 2 慢查询日志 记录所有执行时间超过long que
  • python制作飞机大战代码_python实现飞机大战完整代码,可运行

    我发现很多python代码飞机大战在互联网上 但几乎没有一个是完整的 所以我做了一个完整的人 python代码分为两个文件 工具类和主类 python版本 pygame模块需要安装 完整的代码如下 1 工具类plane import ran
  • android 自定义RadioButton样式

    上面这种3选1的效果如何做呢 用代码写 其实有更简单的办法 忘了RadioButton有什么特性了吗 我就用RadioButton实现了如上效果 其实很简单的 首先定义一张background 命名为radio xml 注意该backgro
  • webdriver用法

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 webdriver是什么 百度搬运 二 使用步骤 1 引入库 2 基本调用 总结 前言 webdriver库 本片文章主要记录webdriver一些常用的
  • Ubuntu下python环境搭建

    一般ubuntu系统会自带安装python2 x 和python3 x两个版本 我使用的ubuntu16 04自带python2 7和python3 5 我们只需要安装pip以及virtualenv 管理python环境 多项目部署时pyt
  • 清除计算机垃圾cmd命令,cmd清理垃圾命令代码是什么

    类型 系统其它大小 21 5M语言 中文 评分 10 0 标签 立即下载 电脑用久了是会堆积一些系统垃圾的 这类垃圾不好清理 很多小伙伴选择使用cmd清理垃圾命令代码来清理 cmd清理垃圾命令代码是什么 西西小编来为大家介绍 cmd清理垃圾
  • 操作系统、驱动和硬件的关系的思考

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 这些问题是困扰一个人理解整个电脑架构的难点 比如 操作系统和驱动是什么关系 为什么需要驱动 cpu 内存需要驱动吗 为什么操作系统可以先装到电脑上 然后再去安装其它驱动 比
  • 23个最有用的ES检索技巧(Java API实现)

    前言 本文是对 23个最有用的Elasticseaerch检索技巧 一文提到的ES检索技巧进行 Java API 的简单实现 但仅限于简单实现 并不考虑包括参数校验 异常处理 日志处理 安全等问题 仅供参考 代码见 UsefullESSea
  • WebService_HelloWorld_笔记

    创建服务端步骤 1 定义服务接口和实现类 2 给接口和实现类加上注解 3 发布服务 http localhost 8888 ns wsdl http localhost 8888 ns xsd 1 package biz codeworm
  • 社区的代码规范及e2e测试

    golangci lint 静态代码检查工具 是对golint gofmt的集成 速度更快 1 安装 go install github com golangci golangci lint cmd golangci lint v1 38