Mini-Mesos:一个Mesos的测试基础框架

本文讲的是Mini-Mesos:一个Mesos的测试基础框架,【编者的话】Mini-Mesos建立在思科Intercloud服务与Container Solutions服务合作的基础上,它是基于 Apache License 2.0版本下的开源项目。本文主要介绍了在容器解决方案与极限编程(XP)之间所存在的一些联系,以及如何在发展集容器化应用和Mesos框架的同时还开展TDD的核心XP实践和持续集成,介绍了用于构建Mesos框架的测试工具Mini-Mesos。

大多数人知道我是通过极限编程(XP)和XP相关的东西如:面向对象编程,测试驱动开发,测试数据管理和高效系统构建。对于一些人来说,我们所做的工作在容器解决方案和XP之间的联系似乎很弱或根本不存在。但是,仔细想一想,你会发现这两者之间的联系是很强的。

极限编程所讲都是关于缩短反馈回路的,这里是典型的洋葱图:

Don Wells, 2001, via wikipedia.

反馈回路在XP中是非常重要的,因为该方法试图帮助开发团队更快地响应客户的需求。这就是为什么,尽管面向对象(或面向组件)的开发并非XP中明确的组成部分,但它是重要的,因为设计良好的对象可以快速地重新组合以服务于新的客户需求。这就是为什么重构和测试驱动开发是XP的必要组成部分。

重构和测试驱动开发

重构是在不改变功能的情况下改进代码。如果没有配套的测试来确保代码以相同的方式运行,这样做是非常危险的。

测试驱动开发(TDD)是关于设计的。由于先写测试样例,我们不得不考虑我们的接口和对象之间的相互作用。在 Steve Freeman 和 Nat Pryce的大力推广下,对于不断成长的面向对象系统来说,使用模拟对象的TDD是一个非常好的方法。

TDD的一个很大的副作用是,你将剩下一套像样的测试用例,这就意味着你可以在或多或少的安全状态下重构代码。 (一旦测试用例写定,测试套件就是一种安全网和检查的集合,以确保一切都或多或少地如重构之前一样工作)。

测试基础设施

正如使用TDD一样,我们很多人过去通常为基础设施编写测试用例。比如,我过去通常编写测试用例来ping通所有的数据库、消息系统以及确保支付系统正常运行等。我们这样做有两个原因。首先,如果出现问题,测试套件将会指向问题所在之处,测试用例用来诊断问题。其次,我们这样做是因为我们经常无法控制基础设施,这些测试帮我们向监控staging、pre-prodoction和生产环境的运维团队传递信息。

云端

一旦云技术开始变得普遍,我们就不得不思考,如何在不破坏我们过去习以为常的紧密反馈循环的情况下向云端部署。换句话说,我们必须仔细考虑如何部署,测试和重构我们基于云的系统。这确实是很重要的,比如我们如何启动云端的虚拟机,然后根据新的用户需求来更新它?我们如何在本地来重建云端来解决任何基础设施的问题?

Mesos

随着云技术以及我们所构建的一系列解决方案的发展,一年前,Apache Mesos闯入我们的生活,该工具使我们能够更有效地利用我们的硬件。对于拥有大量的计算资源的客户来说,这是很重要的,因为使用Apache Mesos确实可以给他们节省大笔资金。(关于Mesos好处更加详细的解释可以在容器解决方案的网站上,Phil Winder所撰写的一篇文章中找到)。

那么,对于我们来说,一旦Mesos的时代来临,一个新的问题将会出现:我们如何在发展集容器化应用和Mesos框架的同时还开展TDD的核心XP实践和持续集成?

引入Mini-Mesos

容器解决方案提供了两个关键的服务。一方面,它们能够在生产环境中顺利部署和管理应用。另一方面,他们提供应用开发。因此,我们必须拿出一些工具来帮助应用程序开发和基础设施设计。

迅速解决操作性问题的一种方法是重现在你笔记本中的完整的开发环境,Docker组件只需一小步便可实现。不幸的是,它不具有对Mesos的任何支持,这就意味着我们必须建立自己的Mesos集群,并部署到Docker中,然后手动运行我们的测试,这可能需要几分钟,而对于较复杂的框架,可能需要几十分钟。因此,XP提供的反馈回路被彻底摧毁。我们意识到我们不得不创造自己的测试工具,用于构建Mesos框架。我们称这种工具Mini-Mesos。

Mini-Mesos有三个主要特点:

  • 它允许开发人员在他们的本地机器上启动Mesos集群,来完成他们正在开发的任何框架。
  • 它具有以编程方式操作集群的API。我们称之为“容器API。”
  • 它具有用于查询集群状态的API。我们称之为“集群状态API。”这个API可以让我们获得集群的状态以运行自动化测试。

由于这些特征,首先我们能够构建自己的容器化应用程序和Mesos框架的测试,这提高了设计并使得我们能够进行快速重构。因为我们可以实例化集群,运行测试套件,并在几秒钟内摧毁它,所以我们有一个快速的开发周期;也就是说,在确认我们最近的改变之前,我们并没有部署到真正的云端,或者引入我们的代码。

总之,Mini-Mesos使我们在开发应用和框架时能够利用我们最喜爱的开发方法:极限编程。 

总结

1998年,我还是一个学生,我用Java的反射库瞎搞出一个测试运行器用来寻找以“test”开头的方法,后来,我发现了JUnit的,可能当时我傻笑着想竟然让我偶然发现了一个好方法。

那时候,我们需要构建自己的工具来实践XP,现在也是如此。我们要打造工具以便允许我们针对云端来实践XP。Mini-Mesos就是一个让我们能够做到这一点的工具。这是一个新东西,现在已经在我们的工具之列,它几乎包含了Apache的Mesos,Hashicorp的Terraform,各种CI工具,当然也包括JUnit。总之,这些新的工具和旧的经典工具正在为分布式系统的发展提供新的SDK基石。

有关Mini-Mesos如何使用的例子,请参见Git上的Mesos/ ElasticSearch项目,更多详情参见Mini-Mesos

原文链接:Mini-Mesos: What’s a Nice XPer Doing in a Company Like This?(翻译:李加庆

原文发布时间为:2015-10-12

本文作者:YiGagyeong 

本文来自合作伙伴DockerOne,了解相关信息可以关注DockerOne。

原文标题:Mini-Mesos:一个Mesos的测试基础框架

时间: 2024-10-29 13:10:27

Mini-Mesos:一个Mesos的测试基础框架的相关文章

介绍一个简单的JavaScript类框架_基础知识

 在写work-in-progress JavaScript book一书时,对于javascript继承体系,我花费了相当的时间,并在该过程中研究了各种不同的模拟经典类继承的方案.这些技术方案中,我最为推崇的是base2与Prototype的实现. 从这些方案中,应该能提炼出一个具有其思想内涵的框架,该框架须具有简单.可重用.易于理解并无依赖等特点,其中简单性与可用性是重点.以下是使用示例:   var Person = Class. extend ( { init: function (is

选择测试自动化框架

基于只使用一种捕获工具例如IBM Rational Robot来录制并且回放测试用例而得出自动化测试工作量是有缺陷的.只使用一种捕获工具来运行复杂且巨大的测试是非常耗费时间和昂贵的.因为这些测试是随机创建的,他们的功能性是很难追踪和重现,而且维护成本也是非常昂贵的. 对于一个刚刚起步的自动化测试小组,更好的选择是使用一种测试自动化框架,它已经定义好了由一些假设,概念和制定工作平台或为自动化测试提供支持的实践组成的集合.在这篇文章中我试着将一些我熟悉的测试自动化框架-特别是测试脚本模块化,测试库构

DeepEarth中的几何图形基础框架模型

众所周知,DeepEarth是一套基于Silverlight的DeepZoom技术实现的开源地图开发组件,其内部提供 了常用的地图开发工具控件和通用的基础模型,如线条.多边形.不规则图形.图片等一系列图形图像的 基础架构模型,这为使用DeepEarth进行地图二次开发提供了非常方便的基础架构接口.本篇将介绍在 DeepEarth中的几何图形架构设计和所提供的基础架构模型框架. 在DeepEarth的几何图形架构中提供了最基础的几何图形应用开发模型,包括几何图层.点.线.多边 形.不规则图形等,在

JS运动基础框架实例分析

 这篇文章主要介绍了JS运动基础框架,实例分析了javascript定时器及div样式的使用技巧,需要的朋友可以参考下     本文实例讲述了JS运动基础框架.分享给大家供大家参考.具体分析如下: 这里需要注意: 1. 在开始运动时关闭已有的定时器 2. 把运动和停止隔开 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title&g

mybatis学习笔记之基础框架(2)

mybatis学习笔记之基础框架(2) mybatis是一个持久层的框架,是apache下的顶级项目. mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成满足sql语句 mybatis可将向prparedStatement中的输入参数自动进行输入映射,将查询结果集灵活映射成java对象.(输出映射) SqlMapConfig.xml(是mybatis的全局配置文件,名称不固定) 配置了数据源/事务等mybatis运行环境 配置映射文件(配置sql语句) m

创建一个有效的GUI自动化框架

一个良好的自动化测试框架应该具备灵活的,与应用程序无关的,与技术无关和不过时的特点.本文强调的准则可以帮助开发者深层分析测试方案中的代码.这种能力已经被证明在多个自动化项目上是有效的. "自动化框架"这个术语已经为软件测试领域所熟知.尽管很多人都把它与应用在基于UI自动化的技术联系起来,但是它几乎总是被滥用于那些参与测试领域.这大部分的原因是由于大家对自动化框架的应用领域有误解.它应该不仅仅像Coded UI那样,只是一个单纯的UI技术. 现在,市场上有很多商业性的和开源的测试自动化框

JS运动基础框架实例分析_javascript技巧

本文实例讲述了JS运动基础框架.分享给大家供大家参考.具体分析如下: 这里需要注意: 1. 在开始运动时关闭已有的定时器 2. 把运动和停止隔开 复制代码 代码如下: <!DOCTYPE html>  <html>      <head>          <meta charset="utf-8">          <title></title>          <style type="te

一个.net分页测试源码

分页   一个.net分页测试源码作者:淘特网 出处:淘特网 注:转载请注明出处  <% @ Page Language="C#" %><% @ Import Namespace="System.Data" %><% @ Import Namespace="System.Data.SqlClient" %><Script Language="C#" Runat="Server

介绍一个简单的JavaScript类框架

  这篇文章主要介绍了一个简单的JavaScript类框架,有助于初学者理解JS类的创建与继承,需要的朋友可以参考下 在写work-in-progress JavaScript book一书时,对于javascript继承体系,我花费了相当的时间,并在该过程中研究了各种不同的模拟经典类继承的方案.这些技术方案中,我最为推崇的是base2与Prototype的实现. 从这些方案中,应该能提炼出一个具有其思想内涵的框架,该框架须具有简单.可重用.易于理解并无依赖等特点,其中简单性与可用性是重点.以下