Kubernetes End-to-End Testing for Everyone中文摘要

更易用的K8S End-to-End 测试

英文版原文,时间2019年三月
K8S越来越多元件独立于K8S本身独立开发。
如存储驱动,早先被编译进K8S的binary,后来演变成独立binary,再到以Container Storage Interface(CSI)以POD形式部署在K8S本身。

如何对外部元件,如Intel的Open Infrastructure Manager(OIM)和PMEM-CSI做end to end测试,是个挑战。对K8S本身测试的E2E framework可以直接使用,但因涉及外部依赖多,处理起来麻烦。本篇文章概述了K8S1.13的优化。

End to End 测试包含了下面多个步骤:

  1. 实现一组test suite。这也是本篇的重点,K8S E2E框架是由Go写成的,使用Ginkgo做用例管理、Gomega做断言。这些工具支持Behavior Driven Development(BDD)模式,用例透过client-go和K8S交互。
  2. 启动一个K8S测试集群。可用kubetest工具。
  3. 在K8S测试集群执行End to End test suite。测试工具透过环境变量KUBECONFIG指向的文件链接K8S(如kubectl)。

下面列出目前优化的一些方向:

分离provider

E2E framework在1.12版本以下没有和provider SDKs做解耦,而这些只在特定测试中被使用。现在移到可选的test packages(test/e2e/framework/providers)目录底下。E2E framework透过接口调用,然后由各vendor package实现。
E2E test suite决定哪些test packages被import,vendor package透过–provider命令行flag启动生效。

外部文件

测试可能在runtime需要读额外的文件,如.yaml manifests,一般为了简化搬运和执行的过程,透过go-bindata将test/e2e/testing-manifests目录下的文件链接到K8S e2e.test binary。现在是bindata支持是可选的,目录可配置且限制更少。

测试参数

v1.12 将测试参数处理集中在test/e2e/framework/test_context.go 透过flags处理,但对独立framework的tests需要其他方法。目前做法是透过特殊的package去定义自己参数。参数透过下面方式被处理:

  • test packages的init代码定义了tests和参数。tests定义不能使用这些参数,因为参数还没有实际的值。
  • test suite的init代码解析了参数和配置文件。
  • tests执行时可以使用参数。

另外,目前也支持透过动态获取配置文件(Viper)的方式。目前这个方法有些弊端,正持续优化。

.yaml manifests支持多个items

E2E framework新方法已经支持了.yaml manifests有多个items,且做一些patch(例如每一个test可以有独立的namespace)。目前这个功能也被用在CSI drivers的测试,每一次测试都会产出多个items,包含重新部署CSI drivers。
当然更好的做法是部署一次CSI drivers,然后tests共同使用。这部分仰赖测试环境工具拓展支持CSI drivers部署的功能。

K8S 1.14将带来的改进
  • E2E framework已有的storage tests可被其他CSI drivers test suite复用。
  • 跳过unsupported测试定义已经被丢弃。
  • 易读的测试定义。
  • 测试外部drivers还有些优化。
E2E test suite HOWTO

Test suite初始化:
重点看e2e_test.go 和 e2e.go。
e2e_test.go包含import 多种providers, in-tree tests,Viper配置支持,和bindata文件查找。
e2e.go控制实际的执行,包含集群准备和metrics收集。

新增E2E storage tests:
test suites importtest packages定义了E2E测试。E2E测试比较特别的是会用framework.NewDefaultFramework方法实例化framework.Framework指针(常用f)。这个变量会在每个test的BeforeEach重新初始化,然后在AfterEach释放。测试时可在runtime使用f.ClientSet和f.Namespace。

Vendors:

编译和执行test suite:
go test ./test/e2e -args -help -> help查看说明
go test -timeout=0 -v ./test/e2e -ginkgo.v -> 跑所有测试
ginkgo -p ./test/e2e -> 并发跑测试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip
综合小区管理系统管理系统按照操作主体分为管理员和用户。管理员的功能包括报修管理、车位管理、车位分配管理、出入管理、字典管理、房屋管理、物业费缴纳管理、公告管理、物业人员投诉管理、我的私信管理、物业人员管理、用户管理、管理员管理。用户的功能包括管理部门以及部门岗位信息,管理招聘信息,培训信息,薪资信息等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 综合小区管理系统管理系统可以提高综合小区管理系统信息管理问题的解决效率,优化综合小区管理系统信息处理流程,保证综合小区管理系统信息数据的安全,它是一个非常可靠,非常安全的应用程序。 管理员权限操作的功能包括管理公告,管理综合小区管理系统信息,包括出入管理,报修管理,报修管理,物业费缴纳等,可以管理操作员。 出入管理界面,管理员在出入管理界面中可以对界面中显示,可以对招聘信息的招聘状态进行查看,可以添加新的招聘信息等。报修管理界面,管理员在报修管理界面中查看奖罚种类信息,奖罚描述信息,新增奖惩信息等。车位管理界面,管理员在车位管理界面中新增。公告管理界面,管理员在公告管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值