在Kubernetes集群中运行E2E测试

时间:2018-07-14 09:45:07

标签: kubernetes e2e-testing nightmare

我们有一个相当简单的FE-BE组合,可将其部署到K8S集群(BE的Java + Spring Boot,FE的基于静态React的Web应用程序)。我们还在研究行使整个系统的各种E2E场景(使用Nigthmare.js)。

为了简化在CI管道中运行E2E测试的过程,我也想在K8S中自己运行测试。例如,在其中一个项目上构建将更新图像,并触发E2E作业运行,然后将(例如)将Helm图表安装到唯一的名称空间中,然后在此处也运行E2E测试。我看到的好处之一是,该群集可以完全私有,而无需公共域名或外部网的任何其他暴露。

我仍然无法确定的是如何在此设置中实际运行测试。我正在考虑的一件事是Kuberenetes的工作,但我希望有人对此进行验证。另外,我不太确定如何为每次运行收集日志和指标:集群上像Prometheus和ElasticSearch之类的东西当然可以工作,但是我还需要将结果转发到CI / CD管道。

最重要的是,我需要在脑海中看到整个图片,而不是任何技术方面的内容。

谢谢!

2 个答案:

答案 0 :(得分:0)

您应该在两个项目的git push上部署并运行测试,因此自然应该将其作为CI的一部分。

一种可行的方法是,在git push上构建映像,然后使用头盔图表将整个堆栈与该新映像一起部署,然后旋转另一个容器来运行e2e测试。根据您的部署方式,您可能必须向部署所在的e2e容器提供

另一种方法是,您有一个前端部署,它指向您的后端的公开测试部署。我们将其称为后端测试部署和前端集成测试部署。明智的代码前端是master,但指向后端可能根本不起作用。在git push to backend上,您可以构建并推送容器,然后在测试后端上设置映像,等待推出,然后针对集成的测试前端运行测试。而且,您还必须以其他方式做同样的事情

答案 1 :(得分:0)

头盔确实具有idea of a test,可用于运行测试命令。但是听起来您的问题更多是关于如何使测试在容器中运行。该示例显示了在容器中运行的单个shell命令。在您的情况下,您的测试也许将使用Java或量角器来实现。然后,您想要构建一个包含测试代码的容器,并在其中调用命令以运行它(例如NotificationCenter.default.addObserver(forName: NSNotification.Name.UIApplicationDidBecomeActive, object: nil, queue: .main) {[weak self] (noti) in guard let strongSelf = self else {return } // DO here whatever you want } )。

Helm也has post-install hooks,这可能是调用测试的另一种有趣方式。您需要配置安装,以确保挂钩运行之前所有服务都已完全启动。

您创建新名称空间并将其部署到声音中的想法与Jenkins-X概念类似,即创建预览环境并对每个请求请求进行测试。也许您正在考虑仅在专用的暂存/测试名称空间中运行测试。无论哪种方式,您都可能想要看看Jenkins-X。它使用构建容器的方式可能很有趣,因为它们从集群内部执行管道步骤。我认为gitlab也有类似的概念。但是,我感谢您可能已经选择了CI / CD解决方案。

或者您可能会仔细考虑一下,并决定从集群外部运行测试更加容易。这意味着要克服安全性障碍,但意味着您可以启动测试而不必将测试容器化。我怀疑这将取决于您的测试技术,安全设置和CI / CD。