【问题标题】:What tool to test complex multi-processes system?有什么工具可以测试复杂的多进程系统?
【发布时间】:2013-04-29 10:42:51
【问题描述】:

我们有一个由许多程序和脚本组成的数据采集系统,这些程序和脚本在不同的机器上一起运行,其中一些是顺序的,大多数是并行的。

我们使用 Jenkins 来构建和运行单元测试。

我们现在想通过使用数据生成器作为系统的输入并检查数据采集链的输出来测试整个系统。

系统测试步骤的简化视图:

  1. 恢复系统(数据库、存储库中的包、重新启动虚拟机)
  2. 根据需要配置系统(编写要使用的配置文件,更新数据库)
  3. 启动所需的几个父进程并等待它们准备好
  4. 开始数据输入
  5. 完成后,收集指标和结果,与预期结果进行比较,检查日志中的错误消息,...

理想情况下,我们应该使用不同的配置和输入来运行它。

你会用什么工具来做呢?还是您会尝试直接在 jenkins 中进行操作?

【问题讨论】:

    标签: jenkins automated-tests


    【解决方案1】:

    您没有告诉我们足够多的设置来给您具体的答案。这在很大程度上取决于您使用的语言/环境。您可能需要以下一项或多项的组合:

    • Vagrant/Chef 或 Puppet/Veewee/VirtualBox 自动构建虚拟机并配置和运行它们。这是假设一个Linux平台。 Chef + Linux 容器要快得多,特别是如果您在 ram 磁盘上运行它(它应该是一个可重复的过程,所以只需要存储工件)
    • 具有版本控制的包缓存,适用于您需要在 VM 上安装的所有系统包
    • 一些运行验收测试的框架,Cucumber,Robot 等等。如果你的单元测试是好的,你也许可以摆脱冒烟测试。
    • 系统的模拟,您可以从日志中提供运行时结果,以便了解如何以及何时进行扩展。

    您很可能会遇到测试缓慢的问题,因为您必须填充数据库,并且可能必须拆分测试作业。一般来说,让这个工作的反馈循环太慢了,你可能需要非常有创意才能获得可接受的周期时间。

    在不同的环境中,有不同的工具可以做到这一点,拥有多个堆栈并没有多大乐趣。 Jenkins 在 Java 堆栈上运行,Puppet 和 Chef 在 Ruby 堆栈上运行,Python、c 和 perl 堆栈也有类似的工具。您必须自己决定是否要在集成问题方面拥有一流的水平,还是要拥有一个堆栈并自己编写代码。两者都可以工作,而且都不是微不足道的。团队经验很可能是其中的决定因素。

    DevOps 中的反馈循环比现代 CI 开发环境的反馈循环差很多,因此您必须提前进行更多的规划和研究。你一天可以运行的实验数量要少得多,至少是 20 倍左右,所以第一次让事情成功是很困难的。确保您有经验丰富的人这样做。

    【讨论】:

      【解决方案2】:

      答案是:Robot Framework(参见12)。

      • 支持数据驱动测试和行为测试
      • 测试是使用用户定义的关键字以类似人类的语言编写的。易于开发、易于阅读、易于维护。
      • 许多库可以访问不同的功能(ssh 连接、数据库......)
      • 可以使用用 python、java 或其他语言编写的自定义库进行扩展。
      • 为每个测试生成详细的日志

      我不了解 Jenkins,但我很确定您可以将 Robot Framework 与它集成。就像运行 Python 脚本一样简单。

      【讨论】:

        【解决方案3】:

        根据系统的复杂程度,您可以使用多种工具。通常,您需要某种工作流程,并在最后显示结果。让我给你一些工具/插件,而不是给出一个明确的答案。

        詹金斯:

        • MultiJob 插件可让您将工作流指定为多个阶段,其中包含并行作业阶段
        • BuildFlow 插件让您可以在简单的 DSL 中创建自己的构建流程,其中包含并行和相关作业。
        • Plot 插件用于收集指标并随时间绘制这些指标
        • xUnit 插件用于从测试中捕获 JUnit 样式 xml 或 JSON,例如由一个小脚本或 xUnit 框架(如 Python 的 py.test 或其他更花哨的东西)生成。
        • RobotFramework plugin 与 OFrandeDiEnne 的回答有关。

        Vagrant:Vagrant 基本上是 VirtualBox VM 之上的命令行界面。您可以使用它同时启动多个虚拟机(甚至可以从 Jenkins 完成)。使用 Puppet、Chef、SaltStack 等供应商来设置数据库、配置等。

        构建流程工具,例如运行时设计自动化 (RTDA) 提供的工具。商业的。这很可能是矫枉过正。

        【讨论】:

        • 对,但这是理论。我对现实生活中的经历更感兴趣。特别是,我想了解人们在使用这些工具测试复杂系统时发现的问题和限制。例如:他们升级了吗?测试是否易于维护?我可以对它们进行参数化(即测试多个操作系统、架构等)吗?参数化和可视化可以很好地结合在一起吗?等等。使用哪个框架来处理虚拟机,我将编写多少集成代码?
        • 我觉得这套工具可以用来设置一个复杂的多组件系统的测试,但它不会是同质的、可维护的、易于理解的等等。
        • Robot Framework 是一种用于编写验收测试的工具,并不特别紧贴任何系统架构或工作流程。我用它来检查一个由大约 20 个网络组件组成的系统,并进行了数百次测试。
        • Cucumber link 是一个类似的工具,可能更出名。我不熟悉,所以无法比较。 Cucumber 基于 Ruby,最初用于 WebApps。
        【解决方案4】:

        如果您的测试服务器有OpenSSH 或其他一些 SSH 服务器服务,您可以通过 SSH Chanel 开始测试。

        例如,在 Java 语言中:

        1. 您可以使用TestNG 或 JUnit 来组织测试用例,两者都可以轻松与 Jenkins 集成。
        2. 在测试代码中,导入JSCH 并创建您自己的ssh 客户端以在远程服务器上执行您的命令行。或者将命令行推送到 plink.exe(Putty 的一部分)或其他一些也将用于执行命令行的 3rd 方 ssh 客户端。 对于并行执行,只需使用多线程推送命令即可。
        3. 检查返回的代码和消息。

        同样,你也可以使用 Robot Framework 来做这件事,它也很容易与 Jenkins 集成(有一个 3rd 方插件)。它还有 ootb ssh 库。

        此外,如果您的应用程序没有命令行入口,您还可以使用 AutoIT 库通过 GUI 操作应用程序。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-10-28
          • 2015-07-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-01
          • 2012-07-29
          相关资源
          最近更新 更多