什么工具可以测试复杂的多进程系统?

时间:2013-04-29 10:42:52

标签: jenkins automated-tests

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

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

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

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

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

    你会用什么工具来做?或者你会尝试直接在詹金斯做?

4 个答案:

答案 0 :(得分:2)

答案是:机器人框架(见12)。

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

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

答案 1 :(得分:2)

根据系统的复杂程度,您可以使用多种工具。通常,您需要某种工作流程,最后可以看到结果。我没有给出一个明确的答案,而是指向一些工具/插件。

詹金斯:

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

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

构建流程工具,例如Run-Time Design Automation(RTDA)提供的工具。商业。这很可能是一种过度杀伤。

答案 2 :(得分:2)

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

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

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

在不同的环境中,有不同的工具,有多个堆栈并不是很有趣。 Jenkins在Java堆栈上运行,Puppet& Ruby堆栈上的Chef,并且有类似的Python工具,c& perl堆栈。如果你想拥有最佳的集成问题,或者你自己编写一个堆栈并编写代码,你必须自己决定。两者都可以工作,也不是微不足道的。团队经验很可能是那里的决定因素。

DevOps中的反馈循环比现代CI开发环境差很多,所以你必须做更多的规划和工作。前期研究。你可以在一天内完成的实验次数要低得多,至少20左右,所以第一次工作会很困难。确保你有经验的人这样做。

答案 3 :(得分:1)

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

例如,在Java语言中:

  1. 您可以使用TestNG或JUnit来组织测试用例,两者都可以轻松地与Jenkins集成。
  2. 在测试代码中,导入JSCH并创建自己的ssh客户端以在远程服务器上执行命令行。或者将命令行推送到plink.exe(Putty的一部分)或其他一些第三方ssh客户端,这些客户端也将用于执行命令行。 对于并行执行,只需使用多线程来推送命令。
  3. 检查返回的代码和消息。
  4. 同样,你也可以使用Robot Framework来实现这一点,这也很容易与Jenkins集成(有一个第三方插件)。它还有ootb ssh库。

    更重要的是,如果您的应用程序没有命令行输入,您还可以使用AutoIT库通过GUI操作应用程序。