我目前正在开展一个新项目,我们希望使用可重复使用的组件和服务开发新系统。
我们目前有30多个系统都具有共同的元素,但目前我们独立开发每个系统,因此感觉我们经常复制代码,当然我们有30多个单独的代码库来维护和支持。
我们想要做的是使用共享组件创建通用平台,以便快速开发新集合,重用代码并重用自动化测试并减少需要维护的代码库。
到目前为止,我们的想法是,我们将为特定模块提供公共代码库,例如用户管理和安全系统访问,这些模块可以包含他们自己的通用Web模块,API和Context。这将创建一个通用的代码包。
然后我们可以部署这些不同的组件/软件包来构建一个新的系统来一次又一次地保存相同模块的编码,所以如果新系统需要管理用户,你可以获得用户管理软件包并繁荣它你需要什么。但是,因为我们有30多个系统,所以我们将为每个集合多次部署组件。我们也理解一些系统需要独特的功能,因此有可能为通用模块添加扩展以满足系统特定需求,或者选择不使用其中一个通用模块并创建一个新模块,但使用其余模块通用组件。
例如,如果我们有4个通用组件组成系统A,B,C和D.可以部署这些组件来创建以下系统设置:
系统1 - A,B,C和D(对所有通用组件都满意)
系统2 - Aa,B,C和D(扩展组件A包含特定功能)
系统3 - A,E,C和F(不能重用组件B和D,因此创建特定的组件,但仍然重用组件A和C)
这给我带来了一些问题,因为我需要能够测试这个平台和每个系统,以确保它有效,这是我第一次遇到必须测试这样的设置
我已经围绕Mircroservices进行了一些阅读以及如何测试它们,但是这些通常仅针对使用微服务的1个系统解决问题,我们正在研究具有不同配置的多个系统。
到目前为止,我的想法让我相信,对于将由不同集合使用的通用组件,我可以在基本代码级别创建自动化测试,然后这些测试将确认通用功能,因此没有必要再次为每个组件重新测试这些功能,而不是在部署后进行手动检测。然后,在每个系统级别,可以添加其他自动化测试以检查可能创建的特定功能。
理想情况下,我希望设置某种测试平台,以便在对用户管理等核心组件进行更改时,可以触发核心的所有自动测试级别,然后是所有将共享组件的系统的特定系统测试,以确保任何更改不会影响核心功能或对特定系统产生影响。然后需要快速手动检查。我希望每次更改共享组件时都尝试删除大量的手动测试开销,检查30多个系统。
我们以敏捷的方式工作,对于我们当前的项目,我们设置了强大的持续集成过程,因此当开发人员检查某些代码(Visual Studio)时,这将触发将运行所有代码的CI构建(TeamCity / Octopus)单元测试,如果所有这些测试通过,则会触发一个Integration构建,该构建将运行我的QA自动化测试,这些测试是在API级别运行的测试和使用SpecFlow和PhantomJS或Selenium Webdriver的Web测试的混合。我们希望保留这种框架以保持快速反馈循环。
理论上这一切听起来都很棒,但我在努力尝试将某些东西付诸实践并制定合理的测试策略以涵盖这种系统设置。
所以我真的希望有一个人在过去曾经遇到过类似的事情,并且想到了解决这个问题的最佳方法,并证明了他们的工作。
我热衷于更好地了解如何设置测试平台/装备以帮助所有系统的持续集成,因为每个系统可能看起来不同,但共享代码。
您认为可能有帮助的任何想法或链接到博客/白皮书等都会非常感激!!
答案 0 :(得分:1)
你的方法很好,很快我就不得不面对像你这样的问题 - 到目前为止我可以给你我的想法。
我非常肯定创建一个完善的测试策略来涵盖这种系统设置
无法在一个帖子中挤入。所以大局看起来像这样(对我来说) - 你处于Enterprise application integration过程的中间,被测试的基本依据是Data migration。也许您需要考虑Service-oriented architecture
的概念使用共享组件的通用平台
因为它可以让您将应用程序功能作为服务提供给其他应用程序。这里间接的好处是SOA涉及大大简化的测试。服务是自治的,无状态的,具有完全记录的接口,并且与实现的横切关注点分开。有很多资源,例如 E2E testing 或efficiently testing SOA。